2013-05-30 76 views
0

当我的网站建立PDF并打开对话框让用户保存或打开它时,我不断收到此错误消息。远程主机关闭连接 - asp.net MVC3

这是完全错误的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()。这听起来正确吗?如果是这样,我能做些什么来阻止它?

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

谢谢 - 让我知道如果你需要更多的信息

+1

是的,你不能在响应结束后返回View(),因为它试图在已经发回给用户的响应中发送更多的HTML。 – mclark1129

回答

1

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

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

原始响应对象的操作通常在MVC中被忽略,因为它绕过了框架的神奇基础。

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

+1

很好的答案,谢谢kilsek –

相关问题