C# 获取登录用户ASP.NET MVC的用户名

C# 获取登录用户ASP.NET MVC的用户名,c#,asp.net,asp.net-mvc,asp.net-mvc-4,authentication,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Authentication,我想获取登录用户名和域的用户名。 我获取它的代码位于控制器中: User.Identity.GetUserId() 在my web.config中: <system.web> <identity impersonate="false"/> <authentication mode="Windows" /> <compilation debug="true" targetFramework="4.6.1" /> &l

我想获取登录用户名和域的用户名。 我获取它的代码位于控制器中:

User.Identity.GetUserId()
在my web.config中:

<system.web>
    <identity impersonate="false"/>
    <authentication mode="Windows" />
    <compilation debug="true" targetFramework="4.6.1" />
    <httpRuntime />
    <pages controlRenderingCompatibilityVersion="4.0" />
</system.web>
在参考中,它只提供线程运行的标识,而不提供windows信息

EDIT1:我正在调试模式下测试我的程序。

试试这个

HttpContext.User.Identity.Name
另外,请确保您在web.config中的system.web中有授权标记,如下所示:

<authorization>
  <allow users="?" />
</authorization>

User.Identity.GetUserId()
是Microsoft.AspNet.Identity
的扩展方法。Identity与Windows Auth不兼容(您必须使用其中一个),因此我不确定您在这里实际执行的操作

一般来说,在Windows Auth中,
User.Identity.Name
的值将采用
{DOMAIN}\{User}
的形式。因此,如果您想要域和/或用户名,您可以在
\
上拆分该字符串,并获得您想要的部分


当谈到标识时,
User.Identity.Name
应该是
ApplicationUser.UserName
的值,但根据设置,它可能是
ApplicationUser.Email

也会返回一个空字符串。此获取另一个错误:“HTTP错误404.15-请求筛选模块被配置为拒绝查询字符串过长的请求。”授权设置只是拒绝匿名用户。它不应导致任何类型的问题。请参阅此链接,并确保任何操作都没有[AllowAnonymous]属性
<authorization>
  <allow users="?" />
</authorization>