2013-12-14 47 views
1

我試圖在用戶嘗試上傳文件對服務器來說太大時更優雅地出錯。但是,當我嘗試捕獲Global.asax.cs中的錯誤時,它似乎跳過了我的重定向代碼。這是我所擁有的核心。即使清除錯誤後仍無法從Application_Error重定向

protected void Application_Error(object sender, EventArgs e) 
{ 
    HttpContext.Current.ClearError(); 
    Response.Redirect("CustomErrors.aspx", false); 
    Context.ApplicationInstance.CompleteRequest(); 
} 

我到處尋找「答案」似乎是清除錯誤,但我已經做到了。還有什麼可能會出錯。有任何想法嗎?

回答

0

我只是想你的代碼,當我在我的測試頁的Page_Load()引發未處理的錯誤,然後嘗試在Application_Error()HttpContext.Current.ClearError()目前重定向我收到

HTTP標頭後不能重定向已發送錯誤

刪除此ClearError()方法可解決此問題。

但是,如果我在頁面上的事件(即單擊按鈕)內引發事件,即使撥打HttpContent.Current.ClearError(),也可以正常工作。

我注意到的一件事是你沒有在'CustomError.aspx'前面加'〜/',你可能想要添加這個,這樣無論錯誤發生在哪裏都可以找到頁面。 (我想我有多個文件夾併發生錯誤,上下文將位於當前文件夾中)。

添加自定義錯誤頁面的一種更好的方法就是使用必要的配置修改web.config,這將爲您執行重定向。您仍然可以在Application_Error()方法中記錄錯誤(通過Log4Net或同等方法)。你可能會發現這個question,如果你想在你的自定義錯誤頁面上顯示異常,這會很有幫助。

從這link

<configuration> 
    ... 

    <system.web> 
     <customErrors mode="RemoteOnly" 
         defaultRedirect="~/ErrorPages/Oops.aspx" /> 

     ... 
    </system.web> 
</configuration> 
+0

「頁的首部已經由在Page_Load()方法被調用時被髮送到客戶端」。呃?不,他們沒有。不過,它們*在* Application_Error事件觸發時已被提升。 –

+0

感謝您更正@AntP,我會相應地修改我的答案。 – Damon

+0

值得注意的是'Page_Load'事實上發生在其他事件處理程序之前,比如按鈕點擊的事件(你的回答似乎表明它是相反的),所以在'Page_Load'方法中重定向是完全合理的。 –

0

另一種方法是,以確保被設定如下。

Response.BufferOutput = true;

通過這種方式,直到響應已準備好發送,纔會發送響應(包括標頭)。

請看這裏。

Server cannot set status after HTTP headers have been sent IIS7.5

+0

我試過了。它仍然不會重定向。請參閱以下鏈接,瞭解我遇到的問題以及不起作用的答案:http://www.developer.com/db/article.php/10920_3426051_2 – Dalal

1

我知道這是一個較舊的線程,但我發現瞭解決的辦法......

在下面谷歌機器人的情況下被路過不良URL人物,我想只是重定向到默認值。

在您陷入錯誤Server.ClearError();那麼你可以重定向到你網站上的任何頁面。

void Application_Error(object sender, EventArgs e) 
{ 
    //... other code here.... 

    var Message = ex.Message.ToLower(); 
    var RootURL = Common.GetAppPathMasterPages() + "default.aspx"; 

    if (Message.Contains("does not exist") || Message.Contains("potentially dangerous request")) 
    { 
     Server.ClearError(); 
     HttpContext.Current.Response.Redirect(RootURL); 
     return; 
    }  

}

相關問題