Después de leer acerca de asp.net core middlware, estoy confundido cuando debo usar filtros y cuando debo usar middlewares, ya que parecen lograr el mismo objetivo. ¿Cuándo se deben usar middlewares en lugar de fitlers?
Después de leer acerca de asp.net core middlware, estoy confundido cuando debo usar filtros y cuando debo usar middlewares, ya que parecen lograr el mismo objetivo. ¿Cuándo se deben usar middlewares en lugar de fitlers?
Respuestas:
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.
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 .
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.
La ejecución de middleware
ocurre antes de que el contexto MVC esté disponible en la canalización. Es decir, middleware
no tiene acceso al ActionExecutingContext
o ActionExecutedContext
en 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. Middleware
también se ejecutará en cada solicitud independientemente del controlador o acción que se llame.
Por otro lado, filters
solo 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