ASP不遵守web.config中设置的defaultRedirect,View Engines在查找其他错误页面时中断

时间:2018-11-07 19:06:22

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

在我们的应用程序中,我们有一个错误页面,该页面应捕获该应用程序中的所有错误。

<customErrors mode="On" defaultRedirect="~/Content/Error.html" />

此错误页面实际上会吐出“发生了意外错误,请使用以下代码与支持人员联系:$ HASH” 。 $ HASH(设置为cookie值)代表一个ID,该ID指向日志中捕获的异常。

但是,当我们查找某些应用程序错误的哈希和数据时,会发现以下内容。

Exception information:
   Exception type: InvalidOperationException
   Exception message: The view 'Error' or its master was not found or no view 
engine supports the searched locations. The following locations were searched:
SomeLocation\Error.spark
Shared\Error.spark
SomeLocation\Error.shade
Shared\Error.shade
~/Views/SomeLocation/Error.aspx
~/Views/SomeLocation/Error.ascx
~/Views/Shared/Error.aspx
~/Views/Shared/Error.ascx
~/Views/SomeLocation/Error.cshtml
~/Views/SomeLocation/Error.vbhtml
~/Views/Shared/Error.cshtml
~/Views/Shared/Error.vbhtml
  at System.Web.Mvc.ViewResult.FindView(ControllerContext context)
  at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
  at <<More Internals>>

这意味着ASP试图使用任何视图引擎来显示我们的原始错误,抛出自己的错误,破坏我们的原始错误。

期望要记录的原始应用例外。没有上面显示的内容。我不希望Asp会在~/Content/Error.html以外的任何位置查找错误。

我尝试过的快速修复方法

  • customErrors defaultRedirect设置到ViewEngines也要查看的位置。结果:一切都破了
  • 在视图引擎可以使用的位置创建视图和控制器,并将其重定向到web.config中设置的位置。结果:由于未设置cookie数据,因此错误哈希丢失。

1 个答案:

答案 0 :(得分:2)

尝试添加

<Add Type="Microsoft.ApplicationInsights.Web.ExceptionTrackingTelemetryModule, Microsoft.AI.Web">
  <EnableMvcAndWebApiExceptionAutoTracking>false</EnableMvcAndWebApiExceptionAutoTracking>
</Add>

ApplicationInsights.config

来源:https://github.com/Microsoft/ApplicationInsights-dotnet-server/issues/921

来源:AiHandleErrorAttribute Vs. Built-In auto added Action Filter provided by Application Insights