C# 使用HttpClientHandler创建Httpclient扩展
我正在尝试创建自己的简单httpclient扩展。 我要问的是,我是做错了还是做对了。因为我还在学习和掌握Httpclient。这就是为什么我需要你的建议 以下是我所做的:C# 使用HttpClientHandler创建Httpclient扩展,c#,C#,我正在尝试创建自己的简单httpclient扩展。 我要问的是,我是做错了还是做对了。因为我还在学习和掌握Httpclient。这就是为什么我需要你的建议 以下是我所做的: private static HttpClientHandler addHandlers = new HttpClientHandler { UseProxy = Proxy.UseProxy, Proxy = Proxy.UseProxy ? new WebProxy($&
private static HttpClientHandler addHandlers = new HttpClientHandler
{
UseProxy = Proxy.UseProxy,
Proxy = Proxy.UseProxy ? new WebProxy($"{Proxy.ProxyHost}:{Proxy.ProxyPort}") : null,
ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => { return true; },
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
};
private static HttpClient myClient()
{
var client = new HttpClient(addHandlers);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("gzip"));
// client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("deflate"));
client.DefaultRequestHeaders.Add("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
client.DefaultRequestHeaders.Add("Accept", "text/html,application/xml,application/json,text/plain");
client.DefaultRequestHeaders.Add("Accept-Language", "en-us,en;q=0.5");
client.DefaultRequestHeaders.UserAgent.ParseAdd(UserAgent);
return client;
}
还有我的问题,打电话给我的客户是否安全?
因为如果我这样做,在我的客户机上使用块,我会得到一个错误
private static async Task<JsonDocument> ResponseMessage(HttpRequestMessage request, CancellationToken cancellationToken)
{
var client = myClient();
using (var response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false))
{
cancellationToken.ThrowIfCancellationRequested();
////etc.....
}
}
专用静态异步任务响应消息(HttpRequestMessage请求,CancellationToken CancellationToken)
{
var client=myClient();
使用(var response=await client.sendaync(request,HttpCompletionOption.ResponseHeadersRead,cancellationToken)。ConfigureAwait(false))
{
cancellationToken.ThrowIfCancellationRequested();
////等等。。。。。
}
}
如果我做错了,你能告诉我吗?这样我就可以纠正错误,也可以为我的其他项目创建一个更好的长期使用的httpclient扩展。您还没有创建任何扩展,只需设置HttpClientHandler的属性即可。不需要单独的函数,您只需为您的HttpClient实例设置属性。我以为这已经是一个扩展了。我忘了处理的代码在哪里?把
ISO-8859-1
作为第一个字符集真的是自找麻烦和乱码数据。每个人都在使用UTF8。对于ASCII文本,两种编码使用相同的字节值。但是,对于非拉丁编码,字符将被乱码或更糟的字符替换为?
@PanagiotisKanavos感谢您提供的信息。因此,我将只留下utf-8;q=0.7?对不起,我应该说的是处理的相反的——您不应该创建多个实例。HttpClient是线程安全的,可以重用。如果您的应用程序是短期的,您可以轻松地使用静态实例。长时间使用同一个实例意味着它不会检测到DNS更改,因此必须定期回收,例如每10分钟一次。查一查原因