我找到了解决此问题的方法,但是当我使用空授权 header 发出 GET 请求时,我有一个带有服务器的客户端抛出 400 错误。当没有 Authorization header 时,它工作得很好。我想解释\或解决这个问题,而不是仅仅说我解决了它。
我的旧代码是这样的:
request.Headers["Authorization"] = _Request.ServerVariables["HTTP_AUTHORIZATION"] ?? string.Empty;
request.GetResponse();
我切换到这个:
if (_Request.ServerVariables["HTTP_AUTHORIZATION"] != null)
{
request.Headers["Authorization"] = _Request.ServerVariables["HTTP_AUTHORIZATION"];
}
request.GetResponse();
最佳答案
您可能希望看到这个问题:What is the HTTP_AUTHORIZATION environment variable?
本质上,当您传递 Authorization header 时,服务器应该使用它来测试用户是否有权访问底层资源。通过发送带有空白值的 header ,您实际上是在告诉服务器使用空白凭据……这是失败的。
当您不发送授权 header 时,服务器会尝试使用它的资源默认凭据,这会通过。
这应该是这样工作的:
- 客户请求资源。
- 服务器尝试传送资源。如果需要额外的授权,则会发送回 401 header 和 WWW-Authenticate header 。
- 客户端提示用户输入凭据并使用授权 header 重新提交请求。
- 服务器验证授权,如果成功,则交付资源。如果不成功,它将再次发送 401。
只有在远程服务器使用 401 和 WWW-Authenticate header 响应初始请求时,您的代码才应发送 Authorization header 。否则不应发送该 header 。
更多信息请访问:http://en.wikipedia.org/wiki/Basic_access_authentication
关于c# - 空授权 header 会导致 400 错误。 IIS 7.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19968110/