HttpContext.Current.User! = HttpContext.User?

IstHttpContext.Current.User im globalen asax nicht dasselbe wieHttpContext.User in einer Aktionsmethode? Ich habe dem Benutzer einige Rollen zugewiesen, aber sie scheinen verloren zu gehen.

Der folgende Code zeigt, was passiert. Beide Asserts werden getroffen, wenn ein Benutzer angemeldet ist, zuerst in global asax, dann in der Aktionsmethode. Sie geben jedoch unterschiedliche Ergebnisse.

Zuerst das:

protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
    // ... omitted some code to check user is authenticated
    FormsIdentity identity = (FormsIdentity)HttpContext.Current.User.Identity;

    string[] roles = new string[] { "admin", "user" };

    HttpContext.Current.User =
        new System.Security.Principal.GenericPrincipal(identity, roles);

    Assert(HttpContext.User.IsInRole("admin"));
}

Dann ist dies in meiner Aktionsmethode:

public ActionResult Index()
{
    bool isAdmin = HttpContext.User.IsInRole("admin");

    Assert(isAdmin); // this fails, isAdmin is false

    // ...
}

Ich habe die folgenden Ressourcen verwendet

Diese SO Antwort

http://csharpdotnetfreak.blogspot.com/2009/02/formsauthentication-ticket-roles-aspnet.html

Antworten auf die Frage(1)

Ihre Antwort auf die Frage