ASP.NET MVC 6基于HTTP状态代码处理错误

Muh*_*eed 11 .net c# asp.net asp.net-mvc asp.net-core-mvc

我想为每个状态代码显示不同的错误消息,例如:

  • 400错误请求
  • 403禁止
  • 500内部服务器错误
  • 404未找到
  • 401未经授权

如何在新的ASP.NET MVC 6应用程序中实现这一目标?我可以使用内置的UseErrorHandler方法执行此操作吗?

application.UseErrorHandler("/error");
Run Code Online (Sandbox Code Playgroud)

另外,我注意到即使使用上面的处理程序,输入一个不存在的URL,例如/ this-page-does-not-exist,也会导致IIS中出现一个丑陋的404 Not Found错误页面.怎么还能处理?

在MVC 5,我们不得不使用ASP.NET System.Web程序的customErrors部分,并在web.config文件中的system.webServer httpErrors部分,但它是很难用一个笨拙的工作,有很多很奇怪的行为.MVC 6能让这更简单吗?

Kir*_*lla 11

你可以使用StatusCodePagesMiddleware这个.以下是一个例子:

public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
    app.UseStatusCodePagesWithReExecute("/StatusCodes/StatusCode{0}");

    app.UseMvcWithDefaultRoute();
Run Code Online (Sandbox Code Playgroud)

处理状态代码请求的控制器:

public class StatusCodesController : Controller
{
    public IActionResult StatusCode404()
    {
        return View(viewName: "NotFound"); // you have a view called NotFound.cshtml
    }

    ... more actions here to handle other status codes
}
Run Code Online (Sandbox Code Playgroud)

一些说明:

  • 检查其他扩展方法,如UseStatusCodePagesWithRedirectsUseStatusCodePages其他功能.
  • 我在我的示例中尝试将StatusCode作为查询字符串,但看起来这个中间件不处理查询字符串,但您可以查看 代码并解决此问题.