2011-07-22 62 views
10

我在MVC 3 Intranet应用程序(Windows身份验证)工作。应用程序必须显示在用户一旦用户登录的个人资料页面。为了做到这一点在用户登录的用户名必须是在Global.asax.cs中以下路由的路由参数传入。入门登录的用户名在ASP.NET MVC3 Intranet应用程序

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().Name作品种类相同Environment.Username

我敢肯定,它很容易被现在弄清楚,我是小白。也许我错过了一些明显的东西。如果是这样,请指出或请提前告诉我一个简单的解决方案。

+0

所以,当我改变用户id我的同事的用户名他的个人资料会显示出来? – jao

回答

13

在Global.asax代码应该在应用程序启动(和关闭)来运行和你没有任何会议或在那个时候用户(故名全球)。为什么你需要路由中的用户名?您应该在控制器的代码中使用User.Identity.Name来标识用户,而不是依赖将其作为参数。

+0

+1指向控制器而不是路由 – jao

相关问题