HttpClient.GetAsync with network credentials

本文关键字:credentials network with GetAsync HttpClient | 更新日期: 2023-09-27 18:32:07

我目前正在使用HttpWebRequest来获取网站。我想使用 await 模式,该模式不适用于HttpWebRequests.我找到了类HttpClient,这似乎是新的 Http worker 类。我正在使用HttpClient.GetAsync(...)来查询我的网页。但是我缺少添加ClientCredentials的选项,例如HttpWebRequest.Credentials.有没有办法提供HttpClient身份验证信息?

HttpClient.GetAsync with network credentials

可以将带有凭据的 HttpClientHandler 类的实例传递给 HttpClient 构造函数:

using (var handler = new HttpClientHandler { Credentials = ... })
using (var client = new HttpClient(handler))
{
    var result = await client.GetAsync(...);
}

您不应该每次都释放 HttpClient,而应该在更长的时间段(应用程序的生存期)内使用它(或一小群客户端)。您也不需要处理程序,但您可以更改默认标头。

创建客户端后,可以设置其默认请求标头进行身份验证。下面是基本身份验证的示例:

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", "username:password".ToBase64());

ToBase64() 表示将字符串转换为 base64 编码的帮助程序函数。