Http错误的自定义错误页面404.13 ASP.NET Core MVC

我对ASP.NET和MVC一般都是新手; 我一直在将ASP.NET MVC应用程序迁移到ASP.NET MVC Core。 在前一个框架中,我能够处理以下臭名昭着的错误的HttpException:

HTTP错误404.13 – 未找到

请求过滤模块被配置为拒绝超过请求内容长度的请求。

我知道我可以增加允许的最大长度,默认情况下目前为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 Core中找到替代方案。 我相信我需要在我的Startup.cs Configure方法中插入一些中间件来实现一个自定义错误页面来处理HttpException并重定向它,但我真的迷失了这个问题。

通过在我的configure方法中使用以下内容,我成功地将以下中间件用于http错误的自定义错误页面,例如404 – Not Found或403 – Forbiden:

 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并将其指向站点上的页面。