【发布时间】:2018-03-06 15:51:34
【问题描述】:
构建 ASP.Net Core (V2) MVC 站点。
我们为此使用 API 版本。
该站点具有提供 MVC Razor 视图以及 API 样式 Json 响应的控制器。
我正在尝试使用 UseExceptionHandler() 方法,如下所示。
当我在其中一个操作中遇到异常时,该操作会再次执行,然后显示一个空白页面。浏览器控制台也没有任何错误。最后,我的错误操作永远不会被命中。
我为 API 控制器设置了一个自定义异常过滤器,如下所示。我已经对此发表了评论,认为这是干扰。这没有解决任何问题。
我哪里错了?以及如何在出现异常时点击我的自定义错误页面。
异常处理方法 - 这会导致“/v1.0/home/error”
app.UseExceptionHandler($"/v{appSettings.Value.APIVersion}/home/error");
我也试过了,在读到这应该是视图的路径
app.UseExceptionHandler("/error");
和
app.UseExceptionHandler("/views/home/error");
错误操作
[HttpGet("error")]
public IActionResult Error()
{
var exception = HttpContext.Features.Get<IExceptionHandlerFeature>();
ViewData["statusCode"] = HttpContext.Response.StatusCode;
ViewData["message"] = exception.Error.Message;
return View();
}
异常过滤器(目前在 startup.cs 中被注释掉了)
public override void OnException(ExceptionContext context)
{
if (context.HttpContext.Request.Path.Value.Contains("/api"))
{
// Set the response
context.ModelState.GroupErrorsIntoKey("ErrorArray");
context.ModelState.AddModelError("ErrorArray", context.Exception.Message);
context.Result = new BadRequestObjectResult(context.ModelState);
}
}
【问题讨论】:
-
似乎是路由问题。尝试直接访问您输入
UseExceptionHandler()的URL。Error()动作是否命中? -
当我进入浏览器时,我可以很好地到达路线。此后我将其更改为使用
UseStatusCodePagesWithReExecute()- 这适用于 404,但在异常时会出现空白页;太令人沮丧了! -
我无法重现您的问题。可能您在启动配置方面存在一些问题。是否可以将问题重现的测试项目放在github上?
-
@CodeFuller 感谢您的关注。我将删除这个问题并用不同的细节重新提问。我发现结果非常不一致。我已经实现了一个自定义异常处理程序。
标签: c# asp.net-core asp.net-core-mvc