MiF*_*vil 5 redirect dotnet-httpclient flurl asp.net-core-webapi
我正在使用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")
Run Code Online (Sandbox Code Playgroud)
但是对于Flurl,我只找到了与C#Flurl中所述类似的方法 -将WebRequestHandler添加到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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,我可以为新的FlurlClient传递设置:
WebRequestHandler webRequestHandler = new WebRequestHandler();
webRequestHandler.AllowAutoRedirect = false;
var fc = new FlurlClient(url)
.ConfigureClient(c => c.HttpClientFactory =
new HttpClientFactoryWithWebRequestHandler (webRequestHandler));
Run Code Online (Sandbox Code Playgroud)
它看起来可能更加复杂。这是正确的方法还是可以更简单地完成?
自 Flurl 3.0 起,此答案已过时。根据接受的答案,Flurl 现在支持大量现成的重定向功能。
感觉有点沉重,因为这是 Flurl 不直接支持的场景,因此需要在引擎盖下稍作修改。你走在正确的轨道上,但我认为有几种方法可以简化它。首先,我建议WebRequestHandler在工厂内部创建。在外部创建并传入它似乎没有必要。
public class NoRedirectHttpClientFactory : DefaultHttpClientFactory
{
public override HttpMessageHandler CreateMessageHandler()
{
return new WebRequestHandler { AllowAutoRedirect = false };
}
}
Run Code Online (Sandbox Code Playgroud)
如果您希望默认情况下在应用程序范围内使用此行为,您可以在启动时全局注册它。那么你不需要对个体FlurlClients做任何事情。
FlurlHttp.Configure(settings =>
settings.HttpClientFactory = new NoRedirectHttpClientFactory());
Run Code Online (Sandbox Code Playgroud)
否则,如果您需要选择FlurlClient禁用它的功能,扩展方法会使它更容易一些:
public static IFlurlClient WithoutRedirects(this IFlurlClient fc) {
fc.Settings.HttpClientFactory = new NoRedirectHttpClientFactory();
return fc;
}
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
new FlurlClient(url).WithoutRedirects()...
Run Code Online (Sandbox Code Playgroud)
Flul 现在原生支持此功能:
"https://example.com"
.WithAutoRedirect(false)
[...]
Run Code Online (Sandbox Code Playgroud)
文档: https: //flurl.dev/docs/configuration/#redirects
| 归档时间: |
|
| 查看次数: |
698 次 |
| 最近记录: |