2013-02-25 61 views
1

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

控制器动作。

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

任何帮助?

回答

2

要检索当前登录用户名,你可以用你的行动里面User.Identity.Name属性:

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

你已经在你的问题中的代码不正确。您已经定义了一个LoggedUser并实例化这个控制器内部的一些Index行动。你不应该手动实例化控制器。这是该框架的责任。

+0

它即将空白 – ankur 2013-02-25 10:03:34

+0

这意味着您没有经过身份验证的用户。您是否正确配置Windows身份验证?你在网络服务器上启用了它吗?你在域内运行吗?你有一个有效的域用户吗? – 2013-02-25 10:04:19

+0

它只是一个默认构造函数,我为了获得基类 – ankur 2013-02-25 10:05:08

0

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

0

,如果你想使用需要用户名控制器级别的变量,可以覆盖OnActionExecuting事件,您可以访问身份验证的用户ID。您可能必须检查用户身份为空,以保持谨慎。

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