.NET - 使用“Response.BinaryWrite()”使IE11关闭

时间:2015-01-14 15:46:05

标签: c# asp.net .net internet-explorer httpresponse

我有一个ASP.NET页面和一个c#方法,它接受一个内存流(excel文件),然后使用HTTPResponse-class将这个文件以二进制形式传输到浏览器。

    public static void WriteStreamToBrowser(MemoryStream streamExcelFile, string filename, bool isResponseEnd = false)
    {
        System.Web.HttpResponse Response = System.Web.HttpContext.Current.Response;
        Response.ContentType = "application/vnd.ms-excel";
        Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", filename));
        Response.Clear();

        Response.BinaryWrite(streamExcelFile.GetBuffer());
    }

现在,当我在Firefox或Chrome中使用我的asp.net页面时,此方法可以正常工作。他们整齐地触发网站“你想下载这个文件”功能。

然而,当使用IE11时,浏览器窗口会立即关闭,但“您要下载此文件吗?”对话框实际上弹出并保持不变。

我猜测IE在响应方法方面需要一些特殊处理,但我无法弄清楚我做错了什么。

如何更改上述方法,以便与IE11一起使用?

-

如果您需要任何额外的细节,请告诉我们!

编辑:

值得一提的是,调试不会抛出任何异常。

此外,弹出的对话框实际上是下载历史记录。

编辑2:

我试图遵循其他指南中的一些建议,并添加了一些内容。结果仍然是一样的。

    public static void WriteStreamToBrowser2(MemoryStream streamExcelFile, string filename, bool isUseNewExcel = true)
    {
        System.Web.HttpResponse Response = System.Web.HttpContext.Current.Response;
        string contentType = isUseNewExcel ? "application/vnd.ms-excel" : "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

        Response.Clear();
        Response.Buffer = true;

        Response.ContentType = "application/vnd.ms-excel";
        Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", filename));
        Response.AddHeader("content-length", streamExcelFile.Length.ToString());
        Response.AddHeader("content-type", contentType);

        Response.BinaryWrite(streamExcelFile.GetBuffer());

        //to avoid ThreadAbortion
        Response.Flush();
        Response.SuppressContent = true;
        HttpContext.Current.ApplicationInstance.CompleteRequest();
        Response.Close();
    }

1 个答案:

答案 0 :(得分:0)

好吧,我设法通过在文件名中添加+“。xls”来解决损坏的Excel下载问题。为什么IE而不是Chrome和Firefox要求你在filenamestring中明确定义扩展名,我永远不会知道。要清楚,这并没有解决我关闭我的主窗口的问题,但现在不是问题。