tenga en cuenta que esta respuesta es cierta hasta MVC 5 / Web API 2
Respuesta corta: los filtros MVC y Web API no son compatibles entre sí, y si desea registrarlos globalmente, debe usar las clases de configuración adecuadas para cada uno.
Respuesta larga: ASP.NET MVC y Web API están específicamente diseñadas para funcionar de manera similar, pero de hecho son criaturas diferentes.
La API web vive bajo el System.Web.Http
espacio de nombres, mientras que MVC vive bajo el System.Web.Mvc
espacio de nombres. Los dos vivirán felizmente uno al lado del otro, pero uno no contiene al otro y, a pesar de las similitudes en el modelo de programación, las implementaciones subyacentes son diferentes. Así como los controladores MVC y los controladores Web API heredan diferentes clases de controlador base (MVC simplemente se nombra Controller
y Web API ApiController
), los filtros MVC y los filtros Web API heredan de diferentes FilterAttribute
clases (ambos comparten el mismo nombre en este caso, pero son clases separadas que viven en sus respectivos espacios de nombres).
Los filtros globales de la API web se registran a través del HttpConfiguration
objeto disponible para usted en el Register
método WebApiConfig.cs si está utilizando una plantilla de proyecto con WebActivator:
public static void Register(HttpConfiguration config)
{
//stuff before
config.Filters.Add(new MyWebApiFilter());
//stuff after
}
o de lo contrario en global.asax.cs:
GlobalConfiguration.Configuration.Filters.Add(new MyWebApiFilter());
Los filtros globales de Mvc se registran mediante un GlobalFilterCollection
objeto, que está disponible a través del RegisterGlobalFilters
método de FilterConfig.cs para proyectos que utilizan WebActivator:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//stuff before
filters.Add(new MyMvcFilter());
//stuff after
}
}
o en el archivo global.asax.cs a modo de GlobalFilters.Filters
colección para aquellos sin WebActivator:
GlobalFilters.Filters.Add(new MyMvcFilter());
Vale la pena señalar que en ambos casos no es necesario heredar del FilterAttribute
tipo apropiado . Los filtros de API web solo necesitan implementar la interfaz System.Web.Http.IFilter, mientras que el registro del filtro MVC verifica para garantizar que su clase herede una de las pocas interfaces de filtro definidas en el System.Web.Mvc
espacio de nombres.