¿Qué son los Action Filters?

  • Los filtros de acción se utilizan generalmente para aplicar problemas transversales como el registro, el almacenamiento en caché, la autorización, etc.
  • El filtro de acción se puede registrar como otros filtros a nivel global, controlador o método de acción.
  • Ejecutan código inmediatamente antes y después de llamar a un método de acción.
  • El atributo de filtro de acción personalizado se puede crear derivando la clase ActionFilterAttribute o implementando la interfaz IActionFilter y la clase abstracta FilterAttribute.
  • Pueden cambiar los argumentos pasados a una acción.
  • Pueden cambiar el resultado devuelto de la acción.
  • No se admiten en Razor Pages.
  • Cada filtro de acción debe anular los métodos :
    • OnActionExecuting: se llama a este método antes de que se ejecute una acción de controlador.
    • OnActionExecuted: se llama a este método después de que se ejecute una acción de controlador.
    • OnResultExecuting: se llama a este método antes de que se ejecute un resultado de acción de controlador.
    • OnResultExecuted: se llama a este método después de que se ejecute un resultado de acción de controlador.

Ejemplo implementación

A continuación se muestra un ejemplo sobre como implementar dichos métodos.

Para ello, lo primero que debemos hacer es crear un proyecto de tipo ASP.Net Framework de tipo MVC.

A continuación, creamos una clase que hereda de ActionFilterAttribute. Esta clase debe terminar con “Attribute”.

En mi caso he creado una carpeta Attributes y dentro la clase, con el fin de tener proyecto lo más estructurado posible.

1

Indicamos que la clase que acabamos de crear hereda de ActionFilterAttribute.

Importante:  El using para usar la clase ActionFilterAttribute debe ser System.Web.Mvc. 

Una vez herede ya podemos escribir el código: public override void y nos saldrán los cuatro métodos.

metodosOverride

Este sería el resultado completo del filtro:

4MetodosImplementados
Nota: El método Log, no es propio de la clase ActionFilterAttribute. 

Su función es simplemente para el ejemplo que estamos realizando.

Una vez tengamos todos los métodos implementados, necesitamos indicar a que métodos o controladores se va a usar el filtro.

FiltroEnControlador

En este caso, hemos implementado el filtro a todo el controlador, podría ponerse solo a ciertos métodos

Nota: A la hora de inyectar el filtro en el controlador o en los métodos, no es necesario escribir “Attribute”. Nuestra clase se llama FiltrosAccionAttribute y sin embargo, solo indicamos FiltrosAccion.

FiltroEnMetodoControlador

Si ahora lanzamos la aplicación y vamos a los distintos controladores, podremos ver por consola como se muestra los mensajes que hemos indicado en nuestro filtro.

MensajesLog

Ejemplo con CORS

Ahora vamos a ver otro ejemplo que nos permite solucionar los problemas de CORS

De forma abreviada, Cors nos permite regular el acceso a los usuarios que llamen a los métodos de nuestro servidor.

https://developer.mozilla.org/es/docs/Web/HTTP/Access_control_CORS

Para este ejemplo vamos a crear de dos proyectos.

  • El primero será un Web Api que nos devolverá datos.
  • El segundo proyecto será de tipo MVC y será el encargado de llamar al API y mostrar los datos en pantalla. 

Proyecto MVC mostrar datos

Para este proyecto vamos a usar el mismo que ya tenemos creado.

Creamos un controlador nuevo y creamos su vista correspondiente con tres botones.

VistaFormCoches
VistaMostrarCoches

Proyecto Web Api

Vamos a crear un proyecto aparte al que tenemos. El proyecto es un ASP.NET Framework de tipo Web Api. A continuación, vamos a crear un controlador de tipo Api.

ControladorWebApi

En dicho Controlador, creamos una serie de datos de prueba y un par de métodos que nos permitirá recoger dichos datos.

ControladorCochesApi

Si arrancamos la aplicación y usamos las urls que están comentadas en el controlador, deberían salir los datos que hemos añadido

FuncionaGetCoches
FuncionaGetCochesConId

Conectando los proyectos

Ahora que ya tenemos los dos proyectos, lo que debemos hacer es volver al Proyecto MVC mostrar datos y mediante Ajax realizar una llamada a nuestro proyecto Api

ScriptAjax1
ScriptAjax2

Ahora arrancamos los 2 proyectos que hemos creado.

Nota: en la url de localhost:Puerto/api/Coches  El puerto puede variar. Hay que copiar la ruta del proyecto Api y copiarla. 

Si pulsamos sobre cualquiera de los botones y vemos la consola, veremos que nos salta un error de Cors.

ErrorCors

Para solucionar este error, debemos añadir un filtro en nuestro controlador CochesController del proyecto Api, para que facilite los permisos.

FiltroCors

Por último, indicarle al controlador que use dicho filtro.

corsControladorCoches

Una vez realizado, arrancamos los dos proyectos de forma simultánea y podemos observar como ya no se produce el error de Cors.

Resultado1
Resultado2

Autor: Iván Sánchez Victoria

Curso: Microsoft MCSA Web Applications + Microsoft MCSD App Builder + Xamarin 

Centro: Tajamar 

Año académico: 2019-2020

Github:

https://github.com/isanchezvictoria/PostISV

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.