2014-11-19 7 views
5

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

1

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.

1

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.

0

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.

Verwandte Themen