HTTP错误404.13的自定义错误页面ASP.NET核心MVC

问题描述:

我对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应用程序处理的。

你是对的。在进入你的管道之前,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