当使用.net 4.5中的HttpClient进行基本身份验证时,我发现它发出了2个请求.
第一个失败,HTTP/1.1 401 Unauthorized,然后重新发送我们获得HTTP/1.1 200 OK的请求.
关于如何阻止它这样做的任何想法?
var credential = new NetworkCredential
{
UserName = username,
Password = password
}
var httpClientHandler = new System.Net.Http.HttpClientHandler
{
Credentials = credential
};
httpClient = new HttpClient(httpClientHandler, true)
{
BaseAddress = address
};
Run Code Online (Sandbox Code Playgroud)
尝试设置:
httpClientHandler.PreAuthenticate = true;
Run Code Online (Sandbox Code Playgroud)
我认为第一个请求仍然会得到初始的401,但是后续请求到相同的URI直到最后一个正斜杠应该总是发送没有401的认证头.
您可以尝试按照 Tobberoth 的答案进行设置HttpClientHandler.PreAuthenticate,尽管该文档表明它仅在第一个请求后才有帮助:
除第一个请求外,PreAuthenticate 属性指示是否将身份验证信息与后续请求一起发送到与特定 Uri 匹配的 Uri(直到最后一个正斜杠),而无需等待服务器质询。
它对于第一个请求没有帮助,但可能有助于减少此后的往返次数。
另一件要尝试的事情是将“授权”包含在HttpClient.DefaultRequestHeaders. 如果这有效的话我会有点惊讶,但至少值得尝试。