Header 使用 Flurl 和 DotNetCore 进行传播

Header propagation with Flurl and DotNetCore

去年我非常喜欢使用 Flurl,但遇到了一个问题,我希望我可以尽可能使用 Flurl 解决这个问题,而不是将其撕掉并使用 System.Net.Http[=13 中的 IHttpClientFactory 和 HttpClient =]

我有一个 DotNetCore 3.1 API,我们的客户使用自定义 headers 调用这些 API。以“x-activityid”为例。我的 API 调用外部 API,因此我创建了一个单独的客户端 class,我在其中使用 Flurl 调用外部 API 上的端点。

我需要将一些 headers 从传入我的 API 的请求传播到我对使用 Flurl 调用的外部 API 发出的请求。

一些相关链接:

header 传播的整个想法取决于对某些 HTTP 服务器上下文的感知,从中获取传入的 headers,这就是为什么 ASP.NET Core 可以支持这样的功能Flurl 是一个 stand-alone 库,经常嵌入 Xamarin 应用程序之类的东西中,但不能。

但这一切并没有丢失,因为 Flurl 实际上只是 HttpClient 的包装器。要在不放弃 Flurl 的情况下使用此功能,只需完全按照规定在 ASP.NET Core 中连接 header 传播,允许它将 HttpClient 实例注入您的服务 类,然后 wrap those instances with Flurl inside those classes. Note that you'll need to adapt the pattern of using FlurlClient directly,而不是构建调用 URL 字符串,如果你还没有这样做的话。