获取ASP.NET MVC3 Intranet应用程序中的登录用户名

时间:2011-07-22 06:22:31

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

我正在研究MVC 3内部网应用程序(Windows身份验证)。一旦用户登录,应用程序必须显示用户的配置文件页面。为此,必须在Global.asax.cs中的以下路由中将登录用户的用户名作为路由参数传入。

routes.MapRoute(
    "Initial",
    "{controller}/{action}/{emailAlias}", // URL with parameters
    new { controller = "Home", action = "Home", userId = **<USERNAME>**}
);

在这里,我已经使用了一些替代品。

  1. 起初我使用Environment.Username。哪个在开发中很有效。但不是在出版后。因为Environment.Username会生成应用程序运行的应用程序池的名称。如上所述here

  2. Controller.User.Identity.Name用于在控制器中获取所需的用户名,适用于发布前和发布后。但它不能在Global.asax.cs的上下文中使用。

  3. System.Web.HttpContext.Current.User.Identity.Name产生空引用。

  4. System.Security.Principal.WindowsIdentity.GetCurrent().NameEnvironment.Username

  5. 的作用相同

    我相信现在很容易弄明白我是个菜鸟。也许我错过了一些明显的东西。如果是这样,请指出或请提前告诉我一个简单的解决方案。

1 个答案:

答案 0 :(得分:13)

global.asax代码应该在应用程序启动(和关闭)时运行,并且您当时没有任何会话或用户(因此名称全局)。为什么你需要路线中的用户名?您应该只使用控制器代码中的User.Identity.Name来识别用户,而不是依赖于将其作为参数。

相关问题