2016-07-28 128 views
5

我對ASP.NET和MVC相當新,我一直在將ASP.NET MVC應用程序遷移到ASP.NET MVC Core。在前者框架,我能夠處理一個HttpException以下臭名昭著的錯誤:HTTP錯誤404.13的自定義錯誤頁面ASP.NET核心MVC

HTTP Error 404.13 - Not Found

The request filtering module is configured to deny a request that exceeds the request content length.

我知道我可以增加最大上傳允許長度,這是目前30MB的默認,但我的目標是呈現用戶通過一個友好的錯誤頁面解釋發生的事情,而不是增加允許的限制。

在ASP.NET我這樣做對我的Global.asax下面的代碼:

private void Application_Error(object sender, EventArgs e) 
{ 
    var ex = Server.GetLastError(); 
    var httpException = ex as HttpException ?? ex.InnerException as HttpException; 
    if (httpException == null) return; 

    if (httpException.WebEventCode == WebEventCodes.RuntimeErrorPostTooLarge) 
    { 
     //handle the error 
     Response.Redirect("~/Error/UploadTooLarge"); //Redirect to my custom error page 

    } 
} 

我似乎不能幾個小時的研究後發現在Asp.Net核心本的替代品。 我相信我需要在我的Startup.cs Configure方法中插入一些中間件來實現一個自定義錯誤頁面來處理HttpException並重定向它,但是我在這件事上真的迷失了方向。

我已經設法成功地使用自定義錯誤頁的HTTP錯誤下面的中間件如404 - 找不到或403 - 通過使用我的配置方法如下禁伐:

app.UseStatusCodePagesWithReExecute("/Error/StatusCode{0}"); 

除了控制器:

public class ErrorController : Controller 
{ 
    public IActionResult StatusCode404() 
    { 
     return View(viewName: "CustomNotFound"); 
    } 

    public IActionResult StatusCode403() 
    { 
     return View("CustomForbiden"); 
    } 
} 

和相應的意見。但是,404.13錯誤(上傳太大)不會被我當前的中間件處理。我相信IIS會顯示錯誤,因爲它不是由Web應用程序處理的。

回答

0

你是對的。在進入你的管道之前,IIS正在捕獲錯誤。我建議將httpErrors模塊添加到您的web.config中,並將其指向網站上的一個頁面。

<system.webServer> 
    <httpErrors errorMode="Custom" existingResponse="Replace"> 
    <remove statusCode="404" subStatusCode="13" /> 
    <error statusCode="404" 
      subStatusCode="13" 
      prefixLanguageFilePath="" 
      path="http://yourwebsite.com/path/to/page" 
      responseMode="Redirect" /> 
    </httpErrors> 
</system.webServer> 
+0

對MVC Core的重要推薦。我刪除了我的中間件並添加了'httpErrors'模塊,並且由於每個錯誤的路徑屬性都允許一個值,例如'path =「/ Error/CustomAction」'我可以使用錯誤控制器處理自定義錯誤頁面/視圖。 –

+0

這是一個能夠通過視覺工作室進行實時/遠程連接的情況,這很棒..否則,這是一個打擊或者失敗,並且不斷重複一次發佈/測試,希望獲得最好的結果是一個真正的痛點。 – razblack

+0

我很好奇,但是如果你想通過說一個咆哮系統來處理消息給客戶端,你會發生這種重定向會發生什麼。 – razblack