决定ExceptionFilterAttribute OnException方法的实现

时间:2017-09-23 05:04:22

标签: c# .net exception-handling

我正在尝试使用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);
            }
        }
    }

以上两种实施中哪一项是可取的?在这种情况下调用基本方法的用途是什么?

1 个答案:

答案 0 :(得分:2)

我有同样的问题,所以基于https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/System.Web.Http/Filters/ExceptionFilterAttribute.cs(我希望它是当前的代码源),调用base.OnException(actionExecutedContext);

是没有意义的

同样从过滤器的性质来看,您可以注册多个过滤器,而不需要继承来进行链接。 从理论上讲,只要当前实现发生变化并且抽象基类中确实发生了任何事情,您就可以调用base。 我在实施中并没有这样称呼它。