以前にファイルアップロードの件でも少し書いたが、asp.net core webappでのファイルダウンロードについて、多分正解というのが分かったので・・・
結局、OnPostやOnGetをvoidで定義するのではなく、下記のようにActionResultを返すメソッドとして定義する。
public IActionResult OnPost(・・・) {
}処理中でファイルをダウンロードさせたい場合は、File(・・・)を使用して、FileResultを返せば良い。また、ファイルダウンロードでは無く、画面表示をさせたい場合は、Page()を使用して、PageResultを返す。
// Excelファイルのダウンロード
try {
using(xls = new ExcelPackage(new FileInfo(templatepath))) {
// セルに対して値の設定等の処理
・・・
// ちなみに、ファイル名は自動的にurlencode化されるので、
// 事前にUrlEncodeすると変なファイル名になる。
// PageModel.Fileを使用して、FileResultを返す
return File(xls.GetAsByteArray(),"application/octet-stream",filename);
}
} catch (Exception e) {
Message = $"エラー発生{e.Message}";
return Page();
}なお、File(stream,・・・)を使用する場合、Streamに書き込み等を行っていた場合、ポジションを先頭に戻さないと、実行時エラーが起きるようだ。
Stream stm = MemoryStream();
// メモリストリームに書き込み
・・・
// ポジションを先頭に
stm.Seek(0L,SeekOrigin.Begin);
return File(stm,"application/octet-stream",filename);やっぱり、基礎を覚えないとだめだね・・・






Users Today : 39
Users Yesterday : 44
Users Last 7 days : 182
Users Last 30 days : 963
Users This Month : 842
Users This Year : 15668
Total Users : 93472
Views Today : 50
Views Yesterday : 53
Views Last 7 days : 232
Views Last 30 days : 1223
Views This Month : 1050
Views This Year : 21255
Total views : 131190
Who's Online : 0
もちろん、
public async Task Post(・・・)
のように、非同期メソッドとして定義することも可能。