我正在研究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
任何帮助??
答案 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);
}