关于 asp.net:强制下载:文件下载对话框在 IE6 SP1 中打开两次

On forcing download: File Download dialog opens twice in IE6 SP1

我的 ASP.Net 页面应该创建一个文档并强制下载(打开"文件下载"对话框)。它在大多数浏览器上都能正常工作,但由于某种原因,在 IE6 SP1 (windows 2000) 上,"文件下载"对话框会打开两次。
任何想法为什么?

我的非常简单的代码(C#):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
protected void bnCreateDocument_Click(object sender, EventArgs e)
{

    string documentText = GetDocumentText();


    Response.Clear();
    Response.Charset ="";
    Response.ContentType ="application/msword";

    string filename ="MyDoc.doc";
    Response.AddHeader("Content-Disposition","attachment;filename=" + filename);

    Response.Write(documentText);
    Response.End();
    Response.Flush();
}


您的代码看起来不错,但我想我会指出一些奇怪的地方。

如果你只是从文件系统中获取一个文件到那个字符串中,为什么不直接使用 Response.WriteFile() 呢?

另外,如果缓冲打开,Response.End() 会自动调用 Flush(),所以你不应该像那样在最后调用 Flush() - 充其量,它应该在调用 End 之前。 End() 也引发了一个 ThreadAbortedException,所以如果你可以完全避免调用它,那将是理想的。如果你可以使用 HttpApplication.CompleteRequest(),那是一个更好的方法。

在关闭 Response 对象时,有一些非常棘手且难以理解的错误需要处理。如果在处理完 Flush 和 End 调用后它仍然在发生,我会检查 Fiddler 发生了什么,也许尝试将此代码移动到 .ashx 处理程序中以使其脱离页面生命周期。