Comment obtenir l'utilisateur actuel asp.net noyau
Je veux obtenir l'utilisateur actuel pour obtenir des informations d'utilisateur telles que l'email. Mais je ne peux pas le faire en asp.net noyau.Je suis tellement confus C'est mon code.
HttpContext
est presque nulle dans constructeur de contrôleur.
Ce n'est pas bon d'obtenir l'utilisateur dans chaque action.Je veux obtenir des informations sur l'utilisateur une fois et les mettre dans ViewData
;
public DashboardController()
{
var user = HttpContext.User.GetUserId();
}
6 réponses
User.FindFirst(ClaimTypes.NameIdentifier).Value
Modifier pour le constructeur
Ci-dessous code fonctionne:
public Controller(IHttpContextAccessor httpContextAccessor)
{
var userId = httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value
}
Modifier pour la RTM
, vous devriez Vous inscrire IHttpContextAccessor
:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
}
Moyen Simple qui fonctionne et j'ai vérifié.
var user = await _userManager.GetUserAsync(HttpContext.User);
Ensuite, vous pouvez toutes les propriétés de ces variables comme user.Email
. J'espère que cela aidera quelqu'un.
Avoir une autre façon d'obtenir l'utilisateur actuel Asp.NET Core-et je pense que je l'ai vu quelque part ici, sur SO ^ ^
// Stores UserManager
private readonly UserManager<ApplicationUser> _manager;
// Inject UserManager using dependency injection.
// Works only if you choose "Individual user accounts" during project creation.
public DemoController(UserManager<ApplicationUser> manager)
{
_manager = manager;
}
// You can also just take part after return and use it in async methods.
private async Task<ApplicationUser> GetCurrentUser()
{
return await _manager.GetUserAsync(HttpContext.User);
}
// Generic demo method.
public async Task DemoMethod()
{
var user = await GetCurrentUser();
string userEmail = user.Email; // Here you gets user email
string userId = user.Id;
}
CE code va au contrôleur nommé DemoController. Ne fonctionnera pas sans les deux await (ne compilera pas);)
Il semblerait qu'à partir de Maintenant (avril de 2017) que les travaux suivants:
public string LoggedInUser => User.Identity;
Au moins dans un Controller
Mon problème était d'accéder à L'utilisateur connecté en tant qu'objet dans le fichier cshtml. Considérant que vous vouliez l'utilisateur dans ViewData, cette approche pourrait être utile:
Dans le fichier cshtml
@using Microsoft.AspNetCore.Identity
@inject UserManager<ApplicationUser> UserManager
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>
@UserManager.FindByNameAsync(UserManager.GetUserName(User)).Result.Email
</title>
</head>
<body>
</body>
</html>
J'ai ma solution
var claim = HttpContext.User.CurrentUserID();
public static class XYZ
{
public static int CurrentUserID(this ClaimsPrincipal claim)
{
var userID = claimsPrincipal.Claims.ToList().Find(r => r.Type ==
"UserID").Value;
return Convert.ToInt32(userID);
}
public static string CurrentUserRole(this ClaimsPrincipal claim)
{
var role = claimsPrincipal.Claims.ToList().Find(r => r.Type ==
"Role").Value;
return role;
}
}