如何在ASP.NET MVC中为HttpContext.User赋值?

时间:2010-03-09 12:30:29

标签: asp.net-mvc authorize genericprincipal

我写了一个如下控制器:

public class AccountController : Controller
{
    public ActionResult Login(/*---*/)
    {
        GenericIdentity identity = new GenericIdentity("userName");
        GenericPrincipal principal = new GenericPrincipal(identity, new string[] { "role1", "role2" });
        this.HttpContext.User = principal;
        /*---*/;
    }
}

登录后,我可以通过其他控制器中的User.Identity.Name获取用户名。 但User.IsInRole(“role1”)总是返回false。

如何为User分配值,我不想使用Membership ...

2 个答案:

答案 0 :(得分:5)

您需要在某处保留用户数据,以便所有后续页面请求都可以访问它。通常,您将创建身份验证票证并将其存储在cookie中。然后,对于每个请求,您将提取数据并创建IPrincipal。这可以在Global.ascx的Application_AuthenticateRequest方法中完成,

MVC - How to store/assign roles of authenticated users提供了更多有关您想要的简单方法的信息。

答案 1 :(得分:1)

Hm中

使用会员资格?

至少是较低级别的API。你需要在某些事件中为它指定一个主体(它基本上变成一个cookie,并在每次调用时被反序列化)。

详情请见http://support.microsoft.com/kb/306590

http://msdn.microsoft.com/en-us/library/aa302399.aspx