Ich habe einige Protokollierungsdienste für meine ASP.NET Core API geschrieben.
Ich schrieb eine Middleware, das jede Aktion aufgerufen wird (Querschnitt Sorge, schien logisch) protokolliert.Verwenden von HttpContext außerhalb eines Controllers - Schlechte Praxis?
Eines der Dinge, die ich anmelden wollte, ist die IP des Benutzers (zum Beispiel). Der einzige Weg, wie ich diese Daten bekommen könnte, ist durch HttpContext.Connection
.
Es funktionierte wie erwartet.
But lately I've been reading etwas mehr darüber und ich verstehe, dass der Zugriff auf HttpContext
außerhalb des Controllers als eine schlechte Praxis gilt. Es macht den Code nicht testbar, da es sehr schwierig ist, nachzuahmen und zu imitieren.
Der Code ist auch nicht für andere .NET-Anwendungen portierbar und muss im Kontext der ASP.NET-Anwendung ausgeführt werden.
Also meine Frage ist - ist es wirklich so eine schlechte Praxis Httpcontext außerhalb von Controllern - innerhalb einer Middleware zum Beispiel?
Und wenn ja - was ist die Alternative?
Oder vielleicht mit HttpContext
innerhalb von Komponenten, die jemals in einem ASP.NET verwendet werden (wie Top-Level-Controller oder Middleware) ist legit.
Danke.
Kommt drauf an. Wenn Sie es innerhalb Ihrer Domain-Ebene (= Domain-Service) referenzieren, dann ist es definitiv eines der schlimmsten Dinge, die Sie tun können, da die Domain keine Abhängigkeiten von der Infrastruktur haben darf (db, webservice, host wie asp.net, wpf, uwp etc) .). Wenn es auf der Anwendungsebene (= Anwendungsdienst) verwendet wird, ist es in Ordnung. Der Unterschied liegt darin, dass die Anwendungsebene an die Anwendung gebunden ist und kaum oder gar nicht portierbar ist (d. H. Zugriff auf die httpcontext-Informationen, sie kann nicht mit WPF arbeiten, da es keinen httpcontext gibt) – Tseng
@Tseng, Ja, dachte ich. Deshalb habe ich gefragt, ob es ok ist, es in Top-Level-Controllern und Middlewares zu verwenden - das heißt, irgendeinen Code, der im Rahmen von ASP.Net leben muss. – DotnetProg