我正在使用FlurlHttp,我想为某些API调用禁用AllowAutoRedirect。 我知道如何让System.Net.Http.HttpClient不跟随302重定向?
WebRequestHandler webRequestHandler = new WebRequestHandler();
webRequestHandler.AllowAutoRedirect = false;
HttpClient httpClient = new HttpClient(webRequestHandler);
// Send a request using GetAsync or PostAsync
Task<HttpResponseMessage> response = httpClient.GetAsync("http://www.google.com")
但是对于Flurl,我只找到了类似于C# Flurl - Add WebRequestHandler to FlurlClient中描述的方法(下面的代码我还没有编译,所以可能会有一些错误)。
public class HttpClientFactoryWithWebRequestHandler : DefaultHttpClientFactory
{
private readonly WebRequestHandler _webRequestHandler;
public HttpClientFactoryWithWebRequestHandler (WebRequestHandler webRequestHandler )
{
_webRequestHandler = webRequestHandler ;
}
public override HttpMessageHandler CreateMessageHandler()
{
var handler =_webRequestHandler ;
//Or var handler = new WebRequestHandler(_webRequestHandler );
return handler;
}
}
那么我可以传递设置一个新的FlurlClient:
WebRequestHandler webRequestHandler = new WebRequestHandler();
webRequestHandler.AllowAutoRedirect = false;
var fc = new FlurlClient(url)
.ConfigureClient(c => c.HttpClientFactory =
new HttpClientFactoryWithWebRequestHandler (webRequestHandler));
看起来比实际情况更加复杂。这是正确的方式还是可以用更简单的方法完成?
更新2021年:Flurl现在支持开箱即用的自动重定向功能。
await url.WithAutoRedirect(false).GetAsync()
;