144 votes

Fichier de retour dans l'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 sous forme de code 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 le HttpResponseMessage en JSON avec l'en-tête de contenu HTTP défini sur application/json .

249voto

Nkosi Points 95895

S'il s'agit d'ASP.net-Core, vous mélangez des versions d'API Web. L'action renvoie un IActionResult dérivé car, dans votre code actuel, le cadre traite HttpResponseMessage tant que 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
    }    
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X