Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
por Microsoft
El objetivo de este tutorial es explicar los filtros de acción. Un filtro de acción es un atributo que se puede aplicar a una acción del controlador (o a un controlador completo) que modifica la forma en que se ejecuta la acción.
Descripción de los filtros de acción
El objetivo de este tutorial es explicar los filtros de acción. Un filtro de acción es un atributo que se puede aplicar a una acción del controlador (o a un controlador completo) que modifica la forma en que se ejecuta la acción. El marco de ASP.NET MVC incluye varios filtros de acción:
- OutputCache: Este filtro de acción almacena en caché la salida de una acción del controlador durante un período de tiempo especificado.
- HandleError – Este filtro de acción controla los errores que se producen cuando se ejecuta una acción del controlador.
- Autorizar – este filtro de acción le permite restringir el acceso a un usuario o rol determinado.
También puede crear sus propios filtros de acción personalizados. Por ejemplo, puede que quiera crear un filtro de acción personalizado para implementar un sistema de autenticación personalizado. O bien, es posible que desee crear un filtro de acción que modifique los datos de vista devueltos por una acción del controlador.
En este tutorial, aprenderá a crear un filtro de acción desde cero. Creamos un filtro de acción de registro que registra distintas fases del procesamiento de una acción en la ventana Salida de Visual Studio.
Incorporación de un filtro de acción
Un filtro de acción es un atributo. Puede aplicar la mayoría de los filtros de acción a una acción de controlador individual o a un controlador completo.
Por ejemplo, el controlador de datos de la lista 1 expone una acción denominada Index() que devuelve la hora actual. Esta acción está decorada con el filtro de acción OutputCache. Este filtro hace que el valor devuelto por la acción se almacene en caché durante 10 segundos.
Lista 1: Controllers\DataController.vb
Public Class DataController
Inherits System.Web.Mvc.Controller
<OutputCache(Duration:=10)> _
Function Index()
Return DateTime.Now.ToString("T")
End Function
End Class
Si invoca repetidamente la acción Index() escribiendo la dirección URL /Data/Index en la barra de direcciones del explorador y presionando el botón Actualizar varias veces, verá el mismo tiempo durante 10 segundos. La salida de la Index() acción se almacena en caché durante 10 segundos (vea la figura 1).
Figura 01: Tiempo almacenado en caché (Haga clic para ver la imagen de tamaño completo)
En la lista 1, se aplica un filtro de acción único (el OutputCache filtro de acción) al Index() método. Si lo necesita, puede aplicar varios filtros de acción a la misma acción. Por ejemplo, es posible que desee aplicar los filtros de acción OutputCache y HandleError a la misma acción.
En la lista 1, el OutputCache filtro de acción se aplica a la Index() acción. También puede aplicar este atributo a la propia clase DataController. En ese caso, el resultado devuelto por cualquier acción expuesta por el controlador se almacenaría en caché durante 10 segundos.
Los distintos tipos de filtros
El marco de ASP.NET MVC admite cuatro tipos diferentes de filtros:
- Filtros – de autorización Implementa el atributo
IAuthorizationFilter. - Filtros de acción: implementa el
IActionFilteratributo. - Filtros de resultados: implementa el
IResultFilteratributo. - Filtros de excepciones: implementa el
IExceptionFilteratributo.
Los filtros se ejecutan en el orden indicado anteriormente. Por ejemplo, los filtros de autorización siempre se ejecutan antes de que los filtros de acción y los filtros de excepción siempre se ejecuten después de cada otro tipo de filtro.
Los filtros de autorización se usan para implementar la autenticación y la autorización para las acciones del controlador. Por ejemplo, el filtro Authorize es un ejemplo de filtro de autorización.
Los filtros de acción contienen lógica que se ejecuta antes y después de que se ejecute una acción del controlador. Puede usar un filtro de acciones, por ejemplo, para modificar los datos de vista que devuelve una acción del controlador.
Los filtros de resultados contienen lógica que se ejecuta antes y después de ejecutar un resultado de vista. Por ejemplo, puede que desee modificar un resultado de vista justo antes de que la vista se represente en el explorador.
Los filtros de excepción son el último tipo de filtro que se va a ejecutar. Puede usar un filtro de excepciones para controlar los errores generados por las acciones del controlador o los resultados de la acción del controlador. También puede usar filtros de excepciones para registrar errores.
Cada tipo de filtro diferente se ejecuta en un orden determinado. Si desea controlar el orden en el que se ejecutan los filtros del mismo tipo, puede establecer la propiedad Order de un filtro.
La clase base para todos los filtros de acción es la clase System.Web.Mvc.FilterAttribute. Si desea implementar un tipo determinado de filtro, deberá crear una clase que herede de la clase Filter base e implemente una o varias de las interfaces IAuthorizationFilter, IActionFilter, IResultFilter o ExceptionFilter.
Clase Base ActionFilterAttribute
Para facilitar la implementación de un filtro de acción personalizado, el marco de ASP.NET MVC incluye una clase base ActionFilterAttribute. Esta clase implementa las interfaces IActionFilter y IResultFilter hereda de la clase Filter.
La terminología aquí no es totalmente coherente. Técnicamente, una clase que hereda de la clase ActionFilterAttribute es un filtro de acción y un filtro de resultados. Sin embargo, en el sentido flexible, el filtro de acción de palabra se usa para hacer referencia a cualquier tipo de filtro en el marco de ASP.NET MVC.
La clase ActionFilterAttribute base tiene los métodos siguientes que puede invalidar:
- OnActionExecuting: Se llama a este método antes de ejecutar una acción del controlador.
- OnActionExecuted: este método se llama después de ejecutar una acción del controlador.
- OnResultExecuting: se llama a este método antes de ejecutar un resultado de acción del controlador.
- OnResultExecuted: este método se llama después de ejecutar un resultado de acción del controlador.
En la sección siguiente, veremos cómo puede implementar cada uno de estos métodos diferentes.
Crear un filtro de acción de registro
Para ilustrar cómo puede crear un filtro de acción personalizado, crearemos un filtro de acción personalizado que registre las fases de procesamiento de una acción de controlador en la ventana Salida de Visual Studio. Nuestra LogActionFilter está contenida en la lista 2.
Lista 2: ActionFilters\LogActionFilter.vb
Public Class LogActionFilter
Inherits ActionFilterAttribute
Public Overrides Sub OnActionExecuting(ByVal filterContext As ActionExecutingContext)
Log("OnActionExecuting", filterContext.RouteData)
End Sub
Public Overrides Sub OnActionExecuted(ByVal filterContext As ActionExecutedContext)
Log("OnActionExecuted", filterContext.RouteData)
End Sub
Public Overrides Sub OnResultExecuting(ByVal filterContext As ResultExecutingContext)
Log("OnResultExecuting", filterContext.RouteData)
End Sub
Public Overrides Sub OnResultExecuted(ByVal filterContext As ResultExecutedContext)
Log("OnResultExecuted", filterContext.RouteData)
End Sub
Private Sub Log(ByVal methodName As String, ByVal routeData As RouteData)
Dim controllerName = routeData.Values("controller")
Dim actionName = routeData.Values("action")
Dim message = String.Format("{0} controller:{1} action:{2}", methodName, controllerName, actionName)
Debug.WriteLine(message, "Action Filter Log")
End Sub
End Class
En la lista 2, los métodos OnActionExecuting(),OnActionExecuted(), OnResultExecuting()y OnResultExecuted() llaman al método Log(). El nombre del método y los datos de ruta actuales se pasan al método Log(). El método Log() escribe un mensaje en la ventana Salida de Visual Studio (vea la figura 2).
Figura 02: Escribir en la ventana Salida de Visual Studio (haga clic para ver la imagende tamaño completo)
El controlador home de la lista 3 muestra cómo puede aplicar el filtro de acción Registro a toda una clase de controlador. Cada vez que se invoca cualquiera de las acciones expuestas por el controlador de Inicio: ya sea el método Index() o el métodoAbout(): las etapas de procesamiento de la acción se registran en la ventana de Salida de Visual Studio.
Lista 3: Controllers\HomeController.vb
<LogActionFilter()> _
Public Class HomeController
Inherits System.Web.Mvc.Controller
Function Index()
Return View()
End Function
Function About()
Return View()
End Function
End Class
Resumen
En este tutorial, se le presentó ASP.NET filtros de acción de MVC. Ha aprendido sobre los cuatro tipos diferentes de filtros: filtros de autorización, filtros de acción, filtros de resultados y filtros de excepciones. También ha aprendido sobre la clase base ActionFilterAttribute.
Por último, ha aprendido a implementar un filtro de acción simple. Hemos creado un filtro de acción de registro que registra las fases de procesamiento de una acción de controlador en la ventana Salida de Visual Studio.

