Атрибут MVC не работает для отдельных действий при применении к контроллеру

#asp.net-mvc #custom-attributes #custom-action-filter

#asp.net-mvc #пользовательские атрибуты #пользовательское действие-фильтр

Вопрос:

У меня есть пользовательский атрибут, определенный следующим образом,

 public class SkipAuthentication : Attribute
{

}
  

и использовал его для оформления контроллера следующим образом,

 [SkipAuthentication]
public class AccountTypeController : Controller
{
    // GET: /AccountType/Create
    [HttpGet]
    public ActionResult Create()
    {
        try
        {
            return View();
        }
        catch (Exception ex)
        {
            ViewBag.ResMessege = ResMessege.getDanger(ex.Message);
            return View();
        }
    }
}
  

теперь я ожидаю, что он должен применяться ко всем действиям внутри контроллера,

 public class FebTechFilters : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (filterContext.ActionDescriptor.GetCustomAttributes(typeof(SkipAuthentication), false).Any())
        {
            return;
        }

        if (null == filterContext.HttpContext.Session.Contents["UserId"])
        {
            filterContext.Result = new RedirectResult("~/Login/Index");
        }

        base.OnActionExecuting(filterContext);
    }
}
  

но когда я вызываю это, filterContext.ActionDescriptor.GetCustomAttributes(typeof(SkipAuthentication), false).Any() я получаю это как false Что я упускаю?

Комментарии:

1. Может быть, ваш пользовательский атрибут наследуется от Attribute вместо FilterAttribute ?

2. если (filterContext.Controller. GetType().GetCustomAttributes(typeof(SkipAuthentication), false).Any())…

3. @NaDeRStar Не выдает ли ActionDescriptor результат?

4. @DavideVitali Нет, это не работает

5. Но к каждому действию будут применены только ActionFilterAttribute -ы, если вы добавите его на уровне контроллера, но ваша проверка подлинности SKIP наследуется от атрибута вместо ActionFilterAttribute . И в вашем коде вы не используете FebTechFilters, вы это реализовали, где это используется?