2013-05-30 107 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 –

相關問題