我正在开发 MVC 3 Intranet 应用程序(Windows 身份验证)。用户登录后,应用程序必须显示用户的个人资料页面。为此,必须将登录用户的用户名作为 Global.asax.cs 中以下路由中的路由参数传入。
routes.MapRoute(
"Initial",
"{controller}/{action}/{emailAlias}", // URL with parameters
new { controller = "Home", action = "Home", userId = **<USERNAME>**}
);
在这里,我使用了一些替代方案。
一开始我用的是Environment.Username
。这在开发中效果很好。但发布后就不行了。因为那时Environment.Username
生成应用程序运行所在的应用程序池的名称。如上所述here.
Controller.User.Identity.Name
用于在控制器中获取所需的用户名,在发布前和发布后效果良好。但它不能在 Global.asax.cs 上下文中使用。
System.Web.HttpContext.Current.User.Identity.Name
产生空引用。
System.Security.Principal.WindowsIdentity.GetCurrent().Name
工作原理有点像Environment.Username
我确信现在很容易看出我是一个菜鸟。也许我错过了一些明显的事情。如果是这样,请指出,或者请告诉我一个简单的解决方案,提前致谢。
global.asax 代码应该在应用程序启动(和关闭)时运行,并且当时没有任何会话或用户(因此名称global)。为什么路由中需要用户名?你应该只使用User.Identity.Name
在控制器的代码中识别用户,而不是依赖将其作为参数获取。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)