2010-11-27 12 views
2

HttpContext.Current.User.Identity.Name gibt nach LogOn null zurück. Ich verwende IIS7.0 Framework 4.0. und vs 2010. Ich habe ein anderes Projekt, das targetFramework ist 3.5. es funktioniert gut. Aber targetFramework meines neuen Projekts ist 4.0. Wenn Sie HttpContext.Current.User.Identity.Name aufrufen, wird null zurückgegeben.ASP.NET MVC HttpContext IdentityName nach LogOn abrufen

Antwort

7

Sie sollten nach der Anmeldung eine HTTP-Umleitung ausführen, bevor Sie diese Eigenschaft verwenden können. Nach der Weiterleitung können Sie es bei nachfolgenden Anfragen verwenden. Hier ist das übliche Muster:

public ActionResult LogOn() 
{ 
    FormsAuthentication.SetAuthCookie("someuser", false); 
    return RedirectToAction("foo"); 
} 

[Authorize] 
public ActionResult Foo() 
{ 
    // use the logged in user here without problems 
    string userName = User.Identity.Name; 
    return View(); 
} 
+0

ja ich verstehe dich. Ich habe es getestet/und es hat funktioniert. Aber warum kann ich es nicht nach FormsAuthentication.SetAuthCookie aufrufen ("someuser", false); – AEMLoviji

+3

Da 'User.Identity.Name' das Authentifizierungs-Cookie verwendet, das in der ** Anfrage ** vorhanden ist, um diese Eigenschaft aufzufüllen, und nach dem Aufruf von' FormsAuthentication.SetAuthCookie' kein Cookie in der Anfrage vorhanden ist, wird dies in der Antwort so festgelegt dass der Client-Browser es bei nachfolgenden Aufrufen in der Anfrage sendet. Deshalb sollten Sie nach der Anmeldung immer umleiten. –

+0

gute Antwort und gute Erklärung von Darin Dimitrow. Danke – AEMLoviji

0

Eine andere Lösung ist die Reflexion zu verwenden, um das User.Identity.Name Eigentum auf Ihrer Anmeldeseite zu setzen. Dann wird die Eigenschaft festgelegt, ohne zuerst auf eine andere Seite umleiten zu müssen, was eine Art Hack ist.

Verwandte Themen