我正在尝试使用ExceptionFilterAttribute为Web Api实现异常处理。我继承了ExceptionFilterAttribute类并重写了onException方法。
public class ApiLogExceptionFilterAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
if (actionExecutedContext != null)
{
Logger.LogException(actionExecutedContext.Exception);
}
}
}
最近,我看到了一些实现,其中在重写的实现中也调用了基类OnException方法。
public class ApiLogExceptionFilterAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
if (actionExecutedContext != null)
{
base.OnException(actionExecutedContext);
Logger.LogException(actionExecutedContext.Exception);
}
}
}
以上两种实施中哪一项是可取的?在这种情况下调用基本方法的用途是什么?
答案 0 :(得分:2)
我有同样的问题,所以基于https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/System.Web.Http/Filters/ExceptionFilterAttribute.cs(我希望它是当前的代码源),调用base.OnException(actionExecutedContext);
同样从过滤器的性质来看,您可以注册多个过滤器,而不需要继承来进行链接。 从理论上讲,只要当前实现发生变化并且抽象基类中确实发生了任何事情,您就可以调用base。 我在实施中并没有这样称呼它。