我刚刚在我的 .Net MVC Web 应用程序中安装了 Application Insights。在 Web.config 文件中,它进行了多项更改,其中之一是<httpModules>...<add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" /></httpModules>这对我来说似乎很好。问题是当应用程序抛出错误时,我们会启用自定义页面错误,并且通常情况下 filterContext.ExceptionHandled = FALSE。但是,安装此 httpModules 后,我看到它更改为 filterContext.ExceptionHandled = TRUE。我们通过以下方式利用自定义页面错误:protected virtual void RegisterGlobalFilters(GlobalFilterCollection filters){ filters.Add(new HandleErrorAttribute(), -10);}public class HandleErrorAttribute : FilterAttribute, IExceptionFilter{ public void OnException(ExceptionContext filterContext) { if (filterContext.ExceptionHandled) return; }}谁能告诉我为什么 Application Insight 可能会更改 ExceptionHandled 状态的原因?
2 回答
GCT1015
TA贡献1827条经验 获得超4个赞
发生异常时,global
过滤器的顺序以相反的顺序执行。这意味着HandleErrorAttribute
先运行。
由于它是第一个过滤器,因此
ExceptionHandled
在执行时为 false,导致它将视图设置ExceptionHandled
为Error 并设置为 true。因此,当您自己的过滤器执行时,这就是为什么ExceptionHandled
已经设置为 true。
请注意,如果自定义错误被禁用,则 ExceptionHandled 仍然是假的,因为 HandleErrorAttribute 不会完成它的工作。在这种情况下,ELMAH 无论如何都会记录错误,因为它是未处理的,因此您类中的测试是为了防止重复记录错误。
有关更多详细信息,您可以参考此SO thread。
- 2 回答
- 0 关注
- 173 浏览
添加回答
举报
0/150
提交
取消