Я пытаюсь сделать запрос через FlurlClient
на некоторые сайты. Но мне нужно объединить некоторые методы, которые я написал на фабрике.
Я использую этот подход для создания фабрики Proxy
и AllowAutoRedirect
.
Расширение AllowAutoRedirect:
public static IFlurlClient AllowAutoRedirect(this IFlurlClient fc, bool allowAutoRedirect)
{
fc.Settings.HttpClientFactory = new CustomFlurlHttpClientFactory(allowAutoRedirect);
return fc;
}
Расширение прокси:
public static IFlurlClient Proxy(this IFlurlClient fc, DML.Proxy proxy)
{
fc.Settings.HttpClientFactory = new CustomFlurlHttpClientFactory(proxy);
return fc;
}
И, наконец, это мои фабричные методы
private Proxy _proxy;
private bool? _allowAutoRedirect;
public CustomFlurlHttpClientFactory(Proxy proxy)
{
_proxy = proxy;
}
public CustomFlurlHttpClientFactory (bool? allowAutoRedirect)
{
_allowAutoRedirect = allowAutoRedirect;
}
public override HttpClient CreateHttpClient(HttpMessageHandler handler)
{
return base.CreateHttpClient(handler);
}
public override HttpMessageHandler CreateMessageHandler()
{
if(_proxy != null)
return ProxyClientHandlerConfiguration();
if (_allowAutoRedirect != null)
return AutoRedirectClientHandlerConfiguration();
return base.CreateMessageHandler();
}
private HttpClientHandler AutoRedirectClientHandlerConfiguration() => new HttpClientHandler { AllowAutoRedirect = _allowAutoRedirect ?? true };
private HttpClientHandler ProxyClientHandlerConfiguration() =>
new HttpClientHandler {
Proxy = new WebProxy {
Address = _proxy.GetFullUri(),
BypassProxyOnLocal = true,
UseDefaultCredentials = _proxy.UseDefaultCredentials()
},
UseProxy = true
};
Но когда клиент создан, только второй метод выполняется правильно (Proxy).
Я понимаю, что когда я вызываю AllowAutoRedirect
, он возвращает новый HttpClientHandler
, а когда вызывается Proxy
, онпереопределяет HttClientHandler
, возвращаемое AllowAutoRedirect
var cli = new FlurlClient(url)
.WithHeaders(headers)
.WithCookies(cookies)
.AllowAutoRedirect(false) /*Custom Factory Method*/
.Proxy(proxy) /*Custom Factory Method*/
.EnableCookies();
Итак, как я могу получить только один HttpClientHandler
, используя оба метода, AllowAutoRedirect
и Proxy
?