Класс IActionFilter может найти только физические атрибуты, но не те, которые добавлены в конфигурации GlobalFilters.
Используя следующие классы:
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
public class OrderItemCountActionFilterAttribute : ActionFilterAttribute
{
}
public class OrderItemCountFilter : IActionFilter
{
public void OnActionExecuting(ActionExecutingContext filterContext)
{
}
public void OnActionExecuted(ActionExecutedContext filterContext)
{
var attribute = filterContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes(typeof(OrderItemCountActionFilterAttribute), true);
var attribute2 = filterContext.ActionDescriptor.GetCustomAttributes(typeof(OrderItemCountActionFilterAttribute),true);
if (attribute.All(o => o.GetType() != typeof (OrderItemCountActionFilterAttribute)))
{
return;
}
throw new Exception("It worked!");
}
}
И следующий FilterConfig:
public static class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters, Container container)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new OrderItemCountActionFilterAttribute());
filters.Add(container.GetInstance<OrderItemCountFilter>();
}
}
Глобально добавленный OrderItemCountActionFilterAttribute не найден filterContext.ActionDescriptor.GetCustomAttributes(typeof(OrderItemCountActionFilterAttribute),true);
, Однако, если я добавлю его вручную в действие, я смогу его использовать.
Я был в этом в течение 2 дней, и я не сделал никакого прогресса. Мне интересно, есть ли что-то, что мне здесь не хватает, или ряд свойств, к которым я могу получить доступ, чтобы посетить глобально добавленный OrderItemCountActionFilterAttribute.
1 ответ
Коллекция GlobalFilters доступна по адресу GlobalFilters.Filters
Вы можете найти свой атрибут в глобальной коллекции с помощью следующего кода: var filters = GlobalFilters.Filters.Select(v => v.Instance).OfType<OrderItemCountActionFilterAttribute>();