私ActionResult
はを返しますが、File
条件付きでを返すためにも必要Stream
です。
ActionResult
を返す方法に関するドキュメントを見つけることができませんでしたStream
。
これがファイルを返すための私のコードです:
return File(memoryStream,.... )
前述のように、私はただを返す必要がありStream
ます。
私ActionResult
はを返しますが、File
条件付きでを返すためにも必要Stream
です。
ActionResult
を返す方法に関するドキュメントを見つけることができませんでしたStream
。
これがファイルを返すための私のコードです:
return File(memoryStream,.... )
前述のように、私はただを返す必要がありStream
ます。
私の以前の答えは日付が付けられました。
現在のところ、File
異なるタイプのActionResultが返されるのは、指定された引数によって異なります。
// to return FileStreamResult
return File(memoryStream, "application/pdf");
// or..
return File(memoryStream, "application/pdf", "file_name");
MemoryStream stream = someService.GetStream();
return new FileStreamResult(stream, "application/pdf")
アクションに別のアクションを呼び出すことは、デザインの匂いです。あなたはそれを避けるべきです。単純に、再利用する必要のあるロジックをサービスレイヤーの2つのアクションの間に配置します。次に、2つのアクションからこのロジックを呼び出します。
例えば:
public ActionResult Action1()
{
Stream stream = service.GetStream();
// ... do something with the stream and return a view for example
return View();
}
public ActionResult Action2()
{
Stream stream = service.GetStream();
// let's return the stream to the client so that he could download it as file
return File(stream, "application/pdf");
}
これで、最初のアクションから2番目のアクションを呼び出す必要がなくなりました。
Stream
aのアクションメソッドの結果としてaを使用する最短の方法Controller
は、質問ですでに示した方法です。のFile
ヘルパーメソッドを使用しController
ます。これはを返しますFileStreamResult
。
をとる利用可能なオーバーロードがいくつかありますStream
。どちらのオーバーロードでも、応答のMIMEタイプを指定する必要があります。これはContent-Type
、応答のヘッダーとして発行されます。これがアプリケーションに不明な状況である場合は、いつでも、text/plain
またはapplication/octet-stream
任意のテキストまたはバイナリデータをそれぞれ指定できます。1つのオーバーロードは、該当する場合、ブラウザのダウンロードダイアログ(Content-Disposition
ヘッダーを介して制御)に表示するファイル名を設定する3番目のパラメータを追加で取得します。
署名のオーバーロード:
protected internal FileStreamResult File(
Stream fileStream,
string contentType
)
と
protected internal virtual FileStreamResult File(
Stream fileStream,
string contentType,
string fileDownloadName
)
使用例:
return File(myStream, "application/pdf");
また
return File(myStream, "application/pdf", "billing-summary.pdf");