2010-07-26 42 views
5

¿Es posible crear un filtro de acción global que se aplique automáticamente a todas las acciones en todos los controladores en la aplicación ASP.NET MVC? Quiero que se defina algo como "before_filter" en ApplicationController en Ruby on Rails.Filtro de acción global en ASP.NET MVC

Gracias por su ayuda.

+0

Puede intentar utilizar la biblioteca [FluentFilter] (http://fluentfilters.codeplex.com/). –

Respuesta

3

Esto realmente depende de lo que quieras hacer con él. En muchos escenarios, las respuestas anteriores de vucetica y Adeel serán lo que realmente desea hacer. Sin embargo, ninguno de ellos cumple los criterios que usted indicó: automáticamente se aplican a todas las acciones/controladores.

Para hacer algo como eso, necesitaría implementar un controlador para el evento Application BeginRequest en Global.asax. Consulte el MSDN documentation para obtener más información.

Actualización - 27 de julio de 2010: ScottGu blogged about MVC 3 Preview 1, que incluye un marco para filtros globales como el que está hablando. Están registrados a través de Global.asax y pueden aplicarse a todos los controladores o según criterios específicos.

+0

Gracias por su respuesta. Primero pensé que funcionaría, pero después de probar este enfoque noté que Application_BeginRequest obtiene TODAS las solicitudes, incluidas las solicitudes de .js, .css, .jpg y otros recursos para la página. Por lo tanto, se ejecutará muchas veces por una página y puede ser una sobrecarga grave. ¿Hay alguna manera fácil de filtrar solo la solicitud del contenido de la página y omitir todas las solicitudes .js, .css, .jpg sin analizar la URL solicitada? – Evgenii

+0

Es posible que pueda ver la información que sale del motor de enrutamiento para determinar si se trata de un controlador/acción. Honestamente, la respuesta de Adeel es la forma * correcta * de hacer algo como esto, solo estaba señalando que esta es la alternativa si quieres un controlador automático y global. – GalacticCowboy

+1

Si no quiere esperar a MVC3, mi compañero de trabajo escribió algo que usamos para unir automáticamente los filtros con las acciones (ya sea siempre o en función de una condición). Esto depende de Windsor para el COI, pero siempre puede modificar esa parte. http://geekswithblogs.net/wesm/archive/2009/12/11/ijoined-filter.aspx – Ryan

3

Crea tu propio controlador base y hereda de él.

+0

Gracias, debería funcionar, pero estoy buscando un enfoque realmente simple que no requiera mucha codificación. – Evgenii

+2

@vucetice Debe favorecer la composición por herencia –

Cuestiones relacionadas