Definieren Sie einen Benutzer mit Benutzer.Identität.Name des controller-Konstruktor
Für meine Aktionen, die gehen, um die Interaktion mit dem Benutzer-account, ich würde gern ein "den Benutzer" Objekt hinzufügen, das Objekt zu "ViewData["den Benutzer"]," sobald eine Aktion auf meinem controller aufgerufen wird.
Wenn der Benutzer angemeldet ist, wird es greifen die User die info aus der Datenbank, wenn nicht, "den Benutzer" - Objekt wird nur null sein.
Ich versuchte Zugriff auf "Benutzer.Identität.Name" in der controller-Konstruktor, aber es ist nicht erstellt, vor jeder action aufgerufen wird.
War ich bei der Suche benutzerdefinierte Autorisierungs-Filter, aber diejenigen, die nicht erlauben würde, mich zu schaffen, die "den Benutzer" Objekt und speichern es in das ViewData.
Dies ist ein kurzer Ausschnitt von dem, was ich gerne erreichen:
[Authorize]
public class HomeController : Controller
{
User TheUser;
public HomeController()
{
TheUser = User.Identity.IsAuthenticated ? UserRepository.GetUser(User.Identity.Name) : null;
ViewData["TheUser"] = TheUser;
}
}
- diese Antwort hat mir geholfen, für MVC3 - stackoverflow.com/a/1506311/511438
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellte ich eine benutzerdefinierte Basis-Controller-Klasse und fügte hinzu, eine "CurrentUser" - Eigenschaft, um es.
In der Initialize-Methode, stellte ich die Logik zum abrufen der Benutzer und fügen Sie es zu der ViewData und der "CurrentUser" - Eigenschaft des Controllers.
Hatte ich meine Controller Erben, die eigene Basis Controller Klasse und ich war in der Lage, Referenz "CurrentUser" variable überall im controller:
Initialize
Methode ist das akzeptieren Ort, das zu tun diese Art der Sache, die in MVC 2 und 3Ich meine setup-Basis-controller in einer ähnlichen Weise unter Verwendung der constuctor Methode, und ich war in der Lage, Lesen Sie dieses Benutzer-info auf den folgenden mannner. Anmerkung: ich habe nur speichern die Benutzer-id, nicht die User-Objekt, aber der Punkt von meinem code ist, um zu zeigen, wie erhalten Sie die gewünschte info in der contriuctor Methode.
System.Threading.Thread.CurrentPrincipal
fixiert es für mich - vielen DankHat der Benutzer instanziiert werden für jede Controller-Aktion, oder nur bestimmte?
Wenn Sie erstellen ein ActionFilterAttribute, haben Sie Zugriff auf den Controller-context. Nicht sicher, ob das wahr ist für AuthorizationFilters, aber Sie könnten versuchen, so etwas wie dieses:
Dann bringen Sie diese auf die notwendigen controller-Aktionen.