【问题标题】:Is it possible to use Furl.Http with the OWIN TestServer?是否可以将 Furl.Http 与 OWIN TestServer 一起使用?
【发布时间】:2015-10-12 21:26:02
【问题描述】:

我正在使用 OWIN TestServer,它为我提供了一个 HttpClient 来对测试服务器进行内存调用。我想知道是否有一种方法可以传入现有的 HttpClient 以供 Flurl 使用。

【问题讨论】:

    标签: owin dotnet-httpclient flurl


    【解决方案1】:

    更新:以下大部分信息在 Flurl.Http 2.x 中不再相关。具体来说,Flurl 的大部分功能都包含在新的FlurlClient 对象(包装HttpClient)中,而不是自定义消息处理程序中,因此如果您提供不同的HttpClient,您不会丢失功能。此外,从 Flurl.Http 2.3.1 开始,您不再需要自定义工厂来执行此操作。很简单:

    var flurlClient = new FlurlClient(httpClient);
    

    Flurl 提供了一个IHttpClientFactory 接口,允许您自定义HttpClient 构造。但是,Flurl 的大部分功能是由自定义的HttpMessageHandler 提供的,它在构造时添加到HttpClient。您不想为已经实例化的HttpClient 热交换它,否则您将面临破坏 Flurl 的风险。

    幸运的是,OWIN TestServer 也是由HttpMessageHandler 驱动的,您可以在创建HttpClient 时进行多个管道化。

    从允许您传入TestServer 实例的自定义工厂开始:

    using Flurl.Http.Configuration;
    using Microsoft.Owin.Testing;
    
    public class OwinTestHttpClientFactory : DefaultHttpClientFactory
    {
        private readonly TestServer _testServer;
    
        public OwinTestHttpClientFactory(TestServer server) {
            _testServer = server;
        }
    
        public override HttpMessageHandler CreateMessageHandler() {
            // TestServer's HttpMessageHandler will be added to the end of the pipeline
            return _testServer.Handler;
        }
    }
    

    工厂可以在全局范围内注册,但由于您需要为每个测试使用不同的 TestServer 实例,我建议将其设置在 FlurlClient 实例上,从 Flurl.Http 0.7 开始,它是 new capability。所以你的测试看起来像这样:

    using (var testServer = TestServer.Create(...)) {
        using (var flurlClient = new FlurlClient()) {
            flurlClient.Settings.HttpClientFactory = new OwinTestHttpClientFactory(testServer);
    
            // do your tests with the FlurlClient instance. 2 ways to do that:
            url.WithClient(flurlClient).PostJsonAsync(...);
            flurlClient.WithUrl(url).PostJsonAsync(...);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-23
      • 1970-01-01
      • 2021-11-12
      • 2016-04-01
      • 2011-01-20
      • 2018-08-11
      • 2021-08-05
      • 2019-03-18
      相关资源
      最近更新 更多