Ich habe das schon einmal mit MVC5 gemacht, User.Identity.GetUserId()
aber das scheint hier nicht zu funktionieren. Das User.Identity
hat die GetUserId()
Methode nicht
ich benutze Microsoft.AspNet.Identity
Ich habe das schon einmal mit MVC5 gemacht, User.Identity.GetUserId()
aber das scheint hier nicht zu funktionieren. Das User.Identity
hat die GetUserId()
Methode nicht
ich benutze Microsoft.AspNet.Identity
System.Web.HttpContext.Current.User.Identity.Name
?Antworten:
Update in ASP.NET Core Version> = 2.0
In der Steuerung:
In einer anderen Klasse:
Dann sollten Sie sich wie folgt
IHttpContextAccessor
in derStartup
Klasse anmelden :Für eine bessere Lesbarkeit schreiben Sie Erweiterungsmethoden wie folgt:
Dann verwenden Sie wie folgt:
quelle
null
.User.Identity.Name
, dies möglicherweise daran liegt, dass die anonyme Authentifizierung aktiviert ist. Ich konnteUser.Identity.Name
meine Domain und meinen Benutzernamen durch ErweiternProperties > launchSettings.json
und EinstellenanonymousAuthentication
auffalse
undwindowsAuthentication
auf zurückgebentrue
.Bis ASP.NET Core 1.0 RC1 :
Es ist User.GetUserId () aus dem System.Security.Claims- Namespace.
Seit ASP.NET Core 1.0 RC2 :
Sie müssen jetzt UserManager verwenden . Sie können eine Methode erstellen, um den aktuellen Benutzer abzurufen:
Und erhalten Sie Benutzerinformationen mit dem Objekt:
Hinweis: Sie können dies tun, ohne eine Methode zum Schreiben einzelner Zeilen wie diese zu verwenden
string mail = (await _userManager.GetUserAsync(HttpContext.User))?.Email
, ohne jedoch das Prinzip der Einzelverantwortung zu berücksichtigen. Es ist besser, die Art und Weise zu isolieren, in der Sie den Benutzer erhalten, da es schmerzhaft wird, wenn Sie eines Tages Ihr Benutzerverwaltungssystem ändern und beispielsweise eine andere Lösung als Identity verwenden, da Sie Ihren gesamten Code überprüfen müssen.quelle
Sie können es in Ihrem Controller erhalten:
oder schreiben Sie eine Erweiterungsmethode wie zuvor .Core v1.0
und erhalten Sie, wo immer Benutzer ClaimsPrincipal verfügbar ist :
quelle
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
Convert.ToInt32(User.FindFirstValue(ClaimTypes.NameIdentifier))
, um Ganzzahl UserIdIch habe die Verwendung von System.Security.Claims eingeschlossen und konnte auf die Erweiterungsmethode GetUserId () zugreifen
NB: Ich hatte bereits Microsoft.AspNet.Identity verwendet, konnte aber die Erweiterungsmethode nicht erhalten. Ich denke also, dass beide zusammen verwendet werden müssen
EDIT : Diese Antwort ist jetzt veraltet. Schauen Sie sich Sorens oder Adriens Antwort an, um zu erfahren, wie dies in CORE 1.0 erreicht werden kann
quelle
var userId = User.GetUserId();
Nur für .NET Core 2.0 Zum Abrufen der Benutzer-ID des angemeldeten Benutzers in einer
Controller
Klasse ist Folgendes erforderlich :oder
z.B
quelle
Wie irgendwo in diesem Beitrag angegeben, wurde die GetUserId () -Methode in den UserManager verschoben.
Wenn Sie ein leeres Projekt gestartet haben, müssen Sie möglicherweise den UserManger zu Ihren Diensten in startup.cs hinzufügen. Andernfalls sollte dies bereits der Fall sein.
quelle
Sie müssen Microsoft.AspNetCore.Identity & System.Security.Claims importieren
quelle
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"
fürUser.FindFirstValue(ClaimTypes.NameIdentifier);
?Obwohl Adriens Antwort richtig ist, können Sie dies alles in einer einzigen Zeile tun. Keine Notwendigkeit für zusätzliche Funktion oder Chaos.
Es funktioniert Ich habe es in ASP.NET Core 1.0 überprüft
dann können Sie andere Eigenschaften der Variablen wie erhalten
user.Email
. Ich hoffe das hilft jemandem.quelle
Für ASP.NET Core 2.0, Entity Framework Core 2.0, AspNetCore.Identity 2.0-API ( https://github.com/kkagill/ContosoUniversity-Backend ):
Das
Id
wurde geändert inUser.Identity.Name
Antwort:
quelle
this.User.Identity.Name
in der Regel der Benutzername. Bei meinem Test ist der Benutzername eine E-Mail, sei es der Benutzer, der sich von der Registrierung aus anmeldet oder sich von einem externen Login anmeldet (z. B. Facebook, Google). Der folgende Code gibt die Benutzer-ID zurück. Ich verwende einen automatisch inkrementierten Primärschlüssel für meine Identitätsbenutzertabelle, daher int.Parse.int userId = int.Parse(this.User.FindFirstValue(ClaimTypes.NameIdentifier));
FindByIdAsync
funktioniert nicht, da Sie einen Benutzernamen angeben. Es funktioniert, wenn Sie es durch ersetzenFindByNameAsync
.in dem
APiController
So etwas bekommen Sie die Ansprüche
quelle
User.Identity.GetUserId ();
existiert nicht in asp.net Identity Core 2.0. In dieser Hinsicht habe ich es anders geschafft. Ich habe eine gemeinsame Klasse für die Verwendung der gesamten Anwendung erstellt, da Benutzerinformationen abgerufen werden.
Erstellen Sie eine gemeinsame Klasse PCommon & Schnittstelle IPCommon und fügen Sie eine Referenz hinzu
using System.Security.Claims
Hier die Implementierung der gemeinsamen Klasse
Holen Sie sich die Benutzer-ID und den Namen in die Einfügeaktion
Danke, Maksud
quelle
Um die aktuelle Benutzer-ID in Rasiereransichten abzurufen, können Sie UserManager wie folgt in die Ansicht einfügen:
Ich hoffe, Sie finden es nützlich.
quelle
Verwendung kann verwenden
Aus irgendeinem Grund ruft NameIdentifier jetzt den Benutzernamen ab (.net Core 2.2).
quelle
Als Administrator, der am Profil anderer Personen arbeitet und die ID des Profils abrufen muss, an dem Sie arbeiten, können Sie die ID mit einem ViewBag erfassen, z. B. ViewBag.UserId = userId; während userId der String-Parameter der Methode ist, an der Sie arbeiten.
quelle
Wenn Sie dies in ASP.NET MVC Controller möchten, verwenden Sie
Sie müssen eine
using
Anweisung hinzufügen , daGetUserId()
diese ohne diese Anweisung nicht verfügbar ist.quelle
User.GetUserId()
und nichtUser.Identity.GetUserId()