我需要一种方法来处理和记录web api中出现的所有异常。 我重写了ExceptionLogger和ExceptionHandler的方法,但代码中断并且从不触发处理机制。
如果我将控制器更改为必须使用相同的API方法,这会导致另一个错误:
[RoutePrefix("api/Ads")]
public class AdsController : ApiController
{
public IHttpActionResult Get()
{
return Ok(Ad.GetAds());
}
public IHttpActionResult Get(object name)
{
return Ok();
}
}
处理程序将捕获错误:
在这种情况下,错误是:
Multiple actions were found that match the request:
ExceptionLogger和ExceptionHandler是否只捕获由更高级别的web api引起的错误?我应该怎样做才能处理所有错误,异常过滤器还必须添加解决方案吗?
答案 0 :(得分:2)
添加例外过滤器:
public class MyExceptionFilter:ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext context)
{
var t = HandleException(context);
t.Wait();
}
public override async Task OnExceptionAsync(HttpActionExecutedContext context, CancellationToken cancellationToken)
{
await HandleException(context);
}
private Task HandleException(HttpActionExecutedContext context)
{
context.Response = context.Request.CreateErrorResponse(HttpStatusCode.InternalServerError, context.Exception.Message);
return Task.CompletedTask;
}
}
然后在您的WebApiConfig.Register
方法中添加以下行:
config.Filters.Add(new MyExceptionFilter());
答案 1 :(得分:0)
ExceptionLogger和Filter没有捕获任何错误,因为项目处于调试模式,在调试模式下,它会抛出异常并停在那里,而在发布模式下,异常会被记录器或过滤器捕获。