Какая разница между реализацией 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) {}
}
Итак, существуют ли различия между этими двумя подходами, возможно, в каких-либо конкретных ситуациях, когда было бы предпочтительнее использовать один из них над другим?
Спасибо заранее.
Ответы
Ответ 1
В принципе FilterAttribute обеспечивает поведение низкоуровневых атрибутов MVC и реализует IMvcFilter, который предоставляет свойства Order и AllowMultiple.
ActionFilterAttribute является основой для фильтрации действий и результатов, поскольку является реализацией IActionFilter, IResultFilter и наследуется от FilterAttribute.
Ваша реализация MySecondFilterAttribute приводит к ActionFilterAttribute без возможностей IResultFilter (OnResultExecuting и OnResultExecuted).