Problem:
Beim Versuch, eine Datei in einem zurückzugeben ASP.Net Core Web API-Controller, die HttpResponseMessage wird als JSON mit einem Anwendungs-/JSON-Inhaltsheader und nicht als Datei zurückgegeben.
Codeversuch:
public async Task<HttpResponseMessage> DownloadAsync(string id) { var response = new HttpResponseMessage(HttpStatusCode.OK); response.Content = new StreamContent({{__insert_stream_here__}}); response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); return response; }
Ursache:
Die HttpResponseMessage wird vom Web-API-Framework als Modell behandelt, da sie von einer Aktion zurückgegeben wird, die mit dem Attribut [HttpGet] versehen ist.
Lösung:
Um eine Datei korrekt zurückzugeben, ändern Sie die Controller-Aktion, um ein IActionResult zurückzugeben:
[Route("api/[controller]")] public class DownloadController : Controller { //GET api/download/12345abc [HttpGet("{id}")] public async Task<IActionResult> Download(string id) { Stream stream = await {{__get_stream_based_on_id_here__}}; if(stream == null) return NotFound(); // returns a NotFoundResult with Status404NotFound response. return File(stream, "application/octet-stream", "{{filename.ext}}"); // returns a FileStreamResult } }
Hinweis:
Das Framework entsorgt den verwendeten Stream, nachdem die Antwort abgeschlossen ist. Die Verwendung einer using-Anweisung zum Löschen des Streams vor dem Senden der Antwort führt zu einer Ausnahme oder einer beschädigten Antwort.
Das obige ist der detaillierte Inhalt vonWie kann ich in der ASP.Net Core-Web-API eine Datei anstelle von JSON zurückgeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!