首頁  >  文章  >  後端開發  >  如何在 ASP.Net Core Web API 中傳回檔案而不是 JSON?

如何在 ASP.Net Core Web API 中傳回檔案而不是 JSON?

Susan Sarandon
Susan Sarandon原創
2024-11-04 07:04:30365瀏覽

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

在ASP.Net Core Web API 中回傳檔案

問題:

嘗試在ASP.Net Core Web API中返回文件時ASP.Net Core Web API 控制器,HttpResponseMessage 以帶有application/json 內容標頭的JSON 形式返回,而不是作為文件返回。

程式碼嘗試:

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

原因:

Web API 框架將HttpResponseMessage 視為模型,因為它是因為它是個框架將HttpResponseMessage從用[HttpGet] 屬性修飾的操作傳回的。

解決方案:

要正確返回文件,請修改控制器操作以返回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
    }    
}

注意:

框架將在回應完成後處理使用過的流。在發送回應之前使用 using 語句來處理流將導致異常或損壞的回應。

以上是如何在 ASP.Net Core Web API 中傳回檔案而不是 JSON?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn