需要思考的一些場景。有一個遺留代碼,它具有以下實現Example1和Example2。如果我們試圖實現MSDN recommendation那麼遺留代碼將失敗。如何改進遺留代碼實現,Response.Redirect?
這裏是一個傳統的代碼示例:
實施例1:
void Page_Load() { .... some code if(condition) { /// some condition } else { RedirectPage(url); } // another code block // some other conditions. }
實施例2:
a. File1.ascx void Page_Load() { try { .. some code base.CheckPreference(); RedirectPage(defaultPage); } catch(Exception ex) { ExceptionHandling.GetErrorMessage(ex); } } b. BaseClass.cs // this is the base class void CheckPreference() { try { if(condition) { RedirectPage(url1); } else if(condition2) { RedirectPage(url2); } else { // update session } } catch(Exception ex) { ExceptionHandling.GetErrorMessage(ex); throw; } } void RedirectPage(string url) { Response.Redirect(url); }
一種可能的方式是在類例如endExecution添加一個布爾字段,無論何時調用RedirectPage,都將該字段設置爲true。
我們必須更新RedirectPage代碼參見下面的代碼片段:
// Updated code - MSDN recommendation. void RedirectPage(url) { Response.Redirect(url, false); this.Context.ApplicationInstance.CompleteRequest(); endExecution = true; }
請建議一些其他更好的方法來改善遺留代碼執行。
您遇到的問題是什麼?通過將'false'傳遞給重定向方法,然後調用'CompleteRequest()',這應該結束請求。 – 2010-11-19 18:26:15
您的遺留代碼中會發生什麼?什麼是錯誤 – 2010-11-19 18:29:44
在傳統代碼中存在的代碼塊在RedirectPage不會被調用之後,因爲RedirectPage引發ThreadAbortException。 但是,如果我實現了MSDN建議的內容,那麼RedirectPage之後的代碼將得到執行,我不想執行它。由於這是遺留代碼,在很多地方,RedirectPage之後有很多代碼,例如,撥打服務電話,更新會議等... 所以我正在尋找替代方法。 – 2010-11-19 19:46:35