Marco MVC: filtros de acción

En ASP.NET MVC, los controladores definen métodos de acción y estos métodos de acción generalmente tienen una relación uno a uno con los controles de la interfaz de usuario, como hacer clic en un botón o un enlace, etc. Por ejemplo, en uno de nuestros ejemplos anteriores, el UserController la clase contenía métodos UserAdd, UserDelete, etc.

Sin embargo, muchas veces nos gustaría realizar alguna acción antes o después de una operación en particular. Para lograr esta funcionalidad, ASP.NET MVC proporciona una función para agregar comportamientos previos y posteriores a la acción en los métodos de acción del controlador.

Tipos de filtros

El marco ASP.NET MVC admite los siguientes filtros de acción:

  • Action Filters- Los filtros de acción se utilizan para implementar la lógica que se ejecuta antes y después de que se ejecute una acción del controlador. Veremos los filtros de acción en detalle en este capítulo.

  • Authorization Filters - Los filtros de autorización se utilizan para implementar la autenticación y autorización para las acciones del controlador.

  • Result Filters- Los filtros de resultados contienen lógica que se ejecuta antes y después de ejecutar un resultado de vista. Por ejemplo, es posible que desee modificar el resultado de una vista justo antes de que la vista se represente en el navegador.

  • Exception Filters- Los filtros de excepción son el último tipo de filtro que se ejecuta. Puede usar un filtro de excepción para manejar los errores generados por las acciones de su controlador o los resultados de las acciones del controlador. También puede utilizar filtros de excepción para registrar errores.

Los filtros de acción son uno de los filtros más utilizados para realizar un procesamiento de datos adicional, o manipular los valores de retorno o cancelar la ejecución de una acción o modificar la estructura de la vista en tiempo de ejecución.

Filtros de acción

Los filtros de acción son atributos adicionales que se pueden aplicar a una sección del controlador o al controlador completo para modificar la forma en que se ejecuta una acción. Estos atributos son clases .NET especiales derivadas de System.Attribute que se pueden adjuntar a clases, métodos, propiedades y campos.

ASP.NET MVC proporciona los siguientes filtros de acción:

  • Output Cache - Este filtro de acción almacena en caché la salida de una acción del controlador durante un período de tiempo específico.

  • Handle Error - Este filtro de acción maneja los errores que surgen cuando se ejecuta una acción del controlador.

  • Authorize - Este filtro de acción le permite restringir el acceso a un usuario o rol en particular.

Ahora, veremos el ejemplo de código para aplicar estos filtros en un controlador de ejemplo ActionFilterDemoController. (ActionFilterDemoController solo se usa como ejemplo. Puede usar estos filtros en cualquiera de sus controladores).

Caché de salida

Example - Especifica el valor de retorno que se almacenará en caché durante 10 segundos.

public class ActionFilterDemoController : Controller { 
   [HttpGet] 
   OutputCache(Duration = 10)] 
   
   public string Index() { 
      return DateTime.Now.ToString("T");  
   } 
}

Error de manejo

Example - Redirige la aplicación a una página de error personalizada cuando el controlador activa un error.

[HandleError] 
public class ActionFilterDemoController : Controller { 
   
   public ActionResult Index() { 
      throw new NullReferenceException(); 
   }  
   
   public ActionResult About() { 
      return View(); 
   } 
}

Con el código anterior, si ocurre algún error durante la ejecución de la acción, encontrará una vista llamada Error en la carpeta Vistas y mostrará esa página al usuario.

Autorizar

Example - Permitir que solo los usuarios autorizados inicien sesión en la aplicación.

public class ActionFilterDemoController: Controller { 
   [Authorize] 
   
   public ActionResult Index() { 
      ViewBag.Message = "This can be viewed only by authenticated users only"; 
      return View(); 
   }  
   
   [Authorize(Roles="admin")] 
   public ActionResult AdminIndex() { 
      ViewBag.Message = "This can be viewed only by users in Admin role only"; 
      return View(); 
   } 
}

Con el código anterior, si intenta acceder a la aplicación sin iniciar sesión, arrojará un error similar al que se muestra en la siguiente captura de pantalla.