In einem Formularmodell habe ich den aktuell angemeldeten Benutzer abgerufen durch:
Page.CurrentUser
Wie erhalte ich den aktuellen Benutzer in einer Controller-Klasse in ASP.NET MVC?
In einem Formularmodell habe ich den aktuell angemeldeten Benutzer abgerufen durch:
Page.CurrentUser
Wie erhalte ich den aktuellen Benutzer in einer Controller-Klasse in ASP.NET MVC?
Antworten:
Wenn Sie den Benutzer aus dem Controller herausholen müssen, verwenden Sie die User
Eigenschaft des Controllers. Wenn Sie es aus der Ansicht benötigen, würde ich das, was Sie speziell benötigen, in das einfügen ViewData
, oder Sie könnten einfach User anrufen, da ich denke, dass es eine Eigenschaft von ist ViewPage
.
Ich fand, dass das User
funktioniert, das heißt, User.Identity.Name
oder User.IsInRole("Administrator")
.
Imports System.Web
und weiter qualifizieren HttpContext.Current.User.Identity.Name
oder sich direkt mit der vollständigen Syntax qualifizieren:System.Web.HttpContext.Current.User.Identity.Name
Versuchen Sie es HttpContext.Current.User
.
Public Shared Property Current () As System.Web.HttpContext
Mitglied von System.Web.HttpContextZusammenfassung:
Ruft das System.Web.HttpContext-Objekt für die aktuelle HTTP-Anforderung ab oder legt dieses fest.Rückgabewerte:
Der System.Web.HttpContext für die aktuelle HTTP-Anforderung
Sie können den Namen des Benutzers in ASP.NET MVC4 folgendermaßen abrufen:
System.Web.HttpContext.Current.User.Identity.Name
'System.Web.HttpContextBase' does not contain a definition for 'Current' and no extension method 'Current' accepting a first argument of type 'System.Web.HttpContextBase' could be found
, würde ich vorschlagen, einen absoluten Anruf wie diesen zu tätigen System.Web.HttpContext.Current.User.Identity.Name
.
Mir ist klar, dass dies sehr alt ist, aber ich fange gerade erst mit ASP.NET MVC an, also dachte ich, ich würde meine zwei Cent reinstecken:
Request.IsAuthenticated
teilt Ihnen mit, ob der Benutzer authentifiziert ist.Page.User.Identity
gibt Ihnen die Identität des angemeldeten Benutzers.Ich benutze:
Membership.GetUser().UserName
Ich bin nicht sicher, ob dies in ASP.NET MVC funktioniert, aber es ist einen Versuch wert :)
Um auf eine Benutzer-ID zu verweisen, die mit einer einfachen Authentifizierung erstellt wurde, die in ASP.NET MVC 4 in einem Controller zu Filterzwecken integriert ist (dies ist hilfreich, wenn Sie zuerst die Datenbank und Entity Framework 5 zum Generieren von Code-First-Bindungen verwenden und Ihre Tabellen so strukturiert sind dass ein Fremdschlüssel für die Benutzer-ID verwendet wird), können Sie verwenden
WebSecurity.CurrentUserId
Sobald Sie eine using-Anweisung hinzufügen
using System.Web.Security;
System.Security.Principal.WindowsIdentity.GetCurrent().Name
in MVC 5
. Dadurch wird jedoch der Domainname mit dem Benutzernamen aufgerufen. dh Domain \ Benutzername
Wir können folgenden Code verwenden, um den aktuell angemeldeten Benutzer in ASP.Net MVC abzurufen:
var user= System.Web.HttpContext.Current.User.Identity.GetUserName();
Ebenfalls
var userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; //will give 'Domain//UserName'
Environment.UserName - Will Display format : 'Username'
Benutzername mit:
User.Identity.Name
Wenn Sie jedoch nur die ID benötigen, können Sie Folgendes verwenden:
using Microsoft.AspNet.Identity;
So können Sie direkt die Benutzer-ID erhalten:
User.Identity.GetUserId();
Diese Seite könnte genau das sein, wonach Sie suchen:
Verwenden von Page.User.Identity.Name in MVC3
Du brauchst nur User.Identity.Name
.
Verwenden System.Security.Principal.WindowsIdentity.GetCurrent().Name
.
Dadurch wird der aktuell angemeldete Windows-Benutzer abgerufen.
Wenn Sie sich auf Ihrer Anmeldeseite befinden, beispielsweise im Ereignis LoginUser_LoggedIn, gibt Current.User.Identity.Name einen leeren Wert zurück, sodass Sie Ihre Eigenschaft LoginControlName.UserName verwenden müssen.
MembershipUser u = Membership.GetUser(LoginUser.UserName);
Sie können folgenden Code verwenden:
Request.LogonUserIdentity.Name;
IPrincipal currentUser = HttpContext.Current.User;
bool writeEnable = currentUser.IsInRole("Administrator") ||
...
currentUser.IsInRole("Operator");
var ticket = FormsAuthentication.Decrypt(
HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName].Value);
if (ticket.Expired)
{
throw new InvalidOperationException("Ticket expired.");
}
IPrincipal user = (System.Security.Principal.IPrincipal) new RolePrincipal(new FormsIdentity(ticket));
Wenn Sie gerade in Active Directory in einem Intranet arbeiten, finden Sie hier einige Tipps:
(Windows Server 2012)
Das Ausführen von Inhalten, die mit AD auf einem Webserver kommunizieren, erfordert eine Reihe von Änderungen und Geduld. Da die Ausführung auf einem Webserver im Vergleich zu lokalem IIS / IIS Express in der AppPool-Identität ausgeführt wird, müssen Sie sie so einrichten, dass sie sich als derjenige ausgibt, der die Site besucht.
So erhalten Sie den aktuell angemeldeten Benutzer in einem Active Directory, wenn Ihre ASP.NET MVC-Anwendung auf einem Webserver im Netzwerk ausgeführt wird:
// Find currently logged in user
UserPrincipal adUser = null;
using (HostingEnvironment.Impersonate())
{
var userContext = System.Web.HttpContext.Current.User.Identity;
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, ConfigurationManager.AppSettings["AllowedDomain"], null,
ContextOptions.Negotiate | ContextOptions.SecureSocketLayer);
adUser = UserPrincipal.FindByIdentity(ctx, userContext.Name);
}
//Then work with 'adUser' from here...
Sie müssen alle Aufrufe, die mit 'Active Directory-Kontext' zu tun haben, im Folgenden einschließen, damit sie als Hosting-Umgebung fungieren, um die AD-Informationen abzurufen:
using (HostingEnvironment.Impersonate()){ ... }
Sie müssen außerdem impersonate
in Ihrer web.config auf true gesetzt haben:
<system.web>
<identity impersonate="true" />
Sie müssen die Windows-Authentifizierung in web.config aktiviert haben:
<authentication mode="Windows" />
In Asp.net Mvc Identity 2 können Sie den aktuellen Benutzernamen abrufen, indem Sie:
var username = System.Web.HttpContext.Current.User.Identity.Name;
Deaktivieren Sie im IIS-Manager unter Authentifizierung: 1) Anonyme Authentifizierung 2) Formularauthentifizierung
Fügen Sie dann Ihrem Controller Folgendes hinzu, um Tests im Vergleich zur Serverbereitstellung durchzuführen:
string sUserName = null;
string url = Request.Url.ToString();
if (url.Contains("localhost"))
sUserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
else
sUserName = User.Identity.Name;