Dopo aver letto il middlware di asp.net core, sono confuso su quando dovrei usare i filtri e quando dovrei usare i middleware poiché sembrano raggiungere lo stesso obiettivo. Quando dovrebbero essere usati i middleware invece dei fitlers?
Dopo aver letto il middlware di asp.net core, sono confuso su quando dovrei usare i filtri e quando dovrei usare i middleware poiché sembrano raggiungere lo stesso obiettivo. Quando dovrebbero essere usati i middleware invece dei fitlers?
Risposte:
C'è un video su questo sul canale 9: ASP.NET Monsters # 91: Middleware vs. filtri . Per riassumere il video:
Viene avviata l'esecuzione della richiesta e abbiamo un middleware e un altro middleware, pensatelo come le "bambole russe dentro le bambole" e alla fine il middleware di instradamento si attiva e quindi la richiesta va nella pipline MVC.
Quindi, se non hai bisogno del contesto di MVC (diciamo che sei preoccupato per il flusso e l'esecuzione, come rispondere alle intestazioni, alcuni meccanismi di pre-routing, ecc.) Quindi usa i middleware .
Ma se hai bisogno del contesto di MVC e vuoi operare contro le azioni, usa i filtri .
Il middleware opera a livello di ASP.NET Core e può agire su ogni singola richiesta che arriva all'applicazione.
I filtri MVC d'altra parte vengono eseguiti solo per le richieste che arrivano a MVC.
Quindi, ad esempio, se volessi imporre che tutte le richieste vengano eseguite tramite HTTPS, dovrei utilizzare un middleware per questo. Se ho creato un filtro MVC che lo ha fatto, gli utenti potrebbero comunque richiedere, ad esempio, file statici su HTTP.
Ma d'altra parte qualcosa che registra le durate delle richieste nei controller MVC potrebbe essere assolutamente un filtro di azione.
L'esecuzione di middleware
avviene prima che il contesto MVC diventi disponibile nella pipeline. Cioè, middleware
non ha accesso a ActionExecutingContext
o ActionExecutedContext
nel caso di ActionFilter, ad esempio. Ciò a cui hai accesso è HttpContext
, che ti consentirà di eseguire azioni sulla richiesta e sulla risposta. Poiché l'associazione del modello non è ancora avvenuta, l'utilizzo del middleware non sarebbe adatto per eseguire una funzione di convalida o modificare i valori. Middleware
verrà eseguito anche su ogni richiesta indipendentemente dal controller o dall'azione chiamata.
D'altra parte, filters
verrà eseguito solo su azioni e controller specificati a meno che non si registri il filtro globalmente all'avvio. Dato che hai pieno accesso al contesto, puoi anche accedere al controller e all'azione stessa.
Fonte ed esempio: dotnetcultist.com