Переопределить определенный фильтр действий - PullRequest
0 голосов
/ 12 декабря 2018

В моем приложении WebApi 2 в базовом контроллере есть атрибут фильтра действий, этот атрибут имеет логическое свойство со значением по умолчанию, которое можно установить в конструкторе:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MyActionFilterAttribute : ActionFilterAttribute
{
  public bool MyProperty {get; set;}

  public MyActionFilterAttribute(bool myProperty = true)
  {
    MyProperty = myProperty;
  }

  public override void OnActionExecuting(HttpActionContext actionContext)
  {
    if(MyProperty)
    {
        //DO Something
    }
  }
}

I 'Кроме того, CustomValidatorFilter настроено в конфигурации webApi:

config.Filters.Add(new CustomValidatorFilterAttribute());

В некоторых действиях моего контроллера я хочу переопределить поведение MyActionFilterAttribute, установив значение MyProperty в false, I 'мы добавили OverrideActionFilters к моему действию:

[OverrideActionFilters]
[MyActionFilterAttribute(myProperty: false)]
public IHttpActionResult MyCation()
{
  //Some staff here
}

Но теперь моя пользовательская проверка больше не работает из-за использования OverrideActionFilters, есть ли способ переопределить OverrideActionFilters или просто перечислитьфильтр для переопределения.Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 13 декабря 2018

Я создал определенный атрибут DoMyPropertyAttribute, а затем удалил свойство из MyActionFilterAttributeMyActionFilterAttribute я проверяю, имеет ли действие `DoMyPropertyAttribute, если да, я делаю определенную работу:

public class DoMyPropertyAttribute : Attribute
{
}

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MyActionFilterAttribute : ActionFilterAttribute
{
  public override void OnActionExecuting(HttpActionContext actionContext)
  {
    if(actionContext.ActionDescriptor.GetCustomAttributes<DoMyPropertyAttribute>().Any())
    {
        //DO Something
    }
  }
}

В общем, если мы хотим переопределить фильтр действия, мы должны просто пропустить его и затем создатьспециальный фильтр действий, который соответствует желаемому поведению.Чтобы пропустить фильтр действий, мы можем сделать:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MyActionFilterAttribute : ActionFilterAttribute
{
  public override void OnActionExecuting(HttpActionContext actionContext)
  {
    if(actionContext.ActionDescriptor.GetCustomAttributes<SkipMyActionFilterAttribute>().Any())
     {
       return;
     }

    //Do something
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...