- Wie kann ich die ID des aktuell angemeldeten Benutzers in MVC 5 abrufen ? Ich habe die StackOverflow-Vorschläge ausprobiert, aber sie scheinen nicht für MVC 5 zu sein.
- Was ist die bewährte Methode für MVC 5, um den Benutzern Inhalte zuzuweisen? (zB
User
sollte ein habenItems
. Soll ich den BenutzerId
in speichernItem
? Kann ich dieUser
Klasse mit einerList<Item>
Navigationseigenschaft erweitern?
Ich verwende "Einzelbenutzerkonten" aus der MVC-Vorlage.
Versuchte diese:
- Wie erhalte ich den aktuellen Benutzer in einer MVC-Anwendung?
- So erhalten Sie den aktuellen Benutzer in ASP.NET MVC
- Lassen Sie sich in die Benutzer-ID einloggen - dies löst Folgendes aus:
'Membership.GetUser ()' ist null.
c#
asp.net
asp.net-mvc
asp.net-mvc-5
asp.net-identity
Adam Szabo
quelle
quelle
HttpContext.Current.User.Identity.Name
ist der Name des aktuell angemeldeten Benutzers.Item
ihm erstellten Benutzer zuweisen , jedoch nicht basierend auf dem Benutzernamen (der sich möglicherweise ändert). Es funktioniert übrigens nicht so, dass "HttpContext.Current" System.Web.HttpContextBase keine Definition für "Current" enthält und keine Erweiterungsmethode "Current" gefunden werden kann, die ein erstes Argument vom Typ "System.Web.HttpContextBase" akzeptiert ( Fehlt Ihnen eine using-Direktive oder eine Assembly-Referenz?) `. Sind Sie sicher, dass Ihre Lösung für MVC 5 ist?Antworten:
Wenn Sie in einem ASP.NET MVC-Controller codieren, verwenden Sie
Erwähnenswert ist dies
User.Identity.IsAuthenticated
undUser.Identity.Name
wird funktionieren, ohne die oben genannteusing
Aussage hinzuzufügen . AberGetUserId()
wird ohne sie nicht vorhanden sein.Wenn Sie in einer anderen Klasse als einem Controller sind, verwenden Sie
In der Standardvorlage von MVC 5 ist die Benutzer-ID eine als Zeichenfolge gespeicherte GUID.
Noch keine bewährte Methode, aber einige wertvolle Informationen zur Erweiterung des Benutzerprofils gefunden:
Identity
: https://devblogs.microsoft.com/aspnet/introducing-asp-net-identity-a-membership-system-for-asp-net-applications/quelle
GetUserId
sich eine Erweiterungsmethode am unteren Rand von befindetAss_Start\IdentityConfig.cs
, wo immer Sie sie verwenden müssen, müssen Sie in einem anderen Namespace festlegen,using Microsoft.AspNet.Identity
dass die Erweiterung sichtbar wird.Versuchen Sie etwas wie:
Funktioniert mit RTM.
quelle
Wenn Sie das ApplicationUser-Objekt in einer Codezeile haben möchten (wenn Sie die neueste ASP.NET-Identität installiert haben), versuchen Sie Folgendes:
Sie benötigen Folgendes mit Anweisungen:
quelle
Das Erhalten der ID ist ziemlich einfach und Sie haben das gelöst.
Ihre zweite Frage ist jedoch etwas komplizierter.
Das ist also alles Vorabversion, aber das häufigste Problem, mit dem Sie konfrontiert sind, besteht darin, dass Sie den Benutzer um neue Eigenschaften erweitern (oder eine Items-Sammlung in Ihrer Frage).
Nach dem Auspacken erhalten Sie eine Datei,
IdentityModel
die (zum Zeitpunkt des Schreibens) im Ordner "Modelle" aufgerufen wird . Dort haben Sie ein paar Klassen;ApplicationUser
undApplicationDbContext
. Um Ihre Sammlung hinzuzufügen,Items
möchten Sie dieApplicationUser
Klasse so ändern , wie Sie es tun würden, wenn dies eine normale Klasse wäre, die Sie mit Entity Framework verwendet haben. Wenn Sie einen kurzen Blick unter die Haube werfen, werden Sie feststellen, dass alle identitätsbezogenen Klassen (Benutzer, Rolle usw.) nur noch POCOs mit den entsprechenden Datenanmerkungen sind, sodass sie mit EF6 gut funktionieren.Als nächstes müssen Sie einige Änderungen an der vornehmen
AccountController
Konstruktor damit dieser Ihren DbContext verwenden kann.Um ehrlich zu sein, ist es ein wenig esoterisch, das gesamte Benutzerobjekt für Ihren angemeldeten Benutzer zu erhalten.
Diese Zeile erledigt den Job und Sie können
userWithItems.Items
wie gewünscht darauf zugreifen .HTH
quelle
AccountController
?Ich fühle deinen Schmerz, ich versuche das Gleiche zu tun. In meinem Fall möchte ich nur den Benutzer löschen.
Ich habe eine Basis-Controller-Klasse erstellt, von der alle meine Controller erben. Darin überschreibe ich
OnAuthentication
und setze dasfilterContext.HttpContext.User to null
Das ist das Beste, was ich bisher geschafft habe ...
quelle
quelle
Wenn jemand anderes diese Situation hat: Ich erstelle eine E-Mail-Bestätigung, um mich bei meiner App anzumelden, damit meine Benutzer noch nicht angemeldet sind. Ich habe jedoch die folgenden Informationen verwendet, um nach einer E-Mail zu suchen, die bei der Anmeldung eingegeben wurde. Dies ist eine Variation der @ firecape-Lösung
Sie benötigen außerdem Folgendes:
und
quelle
In .Net MVC5 Core 2.2 verwende ich HttpContext.User.Identity.Name. Es hat bei mir funktioniert.
quelle
So habe ich eine AspNetUser-ID erhalten und auf meiner Homepage angezeigt
Ich habe den folgenden Code in meine HomeController Index () -Methode eingefügt
Rufen Sie auf der Ansichtsseite einfach an
Führen Sie das Projekt aus und Sie können Ihre Benutzer-ID sehen
quelle