【问题标题】:ASP.NET Core - handling 404 and 500 errorASP.NET Core - 处理 404 和 500 错误
【发布时间】:2016-07-29 01:58:17
【问题描述】:

我尝试在 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("/Errors/500"); app.UseStatusCodePagesWithReExecute("/Errors/{0}");

当 url 不匹配任何路由并且对数据库的查询返回空序列(访问不存在的元素)时,我想 ger 404 错误。

当 LINQ 返回空序列 (the sequence contains no elements) 时,我得到了 InvalidOperationException。我想处理全局异常,在这种情况下显示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) 
    }
    

它有效,但我不知道如何调用我的操作并显示错误页面

【问题讨论】:

  • 您不应依赖异常来访问您的 404 页面。抛出异常是昂贵的。例如,您最好使用SingleOrDefault() 之类的东西,然后检查返回是null
  • 谢谢,现在我想是的

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


【解决方案1】:

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

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

【讨论】:

  • override 出错,但没有它也能正常工作。
猜你喜欢
  • 2019-08-20
  • 1970-01-01
  • 2017-05-16
  • 2011-04-16
  • 2010-10-17
  • 2011-06-06
  • 2013-07-05
  • 1970-01-01
  • 2021-03-31
相关资源
最近更新 更多