【问题标题】:ASP.NET MVC: How to use HttpContext.UserASP.NET MVC:如何使用 HttpContext.User
【发布时间】:2009-08-26 15:28:53
【问题描述】:

我对如何使用 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。但这是不同的看待它的错误方式。

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

【问题讨论】:

  • 您是否检查过 .Net 文档中的 HttpContext 对象?那将是我首先要看的地方。

标签: asp.net-mvc httpcontext


【解决方案1】:

我不确定你想用你发布的代码做什么,但这里有一些关于 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();
}

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

【讨论】:

    【解决方案2】:

    在您的登录代码中使用:

    FormsAuthentication.SetAuthCookie("userName", remeberMe);
    

    设置认证用户,然后可以使用

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-12
      • 1970-01-01
      • 2017-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-17
      • 2012-09-30
      相关资源
      最近更新 更多