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>
对MVC Core的重要推荐。我删除了我的中间件并添加了'httpErrors'模块,并且由于每个错误的路径属性都允许一个值,例如'path =“/ Error/CustomAction”'我可以使用错误控制器处理自定义错误页面/视图。 –
这是一个能够通过视觉工作室进行实时/远程连接的情况,这很棒..否则,这是一个打击或者失败,并且不断重复一次发布/测试,希望获得最好的结果是一个真正的痛点。 – razblack
我很好奇,但是如果你想通过说一个咆哮系统来处理消息给客户端,你会发生这种重定向会发生什么。 – razblack