在 FlulClient 中禁用自动重定向

2024-01-27

我在用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


从 Flurl 3.0 开始,这个答案已过时。根据已接受的答案,现在 Flulsupports https://github.com/tmenier/Flurl/issues/500丰富的开箱即用的重定向功能。


感觉有点沉重,因为 Flurl 不直接支持这种情况,所以需要在底层进行一些修改。您走在正确的轨道上,但我认为有几种方法可以简化它。首先,我建议创建WebRequestHandler工厂内。在外部创建它并传递它似乎没有必要。

public class NoRedirectHttpClientFactory : DefaultHttpClientFactory
{
    public override HttpMessageHandler CreateMessageHandler()
    {
        return new WebRequestHandler { AllowAutoRedirect = false };
    }
}

如果您希望默认在应用程序范围内实现此行为,则可以在启动时全局注册它。那么你不需要对个人做任何事情FlurlClients.

FlurlHttp.Configure(settings =>
    settings.HttpClientFactory = new NoRedirectHttpClientFactory());

否则,如果您需要能够选择哪个FlurlClient如果您禁用它,扩展方法会让它变得更容易一些:

public static IFlurlClient WithoutRedirects(this IFlurlClient fc) {
    fc.Settings.HttpClientFactory = new NoRedirectHttpClientFactory();
    return fc;
}

然后像这样使用它:

new FlurlClient(url).WithoutRedirects()...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 FlulClient 中禁用自动重定向 的相关文章

  • 如何阻止用户通过url访问css文件和图像

    我在用 htaccess防止用户通过 url 访问文件 线路 RewriteRule frontend assets css index L R 工作正常 它阻止用户访问 css 文件 然而 RewriteRule frontend ass
  • 在 IIS 中托管 RestAPI

    我有一个相当简单的 NET WebApi 应用程序 我试图将其托管在 IIS 中 遵循 MS 网站上关于此的所有说明 这是它的启动方法 public static void Main string args var host WebHost
  • 无需刷新的“重定向”页面(Facebook 照片风格)

    我正在尝试实现内容浏览 就像用户在 Facebook 上浏览照片时一样 我想每个人都熟悉照片浏览 您可以单击 下一张 和 上一张 并立即获取下一张或上一张照片 您也可以使用箭头键导航 例如 当您单击 下一步 时 您会注意到页面没有刷新 仅刷
  • 如何使用 HttpClient 验证 Pardot API

    我花了大约一天的时间尝试对 Pardot API 进行身份验证 它不喜欢我尝试发布消息正文的方式 所以我想发布对我有用的解决方案 如果您有任何建议或替代方案 我想听听 ServicePointManager SecurityProtocol
  • Facebook 身份验证无需重定向?

    有没有办法在不重定向的情况下使用 facebook 身份验证 OAuth 2 0 我没有使用 facebook 登录按钮 所以我应该重定向到https www facebook com dialog oauth https www face
  • 如何在.net core 2.0中进行简单的标头授权?

    在 NET Core 2 0 更改后 我一直无法找到有关此特定问题的信息 我有这样的cookie授权 services AddAuthentication ExampleCookieAuthenticationScheme AddCooki
  • Electron:阻止/取消页面导航

    有没有办法阻止或取消电子中的页面导航 win webContents on did start loading function event url if event sender getURL startsWith http xyz ev
  • 在子目录中设置 WordPress 时出现错误的 wp-admin 重定向

    我在 docker 容器中设置了 wordpress 使用 nginx 反向代理转发所有位置请求 blog到那个 docker 容器 问题是登录 wp admin 后 它重定向到domain wp admin 代替 domain blog
  • .htaccess 重定向到随机 URL

    我的服务器上有几个页面有流量 我需要将它们重定向到其他网站 这是最简单的部分 问题是我需要将事情混合起来并随机将人们发送到新站点 我发现可以在 time sec 之前做到这一点 但无论我尝试什么 我目前的知识都不足以使其发挥作用 这是我现在
  • HTTP 重定向图像可以吗?

    返回图片资源时返回301 302 303代码可以吗 我过去曾这样做过 而且似乎有效 这是好的做法吗 它与大多数浏览器兼容吗 是的 您可以重定向图像 浏览器将遵循重定向 但出于性能原因 您通常希望将重定向保持在最低限度 因为每个重定向都需要单
  • 如果 CodeIgniter 方法不存在,则重定向到默认方法。

    我正在使用 CodeignIter 并且正在寻找一种在被调用方法不存在时为单个控制器编写自定义处理例程的方法 假设你打电话www website com components login In the components控制器 没有一个方
  • nginx 代理重定向,带有来自 uri 的端口

    我正在尝试使用 nginx 进行重定向 这个想法是将某些端口的 uri id 1234 重定向到 localhost 1234 固定端口的重定向 location id 1234 rewrite id 1234 1 break proxy
  • 使用 htaccess 将 http://www、http:// 和 https://www 重定向到 https:

    在我的网站上 我在非 www 版本的域上安装了 SSL 证书 我想使用 htaccess 将 http www http non www 和 https www 重定向到 https 我可以将 www 转换为非 www 但 https ww
  • .htaccess 仅在 safari 上导致重定向循环 - http 到 https

    这种情况只发生在野生动物园中 我不知道为什么 谷歌浏览器 火狐浏览器 一切正常 在任何苹果产品上 使用 Safari 我都会得到一个重定向循环 Code RewriteCond HTTP HOST example com NC Rewrit
  • Docker .Net 6 错误程序不包含适合入口点的静态“Main”方法

    我正在尝试构建我的 docker 映像 但收到此错误 错误CS5001 程序不包含适合入口点的静态 Main 方法 6GAG WebApi 6GAG WebApi csproj 我的 1 个解决方案中有 3 个项目 1 webapi 1个前
  • 准备好使用 uint 路由约束了吗?

    我有一个 NET Core Web API 项目 我的 Id 是从 1 开始的整数 在大多数示例中 我看到类似这样的内容 HttpGet id int public async Task
  • 如何在 ASP.NET Core Web API 中传递 int 数组

    我有这个 Web API 方法 Route api controller ApiController public class SubjectsController ControllerBase HttpGet children publi
  • 重定向并保留我的图标

    我想知道当您单击 facebook 上的链接时 facebook 重定向如何保留其 favicon 并使用 FB favicon 打开新选项卡 我想知道如何实现这一点 它不是 iframe 所以我怎么能做这样的事情 我应该从哪里开始 当重定
  • 从.net Core WebApi中的startup.cs访问HttpContextAccessor

    我正在将异常记录到 asp net core 中的数据库中 MyDbContext 采用 HttpContextAccessor 参数 因此 我将 HttpContextAccessor 发送到 MyDbContext cs 以访问我的 J
  • ExoPlayer2 - 如何使 HTTP 301 重定向工作?

    我开始使用 ExoPlayer 来传输一些音频 一切都很顺利 直到我遇到一个带有 301 永久移动 重定向的 URL ExoPlayer2 默认情况下不处理该问题 我已经看过这个线程 https github com google ExoP

随机推荐