- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试设置一个全局异常处理程序,如下所述:Web API Global Error Handling .我已经设置了一个在 Controller 构造函数中抛出异常的情况。但我的异常没有被记录下来。相反,WebApi 只是将异常和完整堆栈跟踪作为 JSON 消息返回给调用客户端。
我不知道这是否重要,但我的 Controller 操作正在使用 async/await,如下所示:
[HttpGet, Route("GetLocationNames")]
public async Task<IEnumerable<String>> Get()
{
return await adapter.GetLocationNames();
}
我有以下实现:
using log4net;
using System.Threading.Tasks;
using System.Web.Http.ExceptionHandling;
namespace warehouse.management.api
{
public class Log4NetExceptionLogger : ExceptionLogger
{
private ILog log = LogManager.GetLogger(typeof(Log4NetExceptionLogger));
public async override Task LogAsync(ExceptionLoggerContext context, System.Threading.CancellationToken cancellationToken)
{
log.Error("An unhandled exception occurred.", context.Exception);
await base.LogAsync(context, cancellationToken);
}
public override void Log(ExceptionLoggerContext context)
{
log.Error("An unhandled exception occurred.", context.Exception);
base.Log(context);
}
public override bool ShouldLog(ExceptionLoggerContext context)
{
return base.ShouldLog(context);
}
}
}
我是这样注册的:
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>
最佳答案
原来是订单。在我的启动类(未显示)中,我将对 RegisterApiConfig 方法的调用(在上面的 OP 中)移到了调用 UseWebApi 之前,现在它可以工作了。
关于c# - ASP.NET Web API IExceptionLogger 不捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23938542/
当 Controller 操作抛出异常时,我的异常记录器实现 [IExceptionLogger][1] 被调用两次。 context.RequestContext.Configuration.Ser
我正在尝试设置一个全局异常处理程序,如下所述:Web API Global Error Handling .我已经设置了一个在 Controller 构造函数中抛出异常的情况。但我的异常没有被记录下来
我们有一组使用 WebApi 2 开发的 RestFul 服务。这些服务将托管在 Azure 上。我有一个 IExceptionLogger 的实现来记录所有未处理的异常。 记录器可以按如下方式在管道
根据官方文档中关于实现 IExceptionLogger 的讨论( http://www.asp.net/web-api/overview/testing-and-debugging/web-api-
在 C# 中实现这些处理程序时,我会做类似的事情, public class DefaultExceptionHandler : IExceptionHandler { public Task
我是一名优秀的程序员,十分优秀!