簡體   English   中英

如何從ASP.NET MVC 2中的Application_Error重定向?

[英]How to redirect from Application_Error in ASP.NET MVC 2?

如果用戶嘗試上傳大於最大請求長度的文件,我想顯示一個自定義錯誤頁面。

完全沒有代碼,當上傳大文件時( 不是著名的黃色ASP錯誤頁面),我會遇到一個非常神秘的“無法顯示頁面”錯誤-與脫機時遇到的瀏覽器錯誤相同。 這讓我感到很奇怪,並且可能與此問題有關。

我將此添加到了Global.asax文件中:

  //simplification
  public void Application_Error(object sender, EventArgs e)
  {
      Response.Redirect("http://www.google.com", false); //This IS getting hit
  }

自定義錯誤在我的Web.config文件中關閉(並且必須保持這種狀態)。

看起來很簡單,對吧? 但是無論出於何種原因,這種重定向都無濟於事。 它受到打擊。 它正在執行那條線。 我也嘗試過將endResponse設置為true; 沒有不同。

在重定向之前,我嘗試了以下兩行:

Response.Clear();
Server.ClearError();

我認為第一個將解決在發送頭之后發生的重定向(事實並非如此); 第二個我不太確定會有什么不同,但是我已經在類似的StackOverflow問題/答案中看到了這段代碼,所以我想嘗試一下。

那么,此特定錯誤是否有某些使重定向無法進行的特性?

如果您想自己嘗試一下(看看我對非頁面錯誤的意思),可以在VS的標准MVC應用程序中添加一些快速復制方法:

Views -> Home -> Index.aspx

<asp:Content ContentPlaceHolderID="MainContent" runat="server">
    <form enctype="multipart/form-data" method="post" action="<%= Url.Action("Upload") %>">
      <input type="file" name="required-to-post" />
      <input type="submit" value="Upload" />
    </form>
</asp:Content>

Controllers -> HomeController.cs

public ActionResult Upload()
{
    return View("Index");
}

Global.asax

protected void Application_Error()
{
    Response.Redirect("http://www.google.com", false);
}

然后,只需上傳一個大文件(5mb),它就應該給出這個神秘的錯誤(無需重定向)。

我能夠解決我的問題。 錯誤處理還發送了一封詳細說明錯誤的電子郵件。 那引發了另一個例外。 但是不允許出現異常,所以我看不到它。

簡而言之,請確保沒有任何異常引發任何異常,並且一切正常。

與其他張貼者相反,您不必重寫整個錯誤處理塊...當人們這樣做時,我討厭我。 “哦,我知道您問題的答案。僅在此示例之后重做!”。 您如何閱讀代碼並嘗試幫助對其進行調試。 如果不能,那就不要回應。 僅僅因為您正在回答一個問題,並不意味着您比問這個問題的人更聰明。

您可能會發現此帖子中標記為答案的項目很有幫助: 如何在ASP.NET MVC中正確處理404?

這是一個很老的問題,盡管我從未在這里發布答案,但我還是解決了一段時間。

如果我沒記錯的話,問題實際上出在IIS服務器上,而不是MVC應用程序上。 服務器本身具有最大請求長度,並且在違反此規則時,事情表現得很奇怪。

通過更改最大服務器請求大小,我相信問題消失了。 但是我不知道在嘗試調試MVC應用程序時VS觸發的本地服務器是否可行。

無論如何,我相信我試圖通過HTML表單上傳大文件,這在根本上是錯的。 相反,我實現了一個異步文件上傳器,因此我不必為此擔心-它提供了更好的用戶體驗,而且我也不必為此再費力氣了。

暫無
暫無

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

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