HttpContext.Current.User.Identity.Name为Empty

时间:2009-10-15 08:29:05

标签: visual-studio iis httpcontext

我有一个Silverlight应用程序(使用MVC),当我在Visual Studio中构建时,使用Visual Studio开发中心,没有问题,HttpContext.Current.User.Identity.Name有一个值

但是当我在IIS 7.5中使用相同的项目时(我使用的是Windows 7),HttpContext.Current.User.Identity.Name保持空白

任何可以提供帮助的人?或者知道我在哪里可以找到视觉工作室开发中心的设置,所以我可以检查IIS中有什么问题?

11 个答案:

答案 0 :(得分:44)

过去几天我一直在努力解决这个问题。

我建议阅读Scott Guthrie的博文Recipe: Enabling Windows Authentication within an Intranet ASP.NET Web application

对我来说问题是虽然我在IIS中启用了Windows身份验证,而且我在web.config的<authentication mode="Windows" />部分中有<system.web>,但我没有阻止匿名访问。最后一部分是关键。 您需要阻止匿名访问,以确保浏览器发送凭据。

您可以在控制面板中配置IIS,以便您的站点(或计算机)使用Windows身份验证并拒绝匿名访问,或者您可以将以下内容添加到system.web部分的web.config中:

<authentication mode="Windows" />

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

答案 1 :(得分:10)

这些可能会解决问题(它对我有用)。在IIS Express中更改项目属性值,&#34;匿名身份验证&#34;和&#34; Windows身份验证&#34;。为此,在选择项目时,按F4键,然后更改这些属性。

enter image description here

如果您在本地将其部署在IIS上,请确保本地计算机&#34; Windows身份验证&#34;功能已启用,&#34;匿名身份验证&#34;被禁用。

参阅

https://grekai.wordpress.com/2011/03/31/httpcontext-current-user-identity-name-is-empty/

答案 2 :(得分:5)

除了“2011年3月28日12:27 Bryan Bedard回答”

如果解决方案不起作用,您必须在iss manager中启用Windows身份验证。 怎么做:

1.从“运行”对话框中启动IIS管理器: 在“开始”菜单上,单击“所有程序”,单击“附件”,然后单击“运行”。 在“打开”框中,键入inetmgr,然后单击“确定”。

2.在“连接”窗格中,展开服务器名称,展开“站点”,然后转到要配置的层次结构窗格中的级别,然后单击“网站”或“Web应用程序”。 3.滚动到“主页”窗格中的“IIS”部分,然后双击“身份验证”。

4.在“身份验证”窗格中,选择“匿名身份验证”,然后单击“禁用”。 enter image description here

  1. 在“身份验证”窗格中,选择“Windows身份验证”,然后单击“启用”。
  2. Reference

答案 3 :(得分:4)

此外,特别是如果您是开发人员,请确保您实际上是连接到IIS服务器而不是Visual Studio附带的IIS Express。如果你正在调试一个项目,那么当你事实上没有时,有时候认为你已经连接到IIS有点容易。

即使您已在IIS上启用了Windows身份验证并禁用了匿名身份验证,这也不会对您的Visual Studio模拟产生任何影响。

答案 4 :(得分:4)

我最近也遇到过这个问题。使用新客户端,尝试使用Windows身份验证使用IISExpress从Visual Studio运行旧的Web表单应用程序。 对我来说,web.config已正确配置

但是,IISExpress.config设置文件包含:

<windowsAuthentication enabled="false">

开发人员登录的用户帐户非常新,所以unlikley已经编辑过了。 简单修复它结果,将其更改为enabled = true,然后全部按原样运行。

答案 5 :(得分:1)

如果IIS服务器位于同一个域中且组策略中的安全设置允许,浏览器将仅检测您的用户名。

否则您必须提供凭据,但如果它不在同一个域中,则无法对您进行身份验证。

答案 6 :(得分:0)

正如@PaulTheCyclist所说,如果默认启用IISExpress匿名身份验证,则会禁用Windows身份验证。

这可以在我确定曾被称为PropertyPages(不是右键单击 - &gt;属性)中进行更改。选择Web项目

答案 7 :(得分:0)

禁用除了Windows身份验证之外的iis身份验证选项卡中的所有其他选项解决了我的问题。 请检查..

步骤:

  1. 在您的计算机中打开iis
  2. 从应用程序池中选择您的应用程序
  3. 点击身份验证选项
  4. 禁用除Windows身份验证之外的所有其他选项(应禁用匿名身份验证)
  5. 请检查此信息,并告诉我相关信息。它对我有用。希望它也适合你.. enter image description here

答案 8 :(得分:0)

除了前面提到的所有显而易见的原因之外,还有另一个原因:您没有在控制器的顶部放置Authorize属性,就像这样:

[Authorize(Roles = "myRole")]
[EnableCors(origins: "http://localhost:8080", headers: "*", methods: "*", SupportsCredentials = true)]
public class MyController : ApiController

至少这对我有用。

答案 9 :(得分:0)

尝试在IIS中启用基本身份验证并禁用其他身份验证,然后尝试启动应用程序。该应用程序将要求Windows凭据。输入相同的名称,应用程序应该可以在HttpContext.Current.User.Identity.Name下获取名称。

答案 10 :(得分:0)

我在创建项目时未设置身份验证模式时遇到了这个问题。 所以它在创建一个新项目时工作,在初始设置中将身份验证设置为 Windows 模式。