【发布时间】:2016-12-03 13:10:36
【问题描述】:
总的来说,我对 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 配置方法中插入一些中间件来实现自定义错误页面来处理 HttpException 并重定向它,但我真的迷失了这个问题。
通过在我的配置方法中使用以下内容,我已经成功地将以下中间件用于 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 应用程序处理的。
【问题讨论】:
标签: c# asp.net asp.net-mvc asp.net-core