HttpContext.Current.User! = HttpContext.User?

JestHttpContext.Current.User w globalnym asaxie nie to samo coHttpContext.User w metodzie akcji? Przypisałem użytkownikowi pewne role, ale wydaje się, że się gubią.

Poniższy kod pokazuje, co się dzieje. Oba assety trafiają, gdy użytkownik jest zalogowany, najpierw w globalnym asaxie, a następnie w metodzie akcji. Jednak dają różne wyniki.

Najpierw:

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"));
}

Wtedy to w mojej metodzie akcji:

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

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

    // ...
}

Użyłem następujących zasobów

Ta odpowiedź SO

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

questionAnswers(1)

yourAnswerToTheQuestion