Erstens ist diese Antwort keine reine MVC-Antwort, sondern eine ASP.NET-Antwort. Die Tatsache, dass Ihre Site MVC ist, spielt in diesem Fall für die Lösung des Problems keine Rolle.
Hmm. Ich bin mir nicht sicher, wie Sie mit Ihren Benutzern in Ihrem System umgehen, aber es hört sich so an, als würden Sie das (sehr böse) verwenden asp.net membership provider
, das mit .net aus der Box kommt. Dies wird durch die Tatsache angedeutet, dass Sie gesagt haben
- aspnet_Users.UserID
- UserID ist eine eindeutige Kennung (sprich: GUID).
Mit dem Standardformularauthentifizierungssystem, das die StandardformsIdentity verwendet , verfügt es nur über eine einzige Eigenschaft namens Name (wie Sie richtig angegeben haben). Dies bedeutet, dass es nur einen Wert gibt, in dem eindeutige Benutzerinformationen abgelegt werden können. In Ihrem Fall fügen Sie Name / Benutzername / Anzeigename in die Name
Eigenschaft ein. Ich gehe davon aus, dass dieser Name ihr Anzeigename ist und eindeutig ist. Welchen Wert Sie auch hier einsetzen, es muss einzigartig sein .
Daraus können Sie die Anleitung des Benutzers abrufen.
Überprüfen Sie dies heraus.
using System.Web.Security;
....
MembershipUser user = Membership.GetUser(User.Identity.Name);
if (user == null)
{
throw new InvalidOperationException("User [" +
User.Identity.Name + " ] not found.");
}
Guid guid = (Guid)user.ProviderUserKey;
Jedes Mal, wenn Sie die Benutzerinformationen abrufen möchten, müssen Sie sie mit der oben beschriebenen statischen Methode aus der Datenbank abrufen.
Lesen Sie alles über die Membership-Klasse und die MembershipUser-Klasse auf MSDN.
Bonus Antwort / Vorschlag
Als solches würde ich dieses Ergebnis CACHEN, damit Sie nicht weiter auf die Datenbank zugreifen müssen.
... cont from above....
Guid guid = (Guid)user.ProviderUserKey;
Cache.Add(User.Identity.Name, user.UserID);
Andernfalls können Sie Ihre eigene Identitätsklasse erstellen (die von IIdentity erbt ) und Ihre eigenen benutzerdefinierten Eigenschaften hinzufügen, z UserID
. Bei jeder Authentifizierung (und auch bei jeder Anforderung) können Sie diesen Wert festlegen. Wie auch immer, dies ist eine Hardcore-Lösung. Fahren Sie jetzt mit dem Caching fort.
HTH