動的に生成されたファイルをダウンロードするコントローラー アクションがあります。
public ActionResult DownloadFile()
{
var obj = new MyClass { MyString = "Hello", MyBool = true };
var ser = new XmlSerializer(typeof(MyClass));
var stream = new MemoryStream();
ser.Serialize(stream, obj);
stream.Position = 0;
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=myfile.xml");
Response.ContentType = "application/xml";
// Write all my data
stream.WriteTo(Response.OutputStream);
Response.End();
return Content("Downloaded");
}
参考までに:
public class MyClass
{
public string MyString { get; set; }
public int MyInt { get; set; }
}
これは機能しており、ファイル (myfile.xml) がダウンロードされます。
ただし、「ダウンロード済み」というメッセージはブラウザに送信されません。
同様に、return Content("Downloaded");
forを置き換えるとreturn Redirect("www.something.com");
、ファイルがダウンロードされる前にブラウザーがリダイレクトされます。
少し前提として、ユーザージャーニーは次のとおりです。
- ユーザーが前のビューでフォームに入力
- フォームが送信されました
- XML が生成され、ダウンロードされます
- ユーザーがリダイレクトされ、「ダウンロード済み」ビューが表示されます(F5 キーを押してもフォームは再投稿されません)。