我有一个下载动态生成文件的控制器操作:
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");
为,return Redirect("www.something.com");
则浏览器在文件下载之前被重定向。
作为一个序言,用户旅程是:
- 用户在以前的视图中填写表格
- 表格已提交
- 生成并下载 XML
- 用户被重定向/显示“已下载”视图(因此按 F5 不会重新发布表单)