wake-up-neo.com

Gibt die Datei in der ASP.Net Core-Web-API zurück

Problem

Ich möchte eine Datei in meinem ASP.Net-Web-API-Controller zurückgeben, aber alle meine Methoden geben das HttpResponseMessage als JSON zurück.

Code soweit

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;
}

Wenn ich diesen Endpunkt in meinem Browser aufrufe, gibt die Web-API das HttpResponseMessage als JSON mit dem HTTP-Inhaltsheader auf application/json Zurück.

85
Jan Kruse

Wenn dies ASP.net-Core ist, mischen Sie Web-API-Versionen. Lassen Sie die Aktion ein abgeleitetes IActionResult zurückgeben, da das Framework in Ihrem aktuellen Code HttpResponseMessage als Modell behandelt.

[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"); // returns a FileStreamResult
    }    
}
165
Nkosi