Maison  >  Article  >  développement back-end  >  Comment renvoyer un fichier au lieu de JSON dans l'API Web ASP.Net Core ?

Comment renvoyer un fichier au lieu de JSON dans l'API Web ASP.Net Core ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-04 07:04:30365parcourir

How to Return a File Instead of JSON in ASP.Net Core Web API?

Renvoi d'un fichier dans l'API Web ASP.Net Core

Problème :

Lors de la tentative de renvoi d'un fichier dans un Contrôleur d'API Web ASP.Net Core, le HttpResponseMessage est renvoyé au format JSON avec un en-tête de contenu application/json, plutôt que sous forme de fichier.

Tentative de code :

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

Cause :

Le HttpResponseMessage est traité comme un modèle par le framework de l'API Web car il est renvoyé par une action décorée avec l'attribut [HttpGet].

Solution :

Pour renvoyer correctement un fichier, modifiez l'action du contrôleur pour renvoyer un IActionResult :

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

Remarque :

Le framework éliminera le flux utilisé une fois la réponse terminée. L'utilisation d'une instruction using pour supprimer le flux avant l'envoi de la réponse entraînera une exception ou une réponse corrompue.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn