Dans un modèle de formulaires, j'avais l'habitude d'obtenir l'utilisateur actuellement connecté en:
Page.CurrentUser
Comment obtenir l'utilisateur actuel dans une classe de contrôleur dans ASP.NET MVC?
Dans un modèle de formulaires, j'avais l'habitude d'obtenir l'utilisateur actuellement connecté en:
Page.CurrentUser
Comment obtenir l'utilisateur actuel dans une classe de contrôleur dans ASP.NET MVC?
Réponses:
Si vous devez obtenir l'utilisateur à partir du contrôleur, utilisez la User
propriété Controller. Si vous en avez besoin depuis la vue, je remplirais ce dont vous avez spécifiquement besoin dans le ViewData
, ou vous pouvez simplement appeler User car je pense que c'est une propriété de ViewPage
.
J'ai trouvé que ça User
marche, c'est-à-dire, User.Identity.Name
ou User.IsInRole("Administrator")
.
Imports System.Web
qualifier avec HttpContext.Current.User.Identity.Name
, soit vous qualifier directement en utilisant la syntaxe complète:System.Web.HttpContext.Current.User.Identity.Name
Essayez HttpContext.Current.User
.
Propriété partagée publique Current () As System.Web.HttpContext
Membre de System.Web.HttpContextRésumé:
Obtient ou définit l'objet System.Web.HttpContext pour la demande HTTP actuelle.Valeurs de retour:
System.Web.HttpContext pour la demande HTTP actuelle
Vous pouvez obtenir le nom de l'utilisateur dans ASP.NET MVC4 comme ceci:
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
, je vous suggère de faire un appel absolu comme celui-ci System.Web.HttpContext.Current.User.Identity.Name
,.
J'utilise:
Membership.GetUser().UserName
Je ne suis pas sûr que cela fonctionnera dans ASP.NET MVC, mais ça vaut le coup :)
Afin de référencer un ID utilisateur créé à l'aide d'une authentification simple intégrée à ASP.NET MVC 4 dans un contrôleur à des fins de filtrage (ce qui est utile si vous utilisez d'abord la base de données et Entity Framework 5 pour générer des liaisons de code en premier et que vos tables sont structurées de manière à qu’une clé étrangère de l’ID utilisateur est utilisée), vous pouvez utiliser
WebSecurity.CurrentUserId
une fois que vous avez ajouté une instruction using
using System.Web.Security;
System.Security.Principal.WindowsIdentity.GetCurrent().Name
en MVC 5
. Cependant, cela tire le nom de domaine avec le nom d'utilisateur. ie domaine \ nom d'utilisateur
Nous pouvons utiliser le code suivant pour obtenir l'utilisateur actuellement connecté dans ASP.Net MVC:
var user= System.Web.HttpContext.Current.User.Identity.GetUserName();
Aussi
var userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; //will give 'Domain//UserName'
Environment.UserName - Will Display format : 'Username'
Nom d'utilisateur avec:
User.Identity.Name
Mais si vous avez besoin d'obtenir uniquement l'ID, vous pouvez utiliser:
using Microsoft.AspNet.Identity;
Ainsi, vous pouvez obtenir directement l'ID utilisateur:
User.Identity.GetUserId();
Cette page pourrait être ce que vous cherchez:
Utilisation de Page.User.Identity.Name dans MVC3
Vous avez juste besoin User.Identity.Name
.
Utilisation System.Security.Principal.WindowsIdentity.GetCurrent().Name
.
Cela obtiendra l'utilisateur Windows actuellement connecté.
Si vous êtes à l'intérieur de votre page de connexion, dans l'événement LoginUser_LoggedIn par exemple, Current.User.Identity.Name renverra une valeur vide, vous devez donc utiliser votre propriétéLoginControlName.UserName.
MembershipUser u = Membership.GetUser(LoginUser.UserName);
Vous pouvez utiliser le code suivant:
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));
Si vous travaillez dans Active Directory sur un intranet, voici quelques conseils:
(Windows Server 2012)
L'exécution de tout ce qui parle à AD sur un serveur Web nécessite beaucoup de changements et de patience. Étant donné que lors de l'exécution sur un serveur Web par rapport à IIS / IIS Express local, il s'exécute dans l'identité de l'AppPool, vous devez donc le configurer pour usurper l'identité de la personne qui accède au site.
Comment obtenir l'utilisateur actuellement connecté dans un répertoire actif lorsque votre application ASP.NET MVC s'exécute sur un serveur Web à l'intérieur du réseau:
// 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...
Vous devez encapsuler tous les appels liés au «contexte de répertoire actif» dans ce qui suit afin qu'il agisse comme environnement d'hébergement pour obtenir les informations AD:
using (HostingEnvironment.Impersonate()){ ... }
Vous devez également avoir impersonate
défini la valeur true dans votre web.config:
<system.web>
<identity impersonate="true" />
Vous devez avoir l'authentification Windows sur dans web.config:
<authentication mode="Windows" />
Dans Asp.net Mvc Identity 2, vous pouvez obtenir le nom d'utilisateur actuel en:
var username = System.Web.HttpContext.Current.User.Identity.Name;
Dans le Gestionnaire IIS, sous Authentification, désactivez: 1) Authentification anonyme 2) Authentification par formulaire
Ajoutez ensuite les éléments suivants à votre contrôleur pour gérer les tests par rapport au déploiement du serveur:
string sUserName = null;
string url = Request.Url.ToString();
if (url.Contains("localhost"))
sUserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
else
sUserName = User.Identity.Name;