Elmah不过滤/拦截web api上的错误

本文关键字:api 错误 web 拦截 过滤 Elmah | 更新日期: 2023-09-27 18:02:32

我有一个Web Api应用程序,它配置了Elmah并工作,日志正常创建。

为了从日志中隐藏/删除敏感数据,我尝试了这个,但它不适合我的Web Api控制器。只有当MVC管道中出现错误(项目中有MVC和Web API控制器)时,才会命中过滤器。

我也检查了这个问题,但我的配置文件似乎没问题:

    <sectionGroup name="elmah">
      <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
      <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
      <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
      <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
    </sectionGroup>
    [...]
   <location path="." inheritInChildApplications="false">
      <system.web>
          <httpModules>
              <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
              <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
              <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
          </httpModules>
          [..]
      </system.web>
   </location>
   [...]
   <system.webServer>
       <modules runAllManagedModulesForAllRequests="true">
           <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
           <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
           <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
       </modules>
  </system.webServer>

Global.asax中的过滤器:

public void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
{
    var ctx = e.Context as HttpContext;
    if (ctx == null) return;
    ElmahDataFilter.Apply(e, ctx);
}

作为附加信息,如果我注释系统。

Elmah不过滤/拦截web api上的错误

ELMAH不记录ASP生成的错误。NET Web API开箱即用。您还需要安装Elmah.Contrib.WebApi包:

Install-Package Elmah.Contrib.WebApi

然后配置Web API,在WebApiConfig.cs中使用ELMAH作为异常记录器:

config.Services.Add(typeof(IExceptionLogger), new ElmahExceptionLogger());

有关更多信息,请查看我编写的从Web API登录到ELMAH指南。在本教程中,您将需要替换elmah。因为您可能正在使用其他错误记录器之一,所以请使用ELMAH的io包。

我刚刚验证了安装这些包,实际上会触发您添加到问题中的ErrorLog_Filtering代码。