4

我想使用 Windows 身份验证检查用户的登录名。我有这个作为我的控制器的构造函数:

public class HomeController : BaseController
{
    public string UserIdentityName;

    public HomeController()
    {
        UserIdentityName = System.Web.HttpContext.Current.User.Identity.Name;// HttpContext.Current.User.Identity.Name;
    }
}

但是 UserIdentityName 返回空字符串...

我的 web.config 中也有这个:

<authentication mode="Windows" />   

任何的想法?

4

4 回答 4

12

在解决方案资源管理器窗格中,选择 Web Project 并点击 F4。(不是右键单击+属性,那是不同的)

在属性窗格中设置:
Windows 身份验证:启用
匿名身份验证:禁用

在 Web.config 中:<authentication mode="Windows"></authentication>

获取用户名:

HttpContext.Current.User.Identity.Name OR User.Identity.Name

运行你的项目,Happy Days!

于 2013-01-15T11:57:57.930 回答
5

不要尝试在控制器的构造函数中访问任何与 HttpContext 相关的内容。您应该访问它的最早阶段是Initialize方法或在控制器操作中。

例如:

[Authorize]
public ActionResult Index()
{
    string user = User.Identity.Name;
    ...
}

还要确保在 Web 服务器上启用了 Windows 身份验证 (NTLM)。

于 2012-09-23T14:02:23.127 回答
2

伙计们,

如果您在 IISExpress 中运行。确保以下设置:

在 web.config

<authentication mode="Windows"/>
<authorization>
  <deny users="?"/>
</authorization>   

在记事本中打开 projectName.csproj 并更正以下设置:

<IISExpressAnonymousAuthentication>disabled</IISExpressAnonymousAuthentication>
<IISExpressWindowsAuthentication>enabled</IISExpressWindowsAuthentication>

<UseIIS>True</UseIIS>
于 2013-12-09T13:11:19.987 回答
1

尝试添加:

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

拒绝匿名用户的访问。

于 2012-09-23T14:03:32.907 回答