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

时间:2009-07-01 06:38:43

标签: asp.net-mvc iis

正如标题所示。

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

string Username = User.Identity.Name;

为什么这个值总是空白?

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

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

很多

4 个答案:

答案 0 :(得分:13)

当然是交配。您需要通过网站进行身份验证。这是用于身份验证的名称。

您正在验证,对吧?

这不是设置等。

如果您正在使用股票标准ASP.NET MVC模板(如果我的记忆正确地为我服务),请单击“登录”链接。

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

所以你所追求的是Windows身份验证。 quick google search提出了this post。它非常有用(虽然有点旧,但仍然相关)..检查出来。

使用Windows身份验证的MVC代码找到a better post。请检查一下。

重要的配置设置是......

...
 <system.web>
  ...
  <authentication mode="Windows"/>
  ...
 </system.web>
 ...

答案 1 :(得分:12)

如果您想使用Windows身份验证,仅仅添加

是不够的
...
 <system.web>
  ...
  <authentication mode="Windows"/>
  ...
 </system.web>
 ...

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

见下文:

  

在IIS Express上托管:

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

  2.   
  3. 如果“属性”窗格未打开,请将其打开(F4)。

  4.   
  5. 在项目的“属性”窗格中:
       a)设置&#34;匿名身份验证&#34;到&#34;禁用&#34;。
      b)设置&#34; Windows身份验证&#34;至   &#34;启用&#34;

  6.         

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

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

    2.   
    3. 在“功能视图”中,双击“身份验证”。

    4.   
    5. 在“身份验证”页面上,选择“Windows身份验证”。如果Windows身份验证不是一个选项,您需要确保   Windows身份验证安装在服务器上。

           

      在Windows上启用Windows身份验证:

    6.         

      a)在控制面板中打开&#34;程序和功能&#34;。   b)选择&#34;打开或关闭Windows功能&#34;。

           

      c)导航到Internet信息服务&gt;万维网服务&gt;安全            并确保选中Windows身份验证节点。

           

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

           

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

           

      b)导航到Web服务器&gt;安全            并确保选中Windows身份验证节点。

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

      2.   
      3. 在Authentication页面上,选择Anonymous authentication。

      4.   
      5. 在“操作”窗格中,单击“禁用”以禁用匿名身份验证。

      6.   

答案 2 :(得分:8)

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

<!--
    <authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="2880" />
    </authentication>
-->

替换为Windows身份验证标记。

<authentication mode="Windows" />

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

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

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

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

答案 3 :(得分:6)

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

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