ホームページ  >  記事  >  バックエンド開発  >  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 はファイルとしてではなく、アプリケーション/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;
}

原因:

HttpResponseMessage は、[HttpGet] 属性で修飾されたアクションから返されているため、Web API フレームワークによってモデルとして扱われています。

解決策:

ファイルを正しく返すには、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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。