【发布时间】:2013-08-09 01:05:32
【问题描述】:
我收到 401 未经授权的错误。我的网络服务是用 mvc 编写的。在 IIS 中配置为使用 windows 身份验证。 下面是提琴手的屏幕截图
当我从浏览器中点击 URL 时,它会弹出一个窗口来输入用户名和密码。 如何避免弹出窗口?
我正在从另一个窗口服务调用这个 web api。
【问题讨论】:
标签: c# iis-7 asp.net-web-api http-status-code-401
我收到 401 未经授权的错误。我的网络服务是用 mvc 编写的。在 IIS 中配置为使用 windows 身份验证。 下面是提琴手的屏幕截图
当我从浏览器中点击 URL 时,它会弹出一个窗口来输入用户名和密码。 如何避免弹出窗口?
我正在从另一个窗口服务调用这个 web api。
【问题讨论】:
标签: c# iis-7 asp.net-web-api http-status-code-401
您可以指定用户名和密码作为 URL 的一部分:
http://username:password@www.example.com/foo/bar/baz
注意:仅仅因为你可以并不意味着你应该。虽然这可能是测试事物的临时解决方案,但我不建议在生产中这样做。在过去,我们就是这样做的。但正如@DiskJunky 指出的那样,“几乎任何人/任何人都可以轻松看到 URL”,其中包括您的浏览器历史记录、服务器日志,甚至可能更糟。
【讨论】:
如果您使用的是 WebClient,则需要设置凭据。你是如何从 windows 服务调用 web api 的?
【讨论】:
我在 web config 中添加了以下行来解决问题并且它有效。
<security>
<authorization>
<add accessType="Allow" users="*" />
</authorization>
</security>
【讨论】:
Web.config的<system.webServer>部分
我怀疑这两个 Web 服务可能托管在同一台服务器上。在这种情况下,问题可能是由环回检查引起的。为了测试,请尝试在不使用完全限定域名的情况下引用该服务并查看它是否有效。如果是,请使用以下步骤指定本地计算机上的主机名。
方法 1:指定主机名(如果需要 NTLM 身份验证,首选方法) (https://support.microsoft.com/en-us/help/926642/)
要指定映射到环回地址并可以连接到您计算机上的网站的主机名,请执行以下步骤:
**已编辑为答案的形式,并包含来自参考链接的详细步骤
【讨论】:
我的 2 美分:在部署 Web 应用程序时请求图像时,我遇到了一个被 HTTP 401 困扰的场景。我们使用 WiX 作为我们的包装和安装解决方案。 在这种特定情况下,安装程序没有打包映像,因此部署的实例上也不存在该路径。
有人可能想知道为什么在预期 404(未找到)的情况下会抛出 401 - 我的理解是,因为我们的路径不在根目录下但是像 root/content/images/image.png 之类的东西,我提出了一个匿名请求,我得到了 401(未经授权),因为我无权浏览目录。我通过在我的请求中添加一个 Authorization 标头来确认这一点,然后正如预期的那样,我得到了一个 404。
【讨论】: