我正在从页面上的链接生成 CSV 并将其发送回用户。我希望维护页面上下文。这段代码在我的 2008 Dev box 上完美地运行在 IE、Chrome 和 Firefox 上,但是当在 Vista、Win 7 或 Win 8 上运行时,该文件会附加页面的 HTML。
我对传递文件的方法进行了相当多的阅读,并得出结论,response.flush() 是最好的方法。
// Convert to Bytes for Binary Write
Byte[] bytes = Utils.Instance.ReadStreamToByte(streamWriter.BaseStream);
// Call ContentType followed by clear so no extraneous content is sent. see http://msdn.microsoft.com/en-us/library/system.web.httpresponse.aspx
HttpContext.Current.Response.ContentType = "text/csv";
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AppendHeader("content-length", bytes.Length.ToString());
HttpContext.Current.Response.AppendHeader("content-Disposition", "attachment;filename=" + "MyAccount Sales Report " + MonthDDL.SelectedItem.Text + "-" + YearDDL.SelectedItem.Text + ".csv");
HttpContext.Current.Response.BinaryWrite(bytes);
HttpContext.Current.Response.Flush();
我已经搜索了为什么会发生这种情况,但尚未找到任何相关帮助。我确实改变了 Clear(); 的位置;根据上面评论中列出的 Microsoft 文章,但这没有影响。