0

当我的网站构建 PDF 并打开对话框以允许用户保存或打开它时,我不断收到此错误消息。

这是 Elmah 中的完整错误:

The remote host closed the connection. The error code is 0x800704CD

现在,我很确定用户永远不会看到这个错误,但是我的日志中充满了它们,我只想摆脱它!

单击我页面上的链接链接到构建 pdf 的控制器操作。这是代码的最后一部分:

        HttpContext.Current.Response.Clear();
        HttpContext.Current.Response.ContentType = "application/pdf";
        HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=filename.pdf");
        HttpContext.Current.Response.BinaryWrite(stream.ToArray());
        HttpContext.Current.Response.Flush();
        stream.Close();
        HttpContext.Current.Response.End();

        Return View();

我认为这Response.End()是引发错误的原因,因为该操作在响应结束后试图继续。这听起来正确吗?如果是这样,我能做些什么来阻止它吗?

即使用户没有看到错误,我也看到了,必须解决!

谢谢 - 如果您需要更多信息,请告诉我

4

1 回答 1

1

我建议使用FileResult类型来返回文件内容。这是 MSDN 文档的链接:http: //msdn.microsoft.com/en-us/library/system.web.mvc.fileresult (v=vs.98).aspx

要回答您的问题, Response.End 会导致线程立即中止,并且在此之后尝试运行的任何代码都会在服务器端引发异常。由于响应已经交付给客户端,它只会出现在日志中。

在 MVC 中,对原始 Response 对象的操作通常不受欢迎,因为它绕过了框架的神奇基础。

填充 aFileResult将允许您执行您的工作,将文件内容作为流提供并命名下载的文件。填充所需的属性后,只需返回FileResult而不是返回View().

于 2013-05-30T18:44:20.253 回答