【发布时间】:2016-07-29 01:58:17
【问题描述】:
我尝试在 ASP.NET MVC 6 中处理 404 和 500 错误。
-
我在控制器中有 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); } -
我启用状态代码页和异常处理程序:
app.UseExceptionHandler("/Errors/500"); app.UseStatusCodePagesWithReExecute("/Errors/{0}");
当 url 不匹配任何路由并且对数据库的查询返回空序列(访问不存在的元素)时,我想 ger 404 错误。
当 LINQ 返回空序列 (the sequence contains no elements) 时,我得到了 InvalidOperationException。我想处理全局异常,在这种情况下显示404,在其他情况下显示500。
-
我做了一个简单的过滤器并检查
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