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

4

我想获取登录用户名和域名的用户名。

我的代码在控制器中:

User.Identity.GetUserId()

我的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用户名信息?

其他说明:在我的研究过程中,我也发现了以下内容:

Environment.UserDomainName +  @"\" + Environment.UserName

参考这个链接,它只提供了线程运行时的身份信息,并没有提供Windows信息。

编辑1:我正在调试我的程序。

2个回答

3

试试这个

HttpContext.User.Identity.Name

请确保在 web.config 的 system.web 部分中有授权标记,如下所示:
<authorization>
  <allow users="?" />
</authorization>

在IIS中,确保您禁用匿名身份验证并启用Windows身份验证,以便在同一应用程序中使用。请参考以下截图:enter image description here

也返回一个空字符串 - yesfabime
这给我带来了另一个错误:"HTTP 错误 404.15 - 请求筛选模块被配置为拒绝查询字符串过长的请求。" - yesfabime
授权设置只是拒绝匿名用户。它不应该引起任何问题。请参阅此链接https://dev59.com/vWgu5IYBdhLWcg3wCCpK。还要确保您没有在任何操作上使用[AllowAnonymous]属性https://dev59.com/rV4b5IYBdhLWcg3w9Fyr。 - Prashant Mohite

0

User.Identity.GetUserId() 是来自 Microsoft.AspNet.Identity 的扩展方法。Identity 与 Windows Auth 不兼容(您必须使用其中之一),因此我不确定您实际在做什么。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接