Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用HttpClientHandler创建Httpclient扩展_C# - Fatal编程技术网

C# 使用HttpClientHandler创建Httpclient扩展

C# 使用HttpClientHandler创建Httpclient扩展,c#,C#,我正在尝试创建自己的简单httpclient扩展。 我要问的是,我是做错了还是做对了。因为我还在学习和掌握Httpclient。这就是为什么我需要你的建议 以下是我所做的: private static HttpClientHandler addHandlers = new HttpClientHandler { UseProxy = Proxy.UseProxy, Proxy = Proxy.UseProxy ? new WebProxy($&

我正在尝试创建自己的简单httpclient扩展。 我要问的是,我是做错了还是做对了。因为我还在学习和掌握Httpclient。这就是为什么我需要你的建议

以下是我所做的:

     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分钟一次。查一查原因