Ich versuche, einen Verweis auf das Benutzerobjekt in meiner Global.asax-Datei Application_BeginRequest
zu erhalten. Ich benutze die Eigenschaft Context.User
, aber ich bekomme eine NullReferenceException
. Ist es möglich, einen Benutzerobjektreferenz in Application_BeginRequest zu erhalten?.NET Application_BeginRequest - Wie erhalten Sie eine Benutzerreferenz?
Antwort
Sie haben keinen Zugriff auf das Benutzerobjekt, da die Anforderung noch nicht authentifiziert wurde.
Versuchen Sie stattdessen, Application_AuthenticateRequest zu verwenden. Hier
ist eine Erklärung aller Global.asax Ereignisse: https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-5771721.html
Und die MSDN Durchlauf des Anwendungslebenszyklus: http://msdn.microsoft.com/en-us/library/ms178473.aspx
Edit: Ich sehe, was du tust. Ändern Sie Ihre if-Anweisung und wenn nicht-Anweisung (sorry, wenn Syntax falsch ist, ich verwende VB.NET nicht):
Sub Application_AuthenticateRequest()
If Context.User <> Nothing Then
Throw New Exception("User now exists")
End Sub
Sie werden bemerken, dass diese Methode mehr getroffen wird als einmal. Die Ausnahme wird erst zum zweiten oder dritten Mal ausgelöst. Dies liegt daran, dass jede Anfrage dem Anwendungslebenszyklus folgt. Anstatt also die Aktion auszuführen, wenn der Benutzer null ist, sollten Sie sie ausführen, wenn der Benutzer nicht null ist.
Wenn Ihr Ziel ist dynamisch Zugang zu beschränken, sollten Sie eine separate Httpmodule erstellen und zuweisen, um die Dateien, die Sie
Allerdings sind zu beschränken, müssen Sie vorsichtig sein, nicht Umschreiben des gesamten zu übernehmen ASP.NET Application Security-Infrastruktur. Sie können stattdessen den Zugriff auf bestimmte Ordner basierend auf der Rolle einschränken.
Nein, Sie müssen stattdessen Application_AuthenticateRequest
verwenden. Das ist der früheste Punkt, an dem Sie einen Benutzer haben.
Dies wirft eine Ausnahme, immer noch kein Benutzer oder was? Sub Application_AuthenticateRequest() Wenn Context.User nichts ist, dann neue Exception werfen ("No user") End Sub – Ropstah
Bitte überprüfen Sie meinen Kommentar in der anderen Antwort von Julien ... http://stackoverflow.com/questions/3072768/net-application-beginrequest-how-to-get-Benutzer-Referenz/3072801 # 3072801 – Ropstah
ropstah: Ich sehe jetzt, was passiert. Die Anwendung führt mehrere Anforderungen aus (z. B. für Bilder, Skripts, Stylesheets usw.), bevor die Authentifizierungsanforderung verarbeitet wird. Diese anderen Dateianforderungen benötigen möglicherweise keine Authentifizierung und deshalb wird Ihre Ausnahme ausgelöst. Versuchen Sie das Update in meiner Antwort und sehen Sie, ob das klärt. Was versuchen Sie mit Ihrem Code, der das User-Objekt benötigt? –
Dies war nicht der Fall, jedoch ** war ** mit dem 'Global.asax'-Lebenszyklus verbunden. Ich benötigte die 'User.IsInRole()' Funktionalität, die erst ** nach ** _Application_AuthenticateRequest_ in der Prozedur 'Application_AuthorizeRequest()' verfügbar war – Ropstah