Подтвердить что ты не робот

Какая разница между реализацией FilterAttribute, IActionFilter и наследованием от ActionFilterAttribute в asp.net mvc 3?

Я вижу, что в одной ситуации мы можем переопределить методы OnActionExecuting или OnActionExecuted, наследующие класс ActionFilterAttribute следующим образом:

public class MyFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    { // bla bla }
}

И в другой ситуации мы также можем реализовать IActionFilter и FilterAttribute следующим образом:

public class MySecondFilterAttribute : FilterAttribute, IActionFilter 
{ 
    public void OnActionExecuted(ActionExecutingContext filterContext) {}
}

Итак, существуют ли различия между этими двумя подходами, возможно, в каких-либо конкретных ситуациях, когда было бы предпочтительнее использовать один из них над другим?

Спасибо заранее.

4b9b3361

Ответ 1

В принципе FilterAttribute обеспечивает поведение низкоуровневых атрибутов MVC и реализует IMvcFilter, который предоставляет свойства Order и AllowMultiple.

ActionFilterAttribute является основой для фильтрации действий и результатов, поскольку является реализацией IActionFilter, IResultFilter и наследуется от FilterAttribute.

Ваша реализация MySecondFilterAttribute приводит к ActionFilterAttribute без возможностей IResultFilter (OnResultExecuting и OnResultExecuted).