C# 使用ASP.NET在IE8中通过https下载文件

C# 使用ASP.NET在IE8中通过https下载文件,c#,asp.net,excel,https,C#,Asp.net,Excel,Https,我试图让用户能够从我们的网站下载Excel电子表格,方法是通过以下按钮重定向: Response.Redirect(string.Format("../excel/ExcelForm.aspx?pathName=&fileNameDisplay={0}&fileNameUnique={1}", "spreadsheet.xls", fileName)); aspx页面只是通过响应对象发回文件,如下所示: Response.ContentType = "application/

我试图让用户能够从我们的网站下载Excel电子表格,方法是通过以下按钮重定向:

Response.Redirect(string.Format("../excel/ExcelForm.aspx?pathName=&fileNameDisplay={0}&fileNameUnique={1}", "spreadsheet.xls", fileName));
aspx页面只是通过响应对象发回文件,如下所示:

 Response.ContentType = "application/vnd.ms-excel";
 Response.AddHeader("Content-Disposition", "attachment; filename=" + fileNameDisplay);
 Response.WriteFile(Server.MapPath(pathName + fileNameUnique));
 Response.Flush();
 Response.End();
在我的机器上一切正常,但当我们把它放在服务器上时,https加上无缓存设置会给我们一个错误,说“Internet Explorer无法下载[blahblahblah]”。显示excel按钮的页面上的缓存设置:

HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
HttpContext.Current.Response.ExpiresAbsolute = DateTime.Now.AddDays(-1);
HttpContext.Current.Response.Expires = 0;
HttpContext.Current.Response.AddHeader("Pragma", "no-cache");
HttpContext.Current.Response.AddHeader("cache-control", "private, no-cache, must-revalidate no-store pre-check=0 post-check=0 max-stale=0");
HttpContext.Current.Response.Cache.SetNoServerCaching();
当我去掉这些线时,一切正常。但是,由于其他原因,我不允许删除它们。因此,我尝试在ExcelForm.aspx将内容添加到标题之前添加以下行:

Response.ClearHeaders();

这让我觉得“Internet Explorer无法从[url]下载ExcelForm.aspx”。这就是我被困的地方。建议?

我最近从MVC控制器方法导出CSV文件时遇到了类似的问题。我发现加上:

      Response.ClearHeaders();
      Response.Clear();
在IE中为我解决了这个问题


希望这有帮助

我也面临同样的问题

当我在谷歌上搜索时,我发现响应标题中的“no chache”设置,即以下代码是问题的原因

Response.AppendHeader("Pragma", "no-cache") 
Response.AppendHeader("Cache-Control", "no-cache") 
Response.AppendHeader("max-age", "0") 
一些博客说,要解决这个问题,您应该在Web服务器和所有客户端计算机上的Windows注册表中进行一些修改(:O),但在每个客户端计算机上进行注册表设置是不可行的

根本原因是响应头中没有缓存设置,所以我只是添加了

Response.ClearHeaders() 
在将要下载的内容添加到响应标头之前。代码如下所示

Response.ClearHeaders() 
Response.ContentType = "application/ms-excel" 
Response.AppendHeader("content-disposition", "attachment; filename=""" + fileName + """") 
Response.BinaryWrite(fileBytes) 
Response.End() 
它解决了这个问题

Response.AppendHeader("Pragma", "no-cache") 
Response.AppendHeader("Cache-Control", "no-cache") 
Response.AppendHeader("max-age", "0") 

享受

我遇到了完全相同的问题,我无法通过IE8下载二进制流

根据本页上的信息,我的新代码如下

  • Response.ClearHeaders()
  • Response.ContentType=“应用程序/八位字节流”
  • AppendHeader(“content disposition”,string.Format(“attachment;filename={0}”,“nameoffile.exe”)
  • 响应。二进制写入(字节)
  • Response.End()

现在它在所有浏览器下都像一个魔咒一样工作

我来试试你的建议。非常感谢。(我有同样的问题)您拥有\o/。工作得很有魅力\o/