在MVC 3中的控制器操作中获取当前登录用户

时间:2013-02-25 09:59:39

标签: asp.net-mvc-3 windows-authentication intranet

我正在研究MVC 3内部网应用程序(Windows身份验证)。我想在我的控制器操作中使用当前登录用户的用户名。我尝试了很多变化,但无法获得用户名。我尝试使用Environment.Username它在调试模式下运行良好,但在部署时它提供了池名而不是用户名。

控制器动作。

  public ActionResult Index()
        {
            LoggedUser usr = new LoggedUser();
            var aa = usr.User;
        }

LoggedUser

public class LoggedUser : Controller
    {
        public LoggedUser()
        {

        }
    }

我关注这篇文章,但无法使其发挥作用Getting the logged in username in ASP.NET MVC3 intranet application

任何帮助??

3 个答案:

答案 0 :(得分:2)

要检索当前登录的用户名,您可以使用操作中的User.Identity.Name属性:

public ActionResult Index()
{
    string usr = User.Identity.Name;
    ...
}

您在问题中显示的代码不正确。您已定义LoggedUser并在某个Index操作中实例化此控制器。您不应该手动实例化控制器。这是框架的责任。

答案 1 :(得分:0)

整个讨论是关于真正制作的,听起来像权限的“状态”,在方法/功能的访问中,确实听起来像一个更大的概念,可以像控制对象那样生活在控制器中,制作一个类型的类“状态概念“...关于是否存在于模型/视图/控制器中的所有讨论都可以通过在参数交换中使用ID / Object来解决,但是因为它的访问数据需要,不是控制器的工作,是工作的数据模型的内存结构的dbms和结构化数据访问,类的任何形式/模型/结构的类的作业建模“想法/连接/任务”。关于模型/控制器的所有讨论都是关于效率的,并且在所有情况下效率都是DBMS。

答案 2 :(得分:0)

如果要使用需要用户名的控制器级变量,可以覆盖OnActionExecuting事件,您可以在其中访问经过身份验证的用户ID。您可能必须为user.identity检查null是否谨慎。

    Obj myObj;
    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        myObj = new Obj(User.Identity.Name);
        base.OnActionExecuting(filterContext);
    }