ASP.NET MVC:如何使用HttpContext.User

时间:2009-08-26 15:28:53

标签: asp.net-mvc httpcontext

我真的迷失了如何使用HttpContext.User。我到处都读到了FormAutherication的优点,但我不知道它是如何工作的。如果我做这样的事情:

ControllerContext.HttpContext.User = new GenericPrincipal(GetUser(username, password), roles);

ControllerContext.HttpContext.User包含哪些内容?以及如何通过这种方式访问​​用户信息?

我认为我有这样的行动:

public User GetUser(string username, string password)
    {
        try
        {
            var user = (from u in dm.Users
                        join r in dm.Roles
                        on u.Role_ID_FK equals r.RoleID
                        where u.Username.Equals(username) && u.Password.Equals(password)
                        select u).Single();

            return user;
        }
        catch (Exception e)
        {
            return null;
        }
    }

然后,如果我想在我的视图中使用用户信息,比如用户名或角色,我可以在我的视图中调用ControllerContext.HttpContext.User.Username。但这看起来是错误的方式。

那么你们可以给我一个方向,或发布一个链接到一个可以的网站吗?

2 个答案:

答案 0 :(得分:9)

我不确定你要对你发布的代码做什么,但这里有一些关于HttpContext.User的帮助。通俗地说,它表示请求特定页面的当前用户,实际上在您的控制器中,您可以将其引用为没有前缀的“用户”。

User.Identity会告诉您用户是否经过身份验证,如果是,他们的用户名以及他们的身份验证方式(表单或Windows)。

它通常用于获取请求页面的用户的用户名,以便您的控制器操作可以执行正确的职责。类似的东西:

public ActionResult Index()
{
    //you should probably use the [Authorize] attribute on the Action Method
    //but you could check for yourself whether the user is authenticated...
    if (!User.Identity.IsAuthenticated)
         return RedirectToAction("LogIn");

    MyUser u = repository.GetUser(User.Identity.Name); //lookup user by username
    ViewData["fullname"] = u.FullName; //whatever...
    return View();
}

在此示例中,如果用户未经过身份验证,则会将其重定向到LogOn页面,如果已经过,则Action方法正在使用User.Identity.Name(这是他们登录的用户名)使用或Windows登录)从数据库中查找并返回MyUser对象的实例,并将用户的全名放在ViewData中进行显示。

答案 1 :(得分:4)

在您的登录代码中使用:

FormsAuthentication.SetAuthCookie("userName", remeberMe);

设置经过身份验证的用户,然后您可以使用

<%= User.Identity.Name %>
<%= User.IsInRole("role") %>
相关问题