gpt4 book ai didi

asp.net-mvc-4 - 使用 Asp MVC 4.0 FileResult 时出现 Internet Explorer 错误

转载 作者:行者123 更新时间:2023-12-03 04:11:23 28 4
gpt4 key购买 nike

我有以下代码,部署在 https Asp 站点上,使用 MVC 4.0 构建:

public FileResult ANotSoWorkingFunction(string filePath, string fileName)
{
pathToFile = string.Format("~/{0}/{1}", pathToFile, fileName);
return File(new FileStream(pathToFile, FileMode.Open), "application/pdf", fileName);
}

这适用于 Chrome、Firefox 和 IE9(正如你们中的许多人可能已经猜到的那样)。但它会抛出一个:

---------------------------
Windows Internet Explorer
---------------------------
Internet Explorer cannot download someFileName from a_site.com.


Internet Explorer was not able to open this Internet site. The requested site is either unavailable or cannot be found. Please try again later.
---------------------------
OK
---------------------------

在 IE6,7,8 上

任何关于这个的想法或线索都非常感谢,因为我已经花了一整天的时间来玩 html header。

编辑:

以下是 IE7 的 header :

HTTP/1.1 200 OK
Cache-Control: private, no-cache="Set-Cookie"
Content-Type: application/pdf
Server: Microsoft-IIS/7.5
X-AspNetMvc-Version: 4.0
X-AspNet-Version: 4.0.30319
Set-Cookie: .ASPXAUTH=; expires=Mon, 11-Oct-1999 21:00:00 GMT; path=/; HttpOnly
X-Powered-By: ASP.NET
Date: Wed, 04 Apr 2012 08:43:50 GMT
Content-Length: 233324

以下是 IE9 中的:

HTTP/1.1 200 OK
Cache-Control: private, no-cache="Set-Cookie"
Content-Type: application/pdf
Server: Microsoft-IIS/7.5
X-AspNetMvc-Version: 4.0
X-AspNet-Version: 4.0.30319
Set-Cookie: .ASPXAUTH=; expires=Mon, 11-Oct-1999 21:00:00 GMT; path=/; HttpOnly
X-Powered-By: ASP.NET
Date: Wed, 04 Apr 2012 08:42:14 GMT
Content-Length: 233324

谢谢,

最佳答案

我想我也遇到了你的问题。

我还运行 IIS 7.5 并通过 HTTPS 请求上的操作下载 PDF。由于我尚未隔离的原因,IIS 7.5 似乎将 no-cache="Set-Cookie" 附加到我的 Cache-Control 响应 header ,无论我设置什么将设置缓存到响应上。这导致 the fairly well documented no-cache issue on IE6, IE7, and IE8 .

为了解决这个问题,我在 FileContentResult 周围做了一个小的包装器,它清除了 header ,称为父级,然后将 Cacheability 设置为“Private”。这回避了 IIS 7.5 坚持将 no-cache="Set-Cookie" 添加到 header 的做法,并且在我测试的所有浏览器中都能正确下载文件。如果您想模仿我所做的,首先,这是我的 FileContentResult 包装器。

public class PdfContentResult : FileContentResult {

public PdfContentResult(byte[] data) : base(data, "application/pdf") { }

public PdfContentResult(byte[] data, string fileName) : this(data) {
if (fileName == null) {
throw new ArgumentNullException("fileName");
}

this.FileDownloadName = fileName;
}

public override void ExecuteResult(ControllerContext context) {
context.HttpContext.Response.ClearHeaders();

base.ExecuteResult(context);

context.HttpContext.Response.Cache.SetCacheability(HttpCacheability.Private);
}
}

然后我向我的 ControllerExtensions 添加了一个扩展方法,以便很容易找到:

public static class ControllerExtensions {

public static PdfContentResult Pdf(this Controller controller, byte[] fileContents, string fileName) {
return new PdfContentResult(fileContents, fileName);
}

}

最后,在操作中,我做了与此等效的操作:

public ActionResult MyGeneratedPdf() {
byte[] myPdfContentInByteStream = GetPdfFromModel();
return this.Pdf(myPdfContentInByteStream, "MyFile.pdf");
}

显然,如果您要下载各种数据类型,您可能不希望将解决方法与 PDF 如此紧密地绑定(bind)。

关于asp.net-mvc-4 - 使用 Asp MVC 4.0 FileResult 时出现 Internet Explorer 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9996353/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com