Ich arbeite derzeit mit einigen Legacy-Code, in dem die HttpContext.Current.User
Eigenschaft innerhalb einer MVC-Controller-Methode verwendet wird, um einige grundlegende Autorisierung für den aktuellen Benutzer durchzuführen. Aus dem Lesen der Dokumentation gibt es auch eine HttpContext.User
Eigenschaft und beide scheinen anzuzeigen, dass sie den aktuellen Benutzer erhalten/setzen können. Ich bin neugierig, wenn sie auf einigen Ebenen austauschbar und gleich sind, oder wenn es einen Hauptunterschied zwischen den beiden gibt, der unbeabsichtigte Probleme in Bezug auf die Autorisierung oder sogar die Erkennung des aktuellen Benutzers der Webanwendung verursachen würde.Was ist der Unterschied zwischen HttpContext.Current.User und HttpContext.User
Antwort
Die documentation Art erklärt dies (Hervorhebung hinzugefügt, und obwohl dies auf Webformulare Bezug ist glaube ich das Prinzip das gleiche in MVC ist):
Da ASP.NET-Seiten einen Standard Bezug auf die enthalten System.Web Namespace (die die HttpContext-Klasse enthält), können Sie die Mitglieder von HttpContext auf einer ASPX-Seite verweisen, ohne die vollständige qualifizierten Klassenverweis auf HttpContext zu verwenden. Sie können beispielsweise User.Identity.Name verwenden, um den Namen des Benutzers abzurufen, für den der aktuelle Prozess ausgeführt wird.
Wenn Sie jedoch die Mitglieder des IPrincipal von einem ASP.NET-Code-behind-Modul verwenden möchten, müssen Sie einen Verweis auf den Namespace System.Web in dem Modul und eine voll qualifizierte Bezug auf beide umfassen die derzeit aktive Request/Response Kontext und die Klasse in System.Web, die Sie
zum Beispiel in einem Code-Behind-Seite verwenden wollen, müssen Sie den vollständig qualifizierten Namen angeben HttpContext.Current.User.Identity .Name.
Sowohl HttpContext.Current als auch HttpContext sind identisch mit dem Zurückgeben des httpContext-Objekts für die aktuelle HTTP-Anforderung.
Aber das spätere ist die Eigenschaft des Controller-Objekts, also ist es NUR in einem Controller verfügbar.
Sie können nicht auf HttpContext.User
beziehen, direkt außer vielleicht innerhalb eines Controllers. User
ist eine Eigenschaft der Klasse HttpContext
. Sie können etwas tun:
HttpContext context = HttpContext.Current;
IPrincipal user = context.User;
, das heißt, Sie auf die Eigenschaft durch eine Instanz der Klasse HttpContext
beziehen.
Die Basis Controller
Klasse hat eine Eigenschaft namens HttpContext
. Wenn Sie innerhalb eines Controllers auf HttpContext.User
verweisen, beziehen Sie sich auf base.HttpContext.User
, was im Allgemeinen (immer?) Dasselbe ist wie HttpContext.Current.User
, weil base.HttpContext
im Allgemeinen (vielleicht immer?) Dasselbe ist wie HttpContext.Current
.
- 1. HttpContext.Current.User! = HttpContext.User?
- 2. Was ist der Unterschied zwischen HttpContext.Current.User und Thread.CurrentPrincipal in asp.net?
- 3. Was ist der Unterschied zwischen `==` und `ist`?
- 4. Was ist der Unterschied zwischen:.! und: r !?
- 5. Was ist der Unterschied zwischen Difftime und '-'?
- 6. Was ist der Unterschied zwischen $ und $$?
- 7. Was ist der Unterschied zwischen Verilog! und ~?
- 8. was ist der Unterschied zwischen [[], []] und [[]] * 2
- 9. Was ist der Unterschied zwischen/* ... */und/** ... */
- 10. Was ist der Unterschied zwischen `&` und `ref`?
- 11. Was ist der Unterschied zwischen $ (...) und `...`
- 12. Was ist der Unterschied zwischen .Equals und ==
- 13. Was ist der Unterschied zwischen "$^N" und "$ +"?
- 14. Was ist der Unterschied zwischen + = und = +?
- 15. Was ist der Unterschied zwischen? und ? = Nil
- 16. Was ist der Unterschied zwischen $ (()) und Ausdruck?
- 17. Was ist der Unterschied zwischen:
- 18. Was ist der Unterschied zwischen der JSP und der JSTL?
- 19. Was ist der Unterschied zwischen NetFx45WebLink und NetFx45RedistLink ist
- 20. Was ist der Unterschied zwischen PS1 und PROMPT_COMMAND ist
- 21. Was ist der Unterschied zwischen x86 und x64 ist
- 22. Was ist der Unterschied zwischen „ist None“ und „== None“
- 23. Was ist der Unterschied zwischen DISPATCH_QUEUE_CONCURRENT und DISPATCH_QUEUE_SERIAL ist
- 24. Was ist der Unterschied zwischen Task.Run ist() und Task.Factory.StartNew()
- 25. Was ist der Unterschied zwischen RewriteRule ist und umleiten 301
- 26. Was ist der Unterschied zwischen ist - (void) und + (void) Methoden
- 27. Was ist der Unterschied zwischen ist HttpResponseMessage und HttpResponseException
- 28. Was ist der Unterschied zwischen nohup und kaufmännisches Und
- 29. Was ist der Unterschied zwischen: und :: und ::: in Javascript Grammatik
- 30. Was ist der Unterschied zwischen Microsoft.AspNet.WebApi.OData und Microsoft.Data.OData und Microsoft.AspNet.OData?