我有一个ASP.NET MVC 5 Web应用程序,该应用程序在带有IIS Express的本地开发环境中的VS2012中运行。最近,我使用相同的代码库从VS2012迁移到VS2015。
我要实现的目标:我希望我的应用程序能够在VS2015中以及使用IIS7的部署服务器上成功运行
我当前的代码:
身份验证模式:表格
授权:允许匿名用户
“ Request.ServerVariables [” LOGON_USER“]”返回正确的用户详细信息
但是,当我尝试在VS2015中使用IIS Express执行相同的代码时,Request.ServerVariables [“ LOGON_USER”]返回一个空字符串
但是相同的代码在带有IIS7的部署服务器上可以正常工作
我在LoginController.cs中的原始代码
var userIdentity = new GenericIdentity(ControllerContext.HttpContext.Request.ServerVariables["LOGON_USER"]);
if (userIdentity.IsAuthenticated)
{
..............
}
Web.config中的原始代码
<authentication mode="Forms">
<forms loginUrl="~/Login/Login" timeout="2800"/>
</authentication>
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
为解决此问题,我尝试了以下
尝试1: 更改了我的登录控制器
var userIdentity = new GenericIdentity(ControllerContext.HttpContext.Request.ServerVariables["LOGON_USER"]);
到
var userIdentity = new GenericIdentity(ControllerContext.HttpContext.Request.LogonUserIdentity.Name)
AND
尝试2:
var userIdentity = new GenericIdentity(System.Security.Principal.WindowsIdentity.GetCurrent().Name);
结果: 对于try1和try2,userIdentity.IsAuthenticated均返回true
两者在本地都可以正常工作,但是将LoginController.cs中修改后的代码部署到服务器(IIS7服务器)时不起作用。
尝试3: 在Web应用程序中,web.config禁用了匿名访问。
<authorization>
<deny users = "?" /> <!-- This denies access to the Anonymous user -->
<allow users ="*" /> <!-- This allows access to all users -->
</authorization>
但是我保持LoginController.cs代码与原始
相同var userIdentity = new GenericIdentity(ControllerContext.HttpContext.Request.ServerVariables["LOGON_USER"]);
结果: 即使这样也不起作用。 “ Request.ServerVariables [” LOGON_USER“]”返回空字符串
当我将IDE从VS2012切换到VS2015时,我开始遇到此问题。
无论我尝试什么,它都可以在带有IIS Express的本地VS2015上或在我的部署服务器上正常工作。
我希望进行修复,使我的登录功能可以在具有Vs2015的本地Dev Env上以及部署服务器上运行,以便所有Dev都可以迁移到使用VS2015进行该项目。
谢谢!