私はASP.Net Web API Controllerでファイルを返したいのですが、私のすべてのアプローチは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はHTTPコンテンツヘッダーがapplication/json
に設定されたJSONとしてHttpResponseMessage
を返します。
これが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
}
}