Переопределение фильтров и глобальные фильтры

Последнее обновление: 29.10.2015

Фильтры могут иметь разные области видимости: мы можем определить фильтр для отдельного метода, для всего контроллера, либо для всего приложения, то есть сделать фильтр глобальным.

Чтобы применить фильтр ко всем контроллерам, то есть сделать его глобальным, надо внести соответствующую запись в файл WebApiConfig.cs. Например, у нас есть некоторый фильтр:

public class CustomAuthenticationAttribute : Attribute, IAuthenticationFilter
{
	//........................
}

Тогда в классе WebApiConfig нам надо добавить этот фильтр в коллекцию фильтров приложения:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional}
            );

            config.Filters.Add(new CustomAuthenticationAttribute());
        }
}

Переопределение фильтров

Переопределение фильтров позволяет отключить действие других фильтров для определенного метода. Это может быть полезно, когда какой-либо фильтр применяется ко всему контроллеру или глобально ко всем контроллерам, однако для какого-то определенного метода его надо отключить.

Фильтры переопределений реализуют интерфейс IOverrideFilter из пространства имен System.Web.Http.Filters:

public interface IOverrideFilter : IFilter 
{
	Type FiltersToOverride { get; }
}

Его единственное свойство позволяет определить тип фильтров, которые надо переопределить.

Web API уже располагает набором встроенных реализаций фильтров переопределений:

  • OverrideAuthentication: отключает фильтры аутентификации

  • OverrideAuthorization: отключает фильтры авторизации

  • OverrideAction: отключает фильтры методов

  • OverrideException: отключает фильтры исключений

Благодаря этому набору встроенных фильтров нам в принципе не надо создавать свои фильтры. Например, отключим авторизацию для одного из методов:

[Authorize(Roles="users")]
public class ValuesController : ApiController
{
    //...............

    [OverrideAuthorization]
    public string Get(int id)
    {
        string[] letters = new string[] { "aab", "aba", "baa" };
        return letters[id];
    }
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850