middleware asp.net core vs filtri


Risposte:


83

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. inserisci qui la descrizione dell'immagine 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 .


Quindi, se ho una logica che voglio eseguire su ogni richiesta (registrazione ad esempio) solo alcune delle quali sono correlate a MVC, la metterei nel middleware, quindi chiedo al gestore del filtro di eseguire qualsiasi logica specifica possa essere richiesta per esso, quindi rilanciare al middleware?
Terry H

69

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.


5

L'esecuzione di middlewareavviene prima che il contesto MVC diventi disponibile nella pipeline. Cioè, middlewarenon ha accesso a ActionExecutingContexto ActionExecutedContextnel 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. Middlewareverrà eseguito anche su ogni richiesta indipendentemente dal controller o dall'azione chiamata.

D'altra parte, filtersverrà 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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.