asp.net core middleware vs filtros

Respuestas:

80

Hay un video sobre esto en el canal 9: ASP.NET Monsters # 91: Middleware vs. Filters . Para resumir el video:

La ejecución de la solicitud comienza y tenemos un middleware, y otro middleware, piense en ello como las "muñecas rusas dentro de las muñecas" y, finalmente, el middleware de enrutamiento se activa y luego la solicitud entra en la línea de conexión MVC. ingrese la descripción de la imagen aquí Entonces, si no necesita el contexto de MVC (digamos que le preocupa el flujo y la ejecución, como responder a los encabezados, algún mecanismo de enrutamiento previo, etc.), use middlewares .
Pero si necesita el contexto de MVC y desea operar contra acciones, use filtros .

Arvand
fuente
Entonces, si tengo la lógica que quiero ejecutar en cada solicitud (registro, por ejemplo), solo algunas de las cuales están relacionadas con MVC, lo pondría en el middleware, luego haría que el controlador de filtro haga cualquier lógica específica que se requiera para ello, luego volver a lanzar al middleware?
Terry H
64

El middleware opera en el nivel de ASP.NET Core y puede actuar en cada solicitud que llega a la aplicación.

Los filtros MVC, por otro lado, solo se ejecutan para solicitudes que llegan a MVC.

Entonces, por ejemplo, si quisiera hacer cumplir que todas las solicitudes deben realizarse a través de HTTPS, tendría que usar un middleware para eso. Si hice un filtro MVC que hiciera eso, los usuarios aún podrían solicitar, por ejemplo, archivos estáticos a través de HTTP.

Pero, por otro lado, algo que registra la duración de las solicitudes en los controladores MVC podría ser absolutamente un filtro de acción.

juunas
fuente
3

La ejecución de middlewareocurre antes de que el contexto MVC esté disponible en la canalización. Es decir, middlewareno tiene acceso al ActionExecutingContexto ActionExecutedContexten el caso de un ActionFilter, por ejemplo. A lo que sí tiene acceso es al HttpContext, que le permitirá realizar acciones tanto en la solicitud como en la respuesta. Dado que el enlace del modelo aún no se ha producido, el uso de middleware no sería adecuado para ejecutar una función de validación o modificar valores. Middlewaretambién se ejecutará en cada solicitud independientemente del controlador o acción que se llame.

Por otro lado, filterssolo se ejecutará en acciones y controladores especificados a menos que registre el filtro globalmente en el inicio. Dado que tiene acceso completo al contexto, también puede acceder al controlador y la acción en sí.

Fuente y ejemplo: dotnetcultist.com

Majid Parvin
fuente