熟考するいくつかのシナリオ。 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); }
1つの可能な方法は、クラス、例えばendExecutionにブールフィールドを追加することですRedirectPageが呼び出されるたびにフィールドをtrueに設定します。私たちは、RedirectPageコードを更新する必要が
は、以下のコードを参照してください。
// Updated code - MSDN recommendation. void RedirectPage(url) { Response.Redirect(url, false); this.Context.ApplicationInstance.CompleteRequest(); endExecution = true; }
レガシーコードの実装を改善するために他のいくつかのより良い方法を提案してください。
遭遇している問題は何ですか?リダイレクトメソッドに 'false'を渡し、' CompleteRequest() 'を呼び出すことで、リクエストを終了する必要があります。 –
あなたのレガシーコードはどうなりますか?エラーは何ですか –
レガシーコードには、RedirectPageがThreadAbortExceptionをスローするため、RedirectPageが呼び出されなかった後のコードブロックがあります。 しかし、MSDNが示唆しているものを実装すれば、RedirectPageの後のコードは実行されます。これは実行したくありません。これはレガシーコードなので、RedirectPageの後には多くの場所でコードがあります。サービスコールの呼び出し、セッションの更新など。 私は代替アプローチを探しています。 –