[ASP.NET]Response.Redirect所引發的ThreadAbortException解決方式

[ASP.NET]Response.Redirect所引發的ThreadAbortException

在ASP.NET程式中,在切換頁面時,常常會直接呼叫Response.Redirect("OtherPage"),所以這時會引Call Response.End()然後Thread.Abort(),然後就引發ThreadAbortException。

然而看似正常的動作,如果系統有寫Log的話,就會常常記錄到這類的訊息,對系統Debug也沒有幫助。

所以我們可參考「Handling ThreadAbortException with Response.Redirect() : Best possible approaches」,如果錯誤不是ThreadAbortException才記錄,或是在底層的Page中去建立Redirect的Method,然後把Exception吃掉,如下

void Application_Error(object sender, EventArgs e)
{ 
        // Code that runs when an un-handled error occurs
        Exception ex = Server.GetLastError();
         
        System.Threading.ThreadAbortException exception = ex as System.Threading.ThreadAbortException;
        if (exception == null)
        {
             //Log or report only if this is not ThreadAbortException
              Logger.LogException(ex);   
        }
}

以下是在底層的Page中去建立Redirect的Method,然後把Exception吃掉,系統就直接Call Redirect不要用Response.Redirect。

protected void Redirect(string url)
{
        try
        {
            Response.Redirect(url);
        }
        catch
        {
            //把錯誤給吃掉
        }
}

 

詳細資訊,請參考:Handling ThreadAbortException with Response.Redirect() : Best possible approaches

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^