我们可以在Startup.cs文件的ConfigureServices方法内配置一个HttpMessageHandlerBuilder扩展方法,该方法将拦截所有命名HttpClient发送的请求,并默认添加查询参数。具体代码如下:
services.AddHttpClient("MyNamedClient")
.ConfigureHttpClient((serviceProvider, client) =>
{
var httpContextAccessor = serviceProvider.GetService();
client.BaseAddress = new Uri("https://example.com/");
if (httpContextAccessor != null && httpContextAccessor.HttpContext != null)
{
// 获取请求的查询参数并添加到请求中
var query = httpContextAccessor.HttpContext.Request.Query;
foreach (var item in query)
{
client.DefaultRequestHeaders.Add(item.Key, item.Value);
}
}
});
在上述代码中,我们使用了HttpClientFactory来创建命名HttpClient,并通过ConfigureHttpClient方法设置了基础地址和默认请求头。通过获取IHttpContextAccessor服务,我们可以获取当前请求所带的查询参数,然后将其添加到 HttpClient 的 DefaultRequestHeaders中作为默认请求参数。
这样,在我们向命名HttpClient发送请求时,查询参数将被默认添加到请求中。
示例代码:
public class MyController : Controller
{
private readonly IHttpClientFactory _httpClientFactory;
public MyController(IHttpClientFactory httpClientFactory)
{
_httpClientFactory = httpClientFactory;
}
public async Task Index()
{
var httpClient = _httpClientFactory.CreateClient("MyNamedClient");
var response = await httpClient.GetAsync("myApi?param1=value1¶m2=value2");
// ...
}
}