observe que esta resposta é verdadeira até MVC 5 / Web API 2
Resposta curta: Os filtros MVC e Web API não são compatíveis entre si e, se você quiser registrá-los globalmente, deve usar as classes de configuração apropriadas para cada um.
Resposta longa: ASP.NET MVC e Web API são propositalmente projetadas para funcionar de maneira semelhante, mas na verdade são criaturas diferentes.
A API da Web reside no System.Web.Http
namespace, enquanto o MVC vive no System.Web.Mvc
namespace. Os dois viverão felizmente lado a lado, mas um não contém o outro e, apesar das semelhanças no modelo de programação, as implementações subjacentes são diferentes. Assim como os controladores MVC e controladores de API da Web herdam diferentes classes de controlador de base (MVC é simplesmente nomeado Controller
e API da Web é nomeado ApiController
), filtros MVC e filtros de API da Web herdam deFilterAttribute
classes (ambos compartilham o mesmo nome neste caso, mas são classes separadas que vivem em seus respectivos namespaces).
Os filtros globais da API da Web são registrados por meio do HttpConfiguration
objeto disponível para você no Register
método WebApiConfig.cs se você estiver usando um modelo de projeto com WebActivator:
public static void Register(HttpConfiguration config)
{
//stuff before
config.Filters.Add(new MyWebApiFilter());
//stuff after
}
ou de outra forma no global.asax.cs:
GlobalConfiguration.Configuration.Filters.Add(new MyWebApiFilter());
Filtros globais Mvc são registrados por meio de um GlobalFilterCollection
objeto, que está disponível para você por meio do RegisterGlobalFilters
método de FilterConfig.cs para projetos que usam WebActivator:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//stuff before
filters.Add(new MyMvcFilter());
//stuff after
}
}
ou no arquivo global.asax.cs por meio de GlobalFilters.Filters
coleção para aqueles sem WebActivator:
GlobalFilters.Filters.Add(new MyMvcFilter());
É importante notar que, em ambos os casos, você não precisa herdar do FilterAttribute
tipo apropriado . Filtros de API da Web precisam apenas implementar a interface System.Web.Http.IFilter, enquanto o registro do filtro MVC verifica para garantir que sua classe herde uma das várias interfaces de filtro definidas no System.Web.Mvc
namespace.