Asp.net core mvc 中未处理的预期未路由到“我的自定义错误”页

Asp.net core mvc 中未处理的预期未路由到“我的自定义错误”页,asp.net-core-mvc,Asp.net Core Mvc,我的理解是,如果您添加了app.UseExceptionHandler()并为它提供一个路径,当代码中没有捕获到错误时,ASP.Net应该加载该页面,但在我的情况下,我仍然得到正常的“Http 500内部服务器错误”页面。我可以选择我给出的路径UseExceptionHandler(),然后将它放在我的浏览器中,它可以很好地加载页面,这样我就知道了路径和页面的工作情况。我是不是不明白这是怎么回事,它坏了,还是我做错了什么 Startup.cs: public void Configure(IAp

我的理解是,如果您添加了
app.UseExceptionHandler()
并为它提供一个路径,当代码中没有捕获到错误时,ASP.Net应该加载该页面,但在我的情况下,我仍然得到正常的“Http 500内部服务器错误”页面。我可以选择我给出的路径
UseExceptionHandler()
,然后将它放在我的浏览器中,它可以很好地加载页面,这样我就知道了路径和页面的工作情况。我是不是不明白这是怎么回事,它坏了,还是我做错了什么

Startup.cs:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    //if (env.IsDevelopment())
    //{
    //    app.UseDeveloperExceptionPage();
    //}

    app.UseExceptionHandler("/Error/ServerError");
    app.UseIISPlatformHandler();
    app.UseSession();
    app.UseStaticFiles();
    app.UseStatusCodePagesWithReExecute("/Error/PageNotFound");
    app.UseMvc();
}
错误页代码:

//Get: "/Error/ServerError"
[Route("Error/ServerError")]
public IActionResult ServerError()
{
    return View(); //View is inside the Shared folder.
}
错误页面视图:

<p>
    @ViewData["ErrorMessage"]
</p>

@ViewData[“ErrorMessage”]

请注意,“未找到页面”错误被路由到
/Error/PageNotFound
,没有问题,只是其他错误没有

编辑: 作为测试,我将字符串从
UseStatusCodePagesWithReExecute
复制到
UseExceptionHandler
中,但仍然得到了通用的500错误页面

编辑2:
我应该注意,我用两种方法测试这个错误。第一种是通过简单的操作
抛出新的DivideByZeroException()SqlException
)。两种方法都只返回默认的
HTTP500内部服务器错误
,而不是我的自定义错误。

我最初认为UseXXX函数的顺序很重要,但我的测试证明这是不正确的

我能够使您的示例正常工作的唯一方法是将错误页面代码修改为以下内容:

[Route("Error/ServerError")]
public IActionResult ServerError()
{
    return View("Error/ServerError");
}
假设存在以下内容:[ProjectDir]\Views\Shared\Error\ServerError.cshtml

如果将视图名称设置为简单的“ServerError”,并将视图放置在[ProjectDir]\Views\Shared\ServerError.cshtml,则Microsoft.AspNet.Diagnostics或Microsoft.AspNet.Mvc包中可能存在错误

当发出错误请求时,以下内容将写入日志:

info: Microsoft.AspNet.Mvc.Controllers.ControllerActionInvoker[1]
      Executing action method WebApplication2.Controllers.ErrorsController.Get with arguments () - ModelState is Valid'
fail: Microsoft.AspNet.Mvc.ViewFeatures.ViewResultExecutor[0]
       The view 'ServerError' was not found. Searched locations: /Views/Errors/ServerError.cshtml, /Views/Shared/ServerError.cshtml
fail: Microsoft.AspNet.Diagnostics.ExceptionHandlerMiddleware[0]
      An exception was thrown attempting to execute the error handler.
      System.InvalidOperationException: The view 'ServerError' was not found. The following locations were searched:
      /Views/Errors/ServerError.cshtml
      /Views/Shared/ServerError.cshtml.
日志清楚地表明试图在/Views/Shared/ServerError.cshtml中找到该视图。但是请求失败并使用默认的错误处理程序


此问题已记录在aspnet/Diagnostics github存储库中。

您使用的是ELMAH吗?@Juventus18否。这是ASP.Net Core的内置错误处理。视图的位置位于
[ProjectDir]\Views\Shared\ServerError.cshtml
,因此我更新了操作以读取
返回视图(“ServerError”)并且我仍然收到stock HTTP 500内部服务器错误页面。这看起来像是诊断包中的错误。我按项目进行了修改,以匹配您的最后评论。在dnx输出中,我可以看到失败的请求被记录下来。在日志中,ExceptionHandlerMiddleware声称正在以下位置搜索名为“ServerError”的视图:/Views/Error/ServerError.cshtml和/Views/Shared/ServerError.cshtml。当视图位于/Views/Error/ServerError.cshtml时,它可以正常工作,但它确实在共享文件夹中找到了该文件。问题已在Fantastic上提出,您能否更新您对此的回答,我将对其进行标记并奖励奖金?不,谢谢,我对这些东西的了解还不够,无法做你做的测试,所以我永远不会知道这是一个bug,只是一直认为我做错了什么。