Класс 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>();

Другие вопросы по тегам