Depois de ler sobre o middlware principal do asp.net, fico confuso quando devo usar filtros e quando devo usar middlewares, pois eles parecem atingir o mesmo objetivo. Quando devem ser usados middlewares em vez de fitlers?
Depois de ler sobre o middlware principal do asp.net, fico confuso quando devo usar filtros e quando devo usar middlewares, pois eles parecem atingir o mesmo objetivo. Quando devem ser usados middlewares em vez de fitlers?
Respostas:
Há um vídeo sobre isso no canal 9: ASP.NET Monsters # 91: Middleware vs. Filtros . Para resumir o vídeo:
A execução da solicitação começa e temos um middleware, e outro middleware, pense nisso como "bonecos russos dentro das bonecas" e, eventualmente, o middleware de roteamento é acionado e a solicitação vai para o pipline MVC.
Portanto, se você não precisa do contexto do MVC (digamos que você esteja preocupado com o fluxo e a execução, como responder aos cabeçalhos, algum mecanismo de pré-roteamento, etc.), use middlewares .
Mas se você precisa do contexto do MVC e deseja operar contra ações, use filtros .
O middleware opera no nível do ASP.NET Core e pode atuar em cada solicitação que chega ao aplicativo.
Os filtros MVC, por outro lado, só funcionam para solicitações que chegam ao MVC.
Então, por exemplo, se eu quisesse fazer com que todas as solicitações fossem feitas por HTTPS, eu teria que usar um middleware para isso. Se eu fizesse um filtro MVC que fizesse isso, os usuários ainda poderiam solicitar, por exemplo, arquivos estáticos sobre HTTP.
Mas, por outro lado, algo que registra as durações das solicitações nos controladores MVC pode ser um filtro de ação.
A execução de middleware
ocorre antes que o contexto MVC se torne disponível no pipeline. Ou seja, middleware
não tem acesso a ActionExecutingContext
ou ActionExecutedContext
no caso de um ActionFilter, por exemplo. O que você tem acesso é o HttpContext
, que permitirá que você execute ações na solicitação, bem como na resposta. Como a vinculação de modelo ainda não ocorreu, o uso de middleware não seria adequado para executar uma função de validação ou modificar valores. Middleware
também será executado em todas as solicitações, independentemente de qual controlador ou ação é chamada.
Por outro lado, filters
só será executado em ações e controladores especificados, a menos que você registre o filtro globalmente na inicialização. Como você tem acesso total ao contexto, também pode acessar o controlador e a própria ação.
Fonte e exemplo: dotnetcultist.com