C# ASP.NET Web API IEExceptionLogger不';不能捕捉异常

C# ASP.NET Web API IEExceptionLogger不';不能捕捉异常,c#,asp.net,asp.net-web-api,C#,Asp.net,Asp.net Web Api,我正在尝试设置全局异常处理程序,如下所述:。我已经设置了一个在控制器构造函数中抛出异常的情况。但是我的异常没有被记录。相反,WebApi只是将异常和完整堆栈跟踪作为JSON消息返回给调用客户端 我不知道这是否重要,但我的控制器操作使用的是async/await,如下所示: [HttpGet, Route("GetLocationNames")] public async Task<IEnumerable<String>> Get() { return await

我正在尝试设置全局异常处理程序,如下所述:。我已经设置了一个在控制器构造函数中抛出异常的情况。但是我的异常没有被记录。相反,WebApi只是将异常和完整堆栈跟踪作为JSON消息返回给调用客户端

我不知道这是否重要,但我的控制器操作使用的是async/await,如下所示:

[HttpGet, Route("GetLocationNames")]
public async Task<IEnumerable<String>> Get()
{
    return await adapter.GetLocationNames();
}
using Owin;
using System.Web.Http;
using System.Web.Http.ExceptionHandling;

namespace warehouse.management.api.Config
{
    public static class WebApiConfig
    {

        public static IAppBuilder RegisterApiConfig(this IAppBuilder app, HttpConfiguration config)
        {
            config.MapHttpAttributeRoutes();
            config.Services.Add(typeof(IExceptionLogger), new Log4NetExceptionLogger());
            return app;
        }
    }
}
我是这样注册的:

[HttpGet, Route("GetLocationNames")]
public async Task<IEnumerable<String>> Get()
{
    return await adapter.GetLocationNames();
}
using Owin;
using System.Web.Http;
using System.Web.Http.ExceptionHandling;

namespace warehouse.management.api.Config
{
    public static class WebApiConfig
    {

        public static IAppBuilder RegisterApiConfig(this IAppBuilder app, HttpConfiguration config)
        {
            config.MapHttpAttributeRoutes();
            config.Services.Add(typeof(IExceptionLogger), new Log4NetExceptionLogger());
            return app;
        }
    }
}
这是我的packages.conf:

<?xml version="1.0" encoding="utf-8"?>
<packages>
    <package id="log4net" version="2.0.3" targetFramework="net45" />
    <package id="Microsoft.AspNet.WebApi.Client" version="5.1.2" targetFramework="net45" />
    <package id="Microsoft.AspNet.WebApi.Core" version="5.1.2" targetFramework="net45" />
    <package id="Microsoft.AspNet.WebApi.Owin" version="5.1.2" targetFramework="net45" />
    <package id="Microsoft.AspNet.WebApi.WebHost" version="4.0.20505.0" targetFramework="net45" />
    <package id="Microsoft.Owin" version="2.1.0" targetFramework="net45" />
    <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
    <package id="Newtonsoft.Json" version="4.5.11" targetFramework="net45" />
    <package id="Owin" version="1.0" targetFramework="net45" />
    <package id="Unity" version="3.5.1404.0" targetFramework="net45" />
    <package id="Unity.AspNet.WebApi" version="3.5.1404.0" targetFramework="net45" />
    <package id="WebActivatorEx" version="2.0" targetFramework="net45" />
</packages>


结果是排序。在我的启动类(未显示)中,我将对RegisterAppConfig方法的调用(上面,在OP中)移动到调用UseWebApi之前,现在它可以工作了。

这就工作了?config.Services.Add(typeof(IEExceptionLogger),new Log4NetExceptionLogger());事实上,IEExceptionLogger应该被替换而不是添加,因为它是web api已经添加的默认服务。是的,这很有效。这是很久以前的事了,所以我不记得尝试使用Replace()而不是Add()。但是我的实现基于语句“我们支持注册多个异常记录器…”和Web API文档中始终会调用异常日志记录程序…”。此解决方案非常有效-我的项目是在本地安装的,因此远程故障排除在很大程度上依赖于良好的日志记录。顺序似乎很重要,即使您调用Replace()你救了我一天!我遇到了完全相同的问题,读了同一篇文章,但直到我读了你的文章后,它才开始工作。顺序是关键,我自己的实现必须在调用UseWebApi()之前添加。另一个小问题是,我在代码中使用了UseWebApi(config);两次。构建从未抱怨过,运行时也没有抱怨过。