[解決済み] ASP.Net Core Web APIでファイルを返す
2022-04-20 11:21:10
質問
問題点
ASP.Net Web API コントローラでファイルを返したいのですが、どのアプローチでも
HttpResponseMessage
を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
をJSONとして、HTTPコンテンツヘッダーを
application/json
.
解決方法は?
もしこれがASP.net-Coreなら、Web APIのバージョンが混在していることになります。アクションが派生した
IActionResult
なぜなら、現在のコードではフレームワークが
HttpResponseMessage
をモデルとして使用します。
[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
}
}
注
フレームワークは、応答が完了した時点で、このケースで使用したストリームを破棄します。もし
using
ステートメントを使用すると、レスポンスが送信される前にストリームが破棄され、例外や破損したレスポンスが発生します。
関連
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み】「...は'型'であり、与えられたコンテキストでは有効ではありません」を解決するにはどうすればよいですか?(C#)
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み] ファイルアップロード ASP.NET MVC 3.0
-
[解決済み] ASP.NET Core Web APIの例外処理
-
[解決済み】ASP.NET Core RC2 Web ApiからHTTP 500を返すには?
-
[解決済み】ASP.NET Coreがステータスコード付きのJSONを返す
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】Unity3DでOnTriggerEnterが動作しない件
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み] EntityTypeにキーが定義されていないエラー
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である
-
[解決済み】ASP.NET Web APIでコントローラからバイナリファイルを返す。