C# ASP.NET Web API IEExceptionLogger不';不能捕捉异常
我正在尝试设置全局异常处理程序,如下所述:。我已经设置了一个在控制器构造函数中抛出异常的情况。但是我的异常没有被记录。相反,WebApi只是将异常和完整堆栈跟踪作为JSON消息返回给调用客户端 我不知道这是否重要,但我的控制器操作使用的是async/await,如下所示: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
[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);两次。构建从未抱怨过,运行时也没有抱怨过。