web-dev-qa-db-fra.com

Fichier de retour dans API Web ASP.Net Core

Problème

Je souhaite renvoyer un fichier dans mon contrôleur API Web ASP.Net, mais toutes mes approches renvoient le HttpResponseMessage en tant que JSON.

Code jusqu'ici

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

Lorsque j'appelle ce noeud final dans mon navigateur, l'API Web renvoie HttpResponseMessage sous forme de fichier JSON avec l'en-tête de contenu HTTP défini sur application/json.

85
Jan Kruse

S'il s'agit d'ASP.net-Core, vous mélangez des versions d'API Web. Demandez à l'action de renvoyer un dérivé IActionResult car, dans votre code actuel, le cadre traite HttpResponseMessage comme un modèle.

[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