#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, вы это реализовали, где это используется?