2009-08-26 86 views
4

我真的失去了如何使用HttpContext.User。我到处看到它对FormAutherication很棒,但我不知道它是如何工作的。如果我做这样的事情:ASP.NET MVC:如何使用HttpContext.User

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我的看法。但是,这是看待它的错误方式。

所以,你们可以给我一个在rigth方向踢或发布链接到一个网站,可以吗?

+1

您是否检查过HttpContext对象的.Net文档?那将是我看起来的第一个地方。 – Lazarus 2009-08-26 15:33:36

回答

9

我不知道究竟你正在尝试用代码来执行你发布,但这里有一些与HttpContext.User的帮助。通俗地说,它代表当前用户请求特定的页面,实际上在你的Controller中,你可以将它引用为没有前缀的“User”。

User.Identity会让你知道用户是否经过身份验证,如果是的话,他们的用户名以及身份验证方式(Forms或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(); 
} 

在这个例子中,如果用户没有通过验证,他们将被重定向到一个登录页面,如果他们已经,操作方法是使用User.Identity.Name(这是他们登录的用户名,或他们的Windows登录名)查找并从数据库中返回一个MyUser对象的实例,并将ViewData中的用户全名显示出来。

4

在您的登录代码使用:

FormsAuthentication.SetAuthCookie("userName", remeberMe); 

设置身份验证的用户,那么你可以使用

<%= User.Identity.Name %> 
<%= User.IsInRole("role") %>