Asp.net 使用窗体身份验证时获取Windows用户ID

Asp.net 使用窗体身份验证时获取Windows用户ID,asp.net,.net,asp.net-mvc,iis-7,forms-authentication,Asp.net,.net,Asp.net Mvc,Iis 7,Forms Authentication,我正在开发一个ASP.NET MVC应用程序,它运行在我们的内部网上。我们正在使用表单身份验证,但是设置的用户名将与Active Directory用户名相同。我正试图找到一种方法,用Windows用户名预先填充登录用户名字段,但找不到访问当前Windows用户标识的方法 System.Environment.UserDomainName返回“IIS应用池” System.Security.Principal.WindowsPrincipal.Current.Identity返回GenericE

我正在开发一个ASP.NET MVC应用程序,它运行在我们的内部网上。我们正在使用表单身份验证,但是设置的用户名将与Active Directory用户名相同。我正试图找到一种方法,用Windows用户名预先填充登录用户名字段,但找不到访问当前Windows用户标识的方法

System.Environment.UserDomainName
返回“IIS应用池”

System.Security.Principal.WindowsPrincipal.Current.Identity
返回GenericEntity

HttpContext.Request.LogonUserIdentity.Name
返回“NT AUTHORITY\IUSR”

我不想验证Windows用户或以Windows用户身份登录网站,我只想读取用户名。在使用窗体身份验证而不是Windows身份验证时,有什么方法可以做到这一点吗?

请尝试以下方法:

在web.config中

<identity impersonate="true" />
<authentication mode="Forms">
     <forms loginUrl="./WebLogin.aspx" defaultUrl="./default.aspx" timeout="12" path="/" name=".ASPXFORMSAUTH" />
</authentication>

这对我来说很好。

在IIS中关闭Windows身份验证,然后如果一切都可行

我认为将此
添加到网络配置(就在
位下方,而不是内部!)应该可以满足您的需要。那么控制器应该有一个可以查询的
User
属性,而不是上面的代码…我刚刚尝试了它,得到了Principal.GenericEntity,这不就是IIS服务器运行时的用户名吗?
string windowsName = WindowsPrincipal.Current.Identity.Name;
//OR
string windowsName = Thread.CurrentPrincipal.Identity.Name;