【发布时间】:2017-10-07 00:30:54
【问题描述】:
我正在使用FlurlHttp,我想为某些 API 调用禁用 AllowAutoRedirect。 我知道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 - 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();
【问题讨论】:
-
是否可以在应用范围内的所有客户端上禁用重定向?
-
@ToddMenier,对于当前任务来说没关系,因为客户端是一个微服务,作为单独的小型 MVC 站点运行
标签: redirect dotnet-httpclient asp.net-core-webapi flurl