Für meine Aktionen, die mit dem Konto des Benutzers interagieren, möchte ich zusätzlich zum Hinzufügen dieses Objekts zu "ViewData [" TheUser "] ein Objekt" TheUser "erstellen, sobald eine Aktion auf meinem Controller ausgeführt wird genannt.
Wenn der Benutzer angemeldet ist, werden die Informationen des Benutzers aus der Datenbank abgerufen. Ist dies nicht der Fall, ist das Objekt "Benutzer" einfach null.
Ich habe versucht, auf "User.Identity.Name" im Controller-Konstruktor zuzugreifen, aber es wird nicht erstellt, bevor eine Aktion aufgerufen wird.
Ich habe nach benutzerdefinierten Autorisierungsfiltern gesucht, aber diese erlauben mir nicht, das Objekt "TheUser" zu erstellen und es in ViewData zu speichern.
Dies ist ein kurzer Ausschnitt dessen, was ich erreichen möchte:
%Vor%Ich habe eine benutzerdefinierte Basis-Controller-Klasse erstellt und ihr eine "CurrentUser" -Eigenschaft hinzugefügt.
In der Initialize-Methode habe ich die Logik platziert, um den Benutzer abzurufen und ihn dann zu ViewData und der Eigenschaft "CurrentUser" des Controllers hinzuzufügen.
Ich hatte meine Controller geerbt die benutzerdefinierte Basis-Controller-Klasse und ich konnte "CurrentUser" Variable irgendwo im Controller verweisen:
%Vor%Ich habe meinen Basis-Controller auf ähnliche Weise mit der Methode constuctor eingerichtet, und ich konnte diese Benutzerinfo auf dem folgenden Mann lesen. Hinweis: Ich speichere nur die UserId, nicht das User-Objekt, aber der Punkt meines Codes zeigt an, wie Sie die erforderlichen Informationen in der Methode contriuctor erhalten können.
%Vor%Muss der Benutzer für jede Controller-Aktion oder nur für bestimmte Instanzen instanziiert werden?
Wenn Sie ein ActionFilterAttribute erstellen, haben Sie Zugriff auf den Controller-Kontext. Nicht sicher, ob das für AuthorizationFilters zutrifft, aber Sie könnten etwas wie folgt versuchen:
%Vor%Fügen Sie dies dann den erforderlichen Controller-Aktionen hinzu.
Tags und Links asp.net-mvc c# authorization