【问题标题】:Elmah works in MVC but not in Web APIElmah 适用于 MVC,但不适用于 Web API
【发布时间】:2025-11-21 11:30:02
【问题描述】:

我有 ELMAH 工作网络应用程序端控制器,但我无法在 Web API 端记录异常。

我的设置:

WebApiConfig.cs:

public static void Register(HttpConfiguration config)
{
    config.Services.Add(typeof(IExceptionLogger), new ElmahExceptionLogger());

    // Web API routes
    config.MapHttpAttributeRoutes();

    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
}

网页配置:

<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>
....
<appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    <add key="elmah.mvc.disableHandler" value="false" />
    <add key="elmah.mvc.disableHandleErrorFilter" value="false" />
    <add key="elmah.mvc.requiresAuthentication" value="false" />
    <add key="elmah.mvc.IgnoreDefaultRoute" value="false" />
    <add key="elmah.mvc.allowedRoles" value="*" />
    <add key="elmah.mvc.allowedUsers" value="*" />
    <add key="elmah.mvc.route" value="elmah" />
    <add key="elmah.mvc.UserAuthCaseSensitive" value="true" />
</appSettings>
....
<modules>
  <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>
....
<httpModules>
    <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
    <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
    <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
</httpModules>
....
<elmah>
    <errorMail key="elmahMail" from="noreply@mydomain.com" to="me@mydomain.com" cc="" subject="DEV EMP Exception" async="true" smtpPort="25" smtpServer="smtp.mydomain.com" userName="" password="" />
</elmah>

我试过打开和关闭这个:

GlobalConfiguration.Configuration.Filters.Add(new ElmahHandleErrorApiAttribute());

通常安装 Elmah.Mvc 包和 Elmah.Contrib.WebApi 包并添加:

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

line 为 Web API 打开 Elmah 就好了,但它不再工作了。

【问题讨论】:

  • 只要你也安装了 Elmah.Contrib.WebApi,你的配置看起来就很好。你能把你的项目放在我可以自己尝试的地方吗?
  • 很遗憾我无法发布我的项目。
  • 也许尝试在空白项目中重新创建并上传?
  • 我解决了。答案是它一直在工作。 Elmah 曾经在 404 上触发。现在情况已不再如此。我正在尝试一条不存在的路线进行测试。

标签: asp.net-web-api elmah


【解决方案1】:

答案是它一直在工作。 Elmah 曾经在 404 上触发。现在情况不再如此。我正在尝试一条不存在的路线进行测试。

【讨论】: