2017-08-22 124 views
1

我有一個問題弄清楚爲什麼叫Redirect.Response()被丟棄查詢字符串

Response.Redirect(urlWithQueryParams, false) 

其中urlWithQueryParams是「本地主機/表格/確認?形式=%7BE92EB767-8BB6-44F1-A4C9- 9CDB2C2DBCCC%7D & id = 8454DDBC072C49A48AD116019A9D5824 & value = gESO%2BDDBGEAA7eZMz2JqHQ%3D%3D「正在丟棄重定向發生時屬於url一部分的所有查詢參數。我現在有重定向設置爲

Response.Redirect(urlWithQueryParams); 

但是,調用就像是造成ThreadAbortAbortException每當用戶提交表單和重定向被觸發被拋出。我發現一對夫婦一個SO帖子說要增加在那裏的假標記並遵循

HttpContext.Current.ApplicationInstance.CompleteRequest(); 

但每當我添加了假標誌,頁面重定向到正確的頁面,但下降沿的查詢參數辦法。用戶被重定向到的確認頁面需要這些參數才能正確顯示,並且找不到指向此問題原因的任何內容。有沒有人遇到過這個問題?

+0

請創建一個[最小,完整的和可驗證的例子](https://stackoverflow.com/help/mcve)。我們會更容易幫助你。 – mscheker

+0

@mscheker使它更短,更重要!希望有幫助。 – themillennialdev

回答

0

這是我這樣做的方式。

try 
{ 
    // this is throw the ThreadAbortException exception 
    Response.Redirect(stringUrl, true); 
} 
catch (ThreadAbortException) 
{ 
    // ignore it because we know that comes from the redirect 
} 
catch (Exception x) 
{ 
    // log the error 
} 

我在這裏解釋一下爲什麼Redirect to a page with endResponse to true VS CompleteRequest and security thread

總之,異常,因爲你停止頁面的處理是正常的,我們希望這樣做的原因有兩個。 1)爲了安全,2)只是停止其餘的不需要的CPU處理。

也是爲什麼你失去了你的查詢字符串,因爲endResponse只是它的奇特的「結尾」,呼籲AbortCurrentThread();的處理 - 可能在線程的其餘部分代碼是添加的東西...

+0

這兩個答案都有兩個否定的投票,至少說明了爲什麼以及如果中止一個線程會出現什麼問題。當您不停止線程時,請檢查安全問題。運行頁面的線程必須停止 - 爲什麼那麼糟糕?並且該線程僅僅被異常終止... – Aristos

+0

如果你真的明白了答案,你會發現如果你不停止處理你有安全問題... https://stackoverflow.com/questions/14641143/redirect-到一個頁面與 - endresponse到真-VS-completerequest和安全,THRE/14641145#14641145 – Aristos