我在用FlulHttp http://tmenier.github.io/Flurl/fluent-http/我想禁用某些 API 调用的AllowAutoRedirect。
我知道如何让 System.Net.Http.HttpClient 不遵循 302 重定向? https://stackoverflow.com/questions/10453892/how-can-i-get-system-net-http-httpclient-to-not-follow-302-redirects
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 - 将 WebRequestHandler 添加到 FlurlClient https://stackoverflow.com/questions/41033337/c-sharp-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;
}
}
然后我可以传递新 FlulClient 的设置:
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()
;
查看更多选项https://flurl.dev/docs/configuration/#redirects https://flurl.dev/docs/configuration/#redirects