【问题标题】:Windows Authentication - Getting current user nameWindows 身份验证 - 获取当前用户名
【发布时间】:2012-01-23 07:12:16
【问题描述】:

在我的 MVC 应用程序中,如果当前登录用户是某个 x 人,我想在 cshtml 文件中呈现一个表。我正在使用 Windows 身份验证,并且在 web.config 文件中进行了以下更改。

<authentication mode="Windows">
      </authentication>

在我的控制器中,当我尝试访问当前用户名时,我没有得到任何用户名。我正在尝试以下方法:

ViewBag.LogInUserName = Request.RequestContext.HttpContext.User.Identity.Name;

上面这行以前工作过。但我不知道现在怎么了。我现在也在 IIS 上托管了我的应用程序。

【问题讨论】:

    标签: asp.net asp.net-mvc-3 windows-authentication


    【解决方案1】:

    您需要将[Authorize] 属性放在您的控制器上。

    您可以在控制器中使用User.Identity.Name

    [Authorize]
    public class YourController : Controller
    {
    
        public ActionResult SomeAction()
        {
            var userName = User.Identity.Name;
        }
    }
    

    【讨论】:

    • 感谢您的帮助。你能告诉我如何做到这一点吗?
    • 我刚刚更改了我的 Web 项目属性以使用 Asp.Net 开发服务器。现在我可以检索当前的登录用户名。所以问题是当我在 IIS 上托管我的 web 项目时。有什么想法吗?
    • @Jash:上面的代码应该可以在 Windows 身份验证中正常工作(即使打开了匿名访问)。您在 IIS 中尝试过吗?
    • 嗨,我只是添加了 Authorize 属性,但之后它抛出 4o1 unathorized 错误。
    • 如果您删除 [Authorize],那么 401.0 - Unauthorized 就会消失,您可以获得像 System.Security.Principal.WindowsIdentity.GetCurrent().Name 这样的用户名
    【解决方案2】:

    查看网络项目的属性,特别是:

    1. 匿名身份验证 - 设置为“禁用”
    2. Windows 身份验证 - 设置为“启用”

    默认情况下,这些设置与您可能正在寻找的相反。

    (图片来源于MSDN

    【讨论】:

      【解决方案3】:

      有点晚了,但这可能会在未来为其他人服务。

      在将我的站点部署到新的 IIS 服务器后,我遇到了同样的问题,并且启用了匿名身份验证,因此请确保禁用匿名身份验证并且它应该可以工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-14
        • 1970-01-01
        • 1970-01-01
        • 2020-03-19
        相关资源
        最近更新 更多