ASP.Net MVC中的User.Identity.Name空白

Aar*_*ron 22 iis asp.net-mvc

正如标题所示.

只需在我的HomeController中,我就有:

string Username = User.Identity.Name;
Run Code Online (Sandbox Code Playgroud)

为什么这个值总是空白?

我必须在web.config中放置一些特殊内容才能获得此值.我已经尝试过VS dev web服务器以及Windows Server 2003 IIS服务器.

它必须是简单的东西,在IIS中的服务器设置或其他东西,因为代码是如此简单,似乎是引用此值的正确方法.

多谢

Pur*_*ome 13

当然是伴侣.您需要通过网站进行身份验证.这是用于身份验证的名称.

你在验证,对吧?

这不是一个设置,等等.

如果您使用的是库存标准ASP.NET MVC模板(如果我的内存为我提供服务),请单击LOG IN链接.

UPDATE(已发布已添加更多信息/评论)

那么你所追求的是Windows身份验证.一个快速谷歌搜索想出了这个职位.它非常有用(虽然有点旧,但仍然相关)..检查出来.

使用Windows身份验证的MVC代码找到了更好的帖子.检查一下.

配置设置很重要,是......

...
 <system.web>
  ...
  <authentication mode="Windows"/>
  ...
 </system.web>
 ...
Run Code Online (Sandbox Code Playgroud)

  • @Aaron- User.Identity在ASP.NET Web窗体和ASP.NET MVC中的工作方式相同. (2认同)

Pri*_*cey 12

如果您想要使用Windows身份验证,仅仅添加是不够的

...
 <system.web>
  ...
  <authentication mode="Windows"/>
  ...
 </system.web>
 ...
Run Code Online (Sandbox Code Playgroud)

您还需要检查MVC项目的自述文件说明,尤其是在IIS Express中运行并使用Visual Studio 2012时.

见下文:

在IIS Express上托管:

  1. 在解决方案资源管理器中单击您的项目以选择项目.

  2. 如果"属性"窗格未打开,请将其打开(F4).

  3. 在项目的"属性"窗格中:
    a)将"匿名身份验证"设置为"已禁用".
    b)将"Windows身份验证"设置为"已启用".

在IIS 7或更高版本上托管:

  1. 打开IIS管理器并导航到您的网站.

  2. 在"功能视图"中,双击"身份验证".

  3. 在Authentication页面上,选择Windows身份验证.如果Windows身份验证不是一个选项,则需要确保在服务器上安装了Windows身份验证.

    要在Windows上启用Windows身份验证:

a)在控制面板中打开"程序和功能".b)选择"打开或关闭Windows功能".

c)导航到Internet信息服务>万维网服务>安全性,并确保选中Windows身份验证节点.

要在Windows Server上启用Windows身份验证:

a)在服务器管理器中,选择"Web服务器(IIS)",然后单击"添加角色服务".

b)导航到Web Server> Security并确保选中Windows身份验证节点.

  1. 在"操作"窗格中,单击"启用"以使用Windows身份验证.

  2. 在"身份验证"页面上,选择"匿名身份验证

  3. 在"操作"窗格中,单击"禁用"以禁用匿名身份验证.


ano*_*ous 8

如果您不希望对每个控制器或操作进行授权,则可以在web.config文件中进行一揽子授权.只要您使用Windows身份验证,这应该可以正常工作.如果允许ASP.NET控制身份验证,则无需配置任何IIS设置.然后它应该适用于您运行的任何Web服务器.我不知道或假设你到目前为止尝试了什么,我会尽力在答案中完成.首先注意web.config中的表单身份验证标记.以下所有设置都放在system.web配置部分中.

<!--
    <authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="2880" />
    </authentication>
-->
Run Code Online (Sandbox Code Playgroud)

替换为Windows身份验证标记.

<authentication mode="Windows" />
Run Code Online (Sandbox Code Playgroud)

然后添加授权标记以拒绝匿名用户的访问.如果用户正在使用Internet Explorer并从Intranet区域进行连接,则IE会自动登录该用户.但是,如果用户从Internet区域进行连接,为了安全起见,IE仍将显示登录框.但这些是可以从IE设置的选项.

<authorization>
    <deny users="?" />
</authorization>
Run Code Online (Sandbox Code Playgroud)

未经授权单独设置身份验证模式不会强制用户在ASP.NET中进行身份验证.如果你想从IIS控制安全性,我对IIS设置无能为力,但我知道你基本上可以禁用基本身份验证,然后启用集成Windows身份验证,然后禁用匿名登录帐户,这将获得相同或更好的结果.

我目前正在研究一个MVC项目,我用我的项目测试了上述设置并且它可以工作.您不需要Authorize属性,因为我们在配置中有授权标记.我希望这对你有所帮助,而不是另一个-1.


ano*_*ous 7

您是否已将Authorize属性附加到您的操作或控制器?

public class HomeController : Controller {
    [Authorize]
    public ActionResult Index() {
         string userName = User.Identity.Name;
         return View();
    }
}
Run Code Online (Sandbox Code Playgroud)