Webapi 2全局异常处理,controller-context为空
本文关键字:controller-context 为空 异常处理 全局 Webapi | 更新日期: 2023-09-27 18:02:18
在WebAPI 2全局异常处理程序中,我试图从抛出错误的地方获得控制器对象的引用。
是它的代码:
public class CustomExceptionHandler : ExceptionHandler
{
public override void Handle(ExceptionHandlerContext context)
{
var controller = context.ExceptionContext.ControllerContext;
var action = context.ExceptionContext.ActionContext;
//.....some code after this
}
}
上述controller
和action
变量结果为空
为什么?
假设异常是从操作方法中抛出的
确保从ExceptionHandler
的ShouldHandle
方法返回true
。
否则,Handle
方法中的context.ExceptionContext.ControllerContext
将为空。
由于某些原因context.ExceptionContext.ActionContext
总是空的,但是这个可以通过它的Controller
属性从HttpControllerContext
中检索。
class MyExceptionHandler : ExceptionHandler
{
public override void Handle(ExceptionHandlerContext context)
{
HttpControllerContext controllerContext = context.ExceptionContext.ControllerContext;
if (controllerContext != null)
{
System.Web.Http.ApiController apiController = controllerContext.Controller as ApiController;
if (apiController != null)
{
HttpActionContext actionContext = apiController.ActionContext;
// ...
}
}
// ...
base.Handle(context);
}
public override Boolean ShouldHandle(ExceptionHandlerContext context)
{
return true;
}
}
如果您只关心异常日志记录,请选择ExceptionLogger
而不是ExceptionHandler
。
看到MSDN。
异常日志器是查看Web API捕获的所有未处理异常的解决方案。
异常日志记录器总是被调用,即使我们准备中止连接。
异常处理程序只会在我们还可以的时候被调用选择要发送的响应消息。
这里也可以从上面所示的HttpControllerContext
中检索HttpActionContext
。