猿问

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

我刚刚在我的 .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 状态的原因?


POPMUISE
浏览 174回答 2
2回答

GCT1015

发生异常时,global过滤器的顺序以相反的顺序执行。这意味着HandleErrorAttribute&nbsp;先运行。由于它是第一个过滤器,因此ExceptionHandled在执行时为 false,导致它将视图设置ExceptionHandled为Error 并设置为 true。因此,当您自己的过滤器执行时,这就是为什么ExceptionHandled已经设置为 true。请注意,如果自定义错误被禁用,则 ExceptionHandled 仍然是假的,因为 HandleErrorAttribute 不会完成它的工作。在这种情况下,ELMAH 无论如何都会记录错误,因为它是未处理的,因此您类中的测试是为了防止重复记录错误。有关更多详细信息,您可以参考此SO thread。
随时随地看视频慕课网APP
我要回答