Можно ли установить собственный преобразователь DNS в C # в HttpClient - PullRequest
0 голосов
/ 24 октября 2019

что именно я хочу:

public static CustomDnsResolver : Dns 
{
   .....
}

public static void Main(string[] args) 
{
    var httpClient = new HttpClient();
    httpClient.Dns(new CustomDnsResolver());
}

в основном я просто хочу использовать свой собственный преобразователь DNS в HttpClient вместо System default, есть ли способ добиться этого?

1 Ответ

0 голосов
/ 25 октября 2019

В вашем случае использования именно поэтому Microsoft создает стек HttpClient. Это позволяет вам поместить вашу бизнес-логику в многоуровневый класс с помощью класса HttpMessageHandler. Вы можете найти образец в ms документах или visualstudiomagazine

void Main()
{
    var dnsHandler = new DnsHandler(new CustomDnsResolver());
    var client = new HttpClient(dnsHandler);
    var html = client.GetStringAsync("http://google.com").Result;
}

public class DnsHandler : HttpClientHandler
{
    private readonly CustomDnsResolver _dnsResolver;

    public DnsHandler(CustomDnsResolver dnsResolver)
    {
        _dnsResolver = dnsResolver;
    }

    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        var host = request.RequestUri.Host;
        var ip = _dnsResolver.Resolve(host);

        var builder = new UriBuilder(request.RequestUri);
        builder.Host = ip;

        request.RequestUri = builder.Uri;

        return base.SendAsync(request, cancellationToken);
    }
}

public class CustomDnsResolver
{
    public string Resolve(string host)
    {
        return "127.0.0.1";
    }
}
...