HttpContext.Current.User.Identity.Name为Empty
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HttpContext.Current.User.Identity.Name为Empty相关的知识,希望对你有一定的参考价值。
我有一个Silverlight应用程序(使用MVC),当我在Visual Studio中构建时,使用Visual Studio开发中心,没有问题,HttpContext.Current.User.Identity.Name
有一个值
但是,当我使用与IIS 7.5相同的项目(我正在使用Windows 7)时,HttpContext.Current.User.Identity.Name
保持空白
有谁可以提供帮助?或者知道我在哪里可以从visual studio开发中心找到设置,所以我可以检查IIS中有什么问题?
这几天我一直在努力解决这个问题。
我建议阅读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>
这些可能会解决问题(它对我有用)。在IIS Express中,更改项目属性值“匿名身份验证”和“Windows身份验证”。为此,在选择项目时,按F4,然后更改这些属性。
如果您在本地将其部署在IIS上,请确保已启用本地计算机“Windows身份验证”功能并禁用“匿名身份验证”。
参考
https://grekai.wordpress.com/2011/03/31/httpcontext-current-user-identity-name-is-empty/
此外,特别是如果您是开发人员,请确保您实际上是连接到IIS服务器而不是Visual Studio附带的IIS Express。如果你正在调试一个项目,那么当你实际上不是这样时,有时候认为你已经连接到IIS就更容易了。
即使您在IIS上启用了Windows身份验证并禁用了匿名身份验证,这也不会对Visual Studio模拟产生任何影响。
我最近也有这个问题。使用新客户端,尝试使用Windows身份验证使用IISExpress从Visual Studio运行旧的Web表单应用程序。对我来说,web.config已正确配置
但是,IISExpress.config设置文件具有:
<windowsAuthentication enabled="false">
开发人员登录的用户帐户非常新,因此不太可能被编辑。简单修复它结果,将其更改为enabled = true,然后全部按原样运行。
除了“回答2011年3月28日12:27 Bryan Bedard”
如果解决方案不起作用,您必须在iss manager中启用Windows身份验证。怎么做:
1.从“运行”对话框中启动IIS管理器:在“开始”菜单上,单击“所有程序”,单击“附件”,然后单击“运行”。在“打开”框中,键入inetmgr,然后单击“确定”。
2.在“连接”窗格中,展开服务器名称,展开“站点”,然后转到要配置的层次结构窗格中的级别,然后单击“网站”或“Web应用程序”。 3.滚动到“主页”窗格中的“IIS”部分,然后双击“身份验证”。
4.在“身份验证”窗格中,选择“匿名身份验证”,然后单击“禁用”。
- 在“身份验证”窗格中,选择Windows身份验证,然后单击“启用”。
如果IIS服务器位于同一域中,并且组策略中的安全设置允许,浏览器将仅检测您的用户名。
否则,您必须为其提供凭据,但如果它不在同一个域中,则无法对您进行身份验证。
正如@PaulTheCyclist所说,如果默认情况下启用IISExpress匿名身份验证,则会禁用Windows身份验证。
这可以在我确定曾经被称为PropertyPages(而不是右键单击 - >属性)中进行更改。选择Web项目
除了Windows身份验证之外,禁用iis身份验证选项卡中的所有其他选项解决了我的问题请检查..
脚步:
- 在您的机器中打开iis
- 从应用程序池中选择您的应用程序
- 单击身份验证选项
- 禁用除Windows身份验证之外的所有其他选项(应禁用匿名身份验证)
除了前面提到的所有明显的原因之外,可能还有另一个原因:你没有在你的控制器上放置一个Authorize属性,就像那样:
[Authorize(Roles = "myRole")]
[EnableCors(origins: "http://localhost:8080", headers: "*", methods: "*", SupportsCredentials = true)]
public class MyController : ApiController
至少这对我有用。
以上是关于HttpContext.Current.User.Identity.Name为Empty的主要内容,如果未能解决你的问题,请参考以下文章
HttpContext.Current.User.Identity.Name 为空
HttpContext.Current.User.Identity.Name 每次都是空的
将 HttpContext.Current.User 与异步等待一起使用的正确方法
HttpContext.Current.User.Identity.Name为Empty
ASP.NET C#中怎么让 httpcontext.current.user.identity.name 获取为自定义的值
WindowsIdentity winId = (WindowsIdentity)HttpContext.Current.User.Identity;如何使这个演员工作;目前它失败了