[英]Is there a way to complete the post back after writing out a file to the Response?
我有一個按鈕,當單擊時,將生成一個PDF並將其寫入響應。
這是代碼的基本結構:
try
{
using(Stream stream = generatePdf())
{
var file = createFile(stream);
file.Transmit(HttpContext.Current.Response);
}
}
catch (Exception ex)
{
// Handle exception
// Display Error Message
}
transmit方法包含以下代碼:
response.AddHeader("Content-Disposition", String.Format("attachment; filename={0}", filename));
response.AddHeader("Content-Length", bytes.Length.ToString());
response.ContentType = "application/octet-stream";
response.BinaryWrite(bytes);
下載文件工作正常,但它沒有完成回發。
如果我要在file.Transmit
之上拋出異常,錯誤處理將正常工作,我會看到消息在我的瀏覽器中顯示。 但是,如果file.Transmit
之后有異常,則沒有任何反應。 用戶保存/打開pdf,頁面不會重新加載。
如何才能使回發始終完成,這樣我可以向用戶顯示相應的消息?
聽起來你正試圖讓響應包含兩部分:頁面和 PDF。 你不能這樣做。 通常,下載頁面會在您訪問它們時(通過JavaScript,我相信)以單獨的請求開始下載,直接鏈接以防JavaScript無效。
任何一個HTTP請求只能有一個響應。
Response.End()從字面上結束整個響應。
我使用它時有兩種方法:
1)始終確保它是回發中的最終要求點。
2)(以及使用AJAX進行文件調用的唯一方法)在iframe中創建一個小頁面僅用於發送文件並在幀上調用刷新... response.end將結束該幀的響應而不是整個回發。
編輯:這是我的問題線程相同的主題使用Response.TransmitFile物理文件無法正常工作
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.