2010-08-12 54 views
0

如果用戶嘗試上傳大於最大請求長度的文件,我想顯示自定義錯誤頁面。如何從ASP.NET MVC 2中的Application_Error重定向?

根本沒有代碼,當上傳一個大文件(而不是着名的黃色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問題/答案中的代碼,所以我想我會嘗試它。

所以 - 有沒有什麼特殊的關於這個特定的錯誤,使重定向不可能?

如果您想嘗試一下自己(和明白我的意思對奇怪的錯誤非頁面),這裏的一些快速copypasta添加到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),它應該給這個神祕的錯誤(不重定向)。

回答

0

這是一個非常古老的問題,我剛剛解決了一個問題,雖然我從未在此發佈答案。

如果我記得正確,問題實際上是與IIS服務器,而不是MVC應用程序。服務器本身具有最大的請求長度,並且違反此規則時表現得非常奇怪。

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

無論如何,我相信我試圖通過HTML表單進行大文件上傳,從根本上解決了一些問題。相反,我實現了一個異步文件上傳器,這樣我就不必擔心這個問題 - 它提供了更好的用戶epxerience,而且我不必再爲此而撓頭。

3

我能解決我的問題。錯誤處理還發送了一封詳細說明錯誤的電子郵件。這是拋出另一個例外。但是這個例外是不允許冒泡的,所以我無法看到它。

總之,確保沒有什麼會拋出另一個異常,所有應該工作正常。

與其他海報發佈相反,你不必重寫你的整個錯誤處理塊......上帝我討厭當人們這樣做。 「哦,我知道你的問題的答案,只是在這個例子後重做一切!」。您如何閱讀代碼並嘗試幫助調試它。如果你不能,那麼就不要回應。僅僅因爲你正在回答一個問題,那並不意味着你比問問題的人更聰明。