繁体   English   中英

在ASP.NET MVC3内网应用中获取登录用户名

[英]Getting the logged in username in ASP.NET MVC3 intranet application

我正在开发 MVC 3 Intranet 应用程序( 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产生应用程序在其中运行的应用程序池的名称。如此所述。

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

  3. System.Web.HttpContext.Current.User.Identity.Name产生 null 参考。

  4. System.Security.Principal.WindowsIdentity.GetCurrent().Name的工作方式与Environment.Username相同

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM