[英]Cannot redirect from Application_Error even after clearing the error
當用戶嘗試上傳對於服務器而言太大的文件時,我試圖更優雅地進行錯誤處理。 但是,當我嘗試捕獲Global.asax.cs中的錯誤時,似乎跳過了我的重定向代碼。 這是我所擁有的核心。
protected void Application_Error(object sender, EventArgs e)
{
HttpContext.Current.ClearError();
Response.Redirect("CustomErrors.aspx", false);
Context.ApplicationInstance.CompleteRequest();
}
我在任何地方看到的“答案”似乎都是為了清除錯誤,但我已經做到了。 還有什么可能出問題了。 有任何想法嗎?
我知道這是一個較舊的線程,但是我找到了解決此問題的方法...
在以下情況下,Google漫游器傳遞了錯誤的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;
}
}
我剛剛嘗試了您的代碼,當我在測試頁的Page_Load()
中引發未處理的錯誤,然后嘗試使用存在於Application_Error()
方法中的HttpContext.Current.ClearError()
重定向時,我收到了
發送HTTP標頭后無法重定向錯誤
刪除此ClearError()
方法可解決此問題。
但是,如果我在頁面上的某個事件內引發該事件(即單擊按鈕),則即使調用HttpContent.Current.ClearError()
也可以正常工作。
我注意到的一件事是,您在'CustomError.aspx'前面沒有'〜/',您可能想要添加它,以便無論在哪里出現錯誤都可以找到該頁面。 (我想我有多個文件夾,並且發生錯誤,上下文將在當前文件夾中)。
添加自定義錯誤頁面的更好方法是使用必要的配置修改web.config,這將為您執行重定向。 然后,您仍然可以在Application_Error()
方法中記錄錯誤(通過Log4Net或等效方法)。 您可能會發現此問題 ,如果您想在自定義錯誤頁面上顯示異常,將很有幫助。
從這個連結
<configuration>
...
<system.web>
<customErrors mode="RemoteOnly"
defaultRedirect="~/ErrorPages/Oops.aspx" />
...
</system.web>
</configuration>
另一種方法是確保設置以下內容。
Response.BufferOutput = true;
這樣,直到准備好發送響應后,才發送響應(包括標頭)。
看這里。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.