Nachdem ich über asp.net Core Middlware gelesen habe, bin ich verwirrt, wann ich Filter verwenden sollte und wann ich Middleware verwenden sollte, da sie das gleiche Ziel zu erreichen scheinen. Wann sollten Middlewares anstelle von Fitlern verwendet werden?
asp.net-mvc
asp.net-core
Arvand
quelle
quelle
Antworten:
Es gibt ein Video dazu auf Kanal 9: ASP.NET Monsters # 91: Middleware vs. Filter . Um das Video zusammenzufassen:
Die Ausführung der Anfrage beginnt und wir haben eine Middleware und eine andere Middleware. Stellen Sie sich das wie die "russischen Puppen in Puppen" vor. Schließlich wird die Routing-Middleware aktiviert und die Anfrage geht in die MVC-Pipline. Wenn Sie also nicht den Kontext von MVC benötigen (nehmen wir an, Sie sind besorgt über den Ablauf und die Ausführung, z. B. das Reagieren auf Header, einen Vor-Routing-Mechanismus usw.), verwenden Sie Middleware .
Wenn Sie jedoch den Kontext von MVC benötigen und gegen Aktionen arbeiten möchten, verwenden Sie Filter .
quelle
Middleware arbeitet auf der Ebene von ASP.NET Core und kann auf jede einzelne Anforderung reagieren, die in die Anwendung eingeht.
MVC-Filter werden dagegen nur für Anforderungen ausgeführt, die an MVC gesendet werden.
Wenn ich beispielsweise erzwingen möchte, dass alle Anforderungen über HTTPS ausgeführt werden müssen, müsste ich dafür eine Middleware verwenden. Wenn ich einen MVC-Filter erstellen würde, der dies tut, könnten Benutzer weiterhin z. B. statische Dateien über HTTP anfordern.
Andererseits könnte etwas, das Anforderungsdauern in MVC-Controllern protokolliert, absolut ein Aktionsfilter sein.
quelle
Die Ausführung von
middleware
erfolgt, bevor der MVC-Kontext in der Pipeline verfügbar wird. Das heißt,middleware
hat beispielsweise bei einem ActionFilter keinen Zugriff auf dasActionExecutingContext
oder dasActionExecutedContext
. Sie haben Zugriff auf dasHttpContext
, mit dem Sie sowohl Aktionen für die Anforderung als auch für die Antwort ausführen können. Da die Modellbindung noch nicht erfolgt ist, ist die Verwendung von Middleware nicht zum Ausführen einer Validierungsfunktion oder zum Ändern von Werten geeignet.Middleware
wird auch bei jeder Anforderung ausgeführt, unabhängig davon, welcher Controller oder welche Aktion aufgerufen wird.Auf der anderen Seite
filters
wird nur auf bestimmten Aktionen und Controllern ausgeführt, es sei denn, Sie registrieren den Filter global beim Start. Da Sie vollen Zugriff auf den Kontext haben, können Sie auch auf den Controller und die Aktion selbst zugreifen.Quelle und Beispiel: dotnetcultist.com
quelle