簡體   English   中英

即使清除錯誤也無法從Application_Error重定向

[英]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;

這樣,直到准備好發送響應后,才發送響應(包括標頭)。

看這里。

發送HTTP標頭到IIS7.5后,服務器無法設置狀態

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM