ASP.NET Web API コントローラーからファイルを返そうとすると、応答は JSON として扱われます。これを解決するには、ASP.NET Core でファイルをダウンロードするための正しいアプローチを理解することが重要です。
ASP.NET Core Web API でファイルを返すには、HttpResponseMessage の代わりに派生した IActionResult を返す必要があります。フレームワークは HttpResponseMessage をモデルとして解釈し、JSON 応答の問題を引き起こします。
以下は、IActionResult:
[Route("api/[controller]")]
public class DownloadController : Controller
{
// GET api/download/12345abc
[HttpGet("{id}")]
public async Task Download(string id)
{
Stream stream = await GetStreamBasedOnIdAsync(id);
if (stream == null)
return NotFound(); // Returns a NotFoundResult with Status404NotFound response
return File(stream, "application/octet-stream", $"{FileName}.{FileExtension}"); // Returns a FileStreamResult
}
}
注: ストリームに対して using ステートメントを使用しないでください。そうしないと、応答が送信される前に破棄され、例外または破損した応答が発生します。フレームワークは、応答が完了するとストリームの破棄を自動的に処理します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3