首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.net中的HttpClient在NetworkCredentials中提供用户名和密码时发出2个请求

.net中的HttpClient在NetworkCredentials中提供用户名和密码时发出2个请求
EN

Stack Overflow用户
提问于 2013-11-28 15:21:17
回答 4查看 4.7K关注 0票数 7

在使用.net 4.5中的HttpClient执行基本身份验证时,我发现它发出了2个请求。

有什么办法阻止它这么做吗?

代码语言:javascript
复制
var credential = new NetworkCredential 
{ 
    UserName = username, 
    Password = password 
}
var httpClientHandler = new System.Net.Http.HttpClientHandler
{
    Credentials = credential
};
httpClient = new HttpClient(httpClientHandler, true)
{
    BaseAddress = address
};
EN

回答 4

Stack Overflow用户

发布于 2013-11-28 15:23:18

尝试设置以下内容:

代码语言:javascript
复制
httpClientHandler.PreAuthenticate = true;

我认为第一个请求仍然会得到初始的401,但是到最后一个正斜杠的相同URI的后续请求应该总是发送不带401的身份验证头。

票数 5
EN

Stack Overflow用户

发布于 2013-11-28 15:22:55

你可以尝试按照托贝罗斯的回答来设置HttpClientHandler.PreAuthenticate,尽管文档表明它只有在第一个请求之后才会有帮助:

除第一个请求外,PreAuthenticate属性指示是否将身份验证信息与后续请求一起发送到与特定Uri匹配的Uri,直到最后一个正斜杠,而不等待服务器质询。

它不会对第一个请求有帮助,但它可能有助于减少之后的往返次数。

另一件可以尝试的事情是在HttpClient.DefaultRequestHeaders中包含“授权”。如果成功了,我会有点惊讶,但至少值得一试。

票数 1
EN

Stack Overflow用户

发布于 2014-01-29 06:26:16

在寻找另一个NetworkCredentials问题的答案时,我偶然发现了两个问题,它们的答案可能就是您正在寻找的答案:

Here回答说,至少WebRequest有默认行为,即只在获得401后发送凭据。而且,看起来解决方案可能是使用CredentialCache。

我不确定CredentialCache是否可以与HttpClient一起使用,但如果不能,您可以切换到WebRequest或WebClient,或者这些信息只是将您带到了另一个解决方案的道路上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20260013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档