ASP.NET Core - 处理404和500错误

时间:2016-04-07 23:16:18

标签: c# asp.net asp.net-mvc asp.net-core

我尝试在ASP.NET MVC 6中处理404和500错误。

  1. 我在控制器中有Action,它呈现具有错误状态和描述的页面:

    [HttpGet]
    [Route("/Errors/{status}")]
    public IActionResult Errors(int status)
    {
        var model = Mapper.Map<ErrorViewModel>(BaseData);
        model.ErrorCode = status;
    
        if (error_descriptions.ContainsKey(status))
            model.Description = error_descriptions[status];
        else
            model.Description = "Неизвестная ошибка";
    
        return View(model);
    }
    
  2. 我启用状态代码页和异常处理程序:

    app.UseExceptionHandler( “/错误/ 500”); app.UseStatusCodePagesWithReExecute( “/错误/ {0}”);

  3. 当url与任何路由不匹配时,以及当查询数据库时返回空序列(访问nonexists元素)时,我想发生ger 404错误。

    当LINQ返回空序列(InvalidOperationException)时,我得到the sequence contains no elements。我想处理全局异常,在这种情况下显示404,在其他情况下显示500

    1. 我制作一个简单的过滤器并检查OnException中的异常:

      public void OnException(ExceptionContext context)
      {
          logger.LogError(context.Exception.Message);
      
          if (context.Exception is System.InvalidOperationException) ;
              //NEED TO CALL HomeController.Error(404) 
      }
      
    2. 有效,但我不知道如何调用我的操作并显示错误页面

1 个答案:

答案 0 :(得分:1)

您可以在OnException方法中创建模型,例如

public void OnException(ExceptionContext context)
{
       var model = new HandleErrorInfo(filterContext.Exception, "YourError Controller","Errors");
}