正如标题所示。
只需在我的HomeController中,我就有了:
string Username = User.Identity.Name;
为什么这个值总是空白?
我是否需要在web.config中放置一些特殊内容才能获得此值。我已经尝试过VS dev Web服务器以及Windows Server 2003 IIS服务器。
它必须是简单的东西,IIS中的服务器设置或其他东西,因为代码非常简单,似乎是引用此值的正确方法。
很多
答案 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上托管:
在解决方案资源管理器中单击您的项目以选择项目。
如果“属性”窗格未打开,请将其打开(F4)。
- 醇>
在项目的“属性”窗格中:
a)设置&#34;匿名身份验证&#34;到&#34;禁用&#34;。
b)设置&#34; Windows身份验证&#34;至 &#34;启用&#34; 强>在IIS 7或更高版本上托管:
打开IIS管理器并导航到您的网站。
在“功能视图”中,双击“身份验证”。
- 醇>
在“身份验证”页面上,选择“Windows身份验证”。如果Windows身份验证不是一个选项,您需要确保 Windows身份验证安装在服务器上。
在Windows上启用Windows身份验证:
a)在控制面板中打开&#34;程序和功能&#34;。 b)选择&#34;打开或关闭Windows功能&#34;。
c)导航到Internet信息服务&gt;万维网服务&gt;安全 并确保选中Windows身份验证节点。
在Windows Server上启用Windows身份验证:
a)在“服务器管理器”中,选择“Web服务器(IIS)”,然后单击“添加角色服务”。
b)导航到Web服务器&gt;安全 并确保选中Windows身份验证节点。
在“操作”窗格中,单击“启用”以使用Windows身份验证。
在Authentication页面上,选择Anonymous authentication。
- 醇>
在“操作”窗格中,单击“禁用”以禁用匿名身份验证。
答案 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();
}
}