48

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

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

有谁能帮忙吗?或者知道我在哪里可以找到 Visual Studio 开发中心的设置,所以我可以检查 IIS 中的问题?

4

11 回答 11

54

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

我建议阅读 Scott Guthrie 的博客文章食谱:在 Intranet ASP.NET Web 应用程序中启用 Windows 身份验证

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

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

<authentication mode="Windows" />

<authorization>
   <deny users="?"/>
</authorization>
于 2011-03-28T12:27:38.323 回答
29

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

在此处输入图像描述

如果您在本地将其部署在 IIS 上,请确保启用本地计算机的“Windows 身份验证”功能并禁用“匿名身份验证”。

参考

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

于 2018-04-05T16:37:47.807 回答
8

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

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

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

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

4.在身份验证窗格中,选择匿名身份验证,然后单击禁用。 在此处输入图像描述

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

参考

于 2015-09-09T15:50:27.767 回答
7

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

但是,IISExpress.config 设置文件具有:

<windowsAuthentication enabled="false">

开发人员登录的用户帐户非常新,因此不太可能被编辑过。结果很简单,将其更改为 enabled=true ,然后一切正常运行。

于 2014-08-28T14:13:19.370 回答
7

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

脚步:

  1. 在你的机器上打开 iis
  2. 从应用程序池中选择您的应用程序
  3. 单击身份验证选项
  4. 禁用除 windows 身份验证以外的所有其他选项(应禁用匿名身份验证)

请检查这个并让我知道反馈。它对我有用。希望它也对你有用.. 在此处输入图像描述

于 2018-05-01T17:38:29.600 回答
5

此外,特别是如果您是开发人员,请确保您实际上连接到 IIS 服务器,而不是连接到 Visual Studio 附带的 IIS Express。如果您正在调试一个项目,有时甚至认为您已连接到 IIS 也很容易,而实际上您并没有。

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

于 2014-07-04T11:10:23.423 回答
2

仅当 IIS 服务器位于同一域中并且您的组策略中的安全设置允许时,浏览器才会检测您的用户名。

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

于 2009-10-15T16:10:24.043 回答
1

除了前面提到的所有明显原因之外,可能还有另一个原因:您没有在控制器顶部放置 Authorize 属性,如下所示:

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

至少这对我有用。

于 2019-03-06T08:18:29.763 回答
0

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

这可以在我确定曾经称为 PropertyPages 的内容中进行更改(不是右键单击 -> 属性)。选择网络项目

于 2017-05-05T13:46:56.283 回答
0

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

于 2020-06-24T16:41:43.660 回答
0

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

于 2021-04-28T12:07:33.790 回答