为了账号安全,请及时绑定邮箱和手机立即绑定

应用程序洞察设置 filterContext.ExceptionHandled = TRUE

应用程序洞察设置 filterContext.ExceptionHandled = TRUE

C#
POPMUISE 2021-10-24 17:14:15
我刚刚在我的 .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


查看完整回答
反对 回复 2021-10-24
  • 2 回答
  • 0 关注
  • 173 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信