5.26设置请求基地址
创建于 2026 年 8 月 17 日约 2 分钟读完
当需要对接多个第三方 API 时,我们通常会全局注册并配置多个 HttpClient 实例的 BaseAddress。例如:
// 配置默认客户端的基地址services.AddHttpClient(string.Empty, client =>{ client.BaseAddress = new Uri("https://furion.net/");});// 配置GitHub客户端的基地址services.AddHttpClient("github", client =>{ client.BaseAddress = new Uri("https://github.com/");});随后可通过 [HttpClientName(客户端名称)] 特性指定要使用的客户端。
除了全局配置,框架还支持在声明式请求中局部设置基地址,允许在构建请求时动态指定。
HTTP 声明式请求通过 BaseAddressAttribute 特性来设置请求基地址。相应的 HTTP 声明式提取器实现为 BaseAddressDeclarativeExtractor 类型,该类型负责解析 BaseAddressAttribute 特性并构建 HttpRequestBuilder 实例所需的请求基地址配置。
// 在接口定义上应用,影响所有方法[BaseAddress("https://furion.net")]public interface IHttpService : IHttpDeclarative{ [Get("/api/test")] Task<string> GetStringAsync(); // 在方法上应用 [BaseAddress("https://baiqian.com")] [Get("/api/test/2")] Task<string> GetStringAsync(); // 可充当前缀使用 [BaseAddress("/furion")] [Get("/api/test/2")] Task<string> GetStringAsync();}启用后,发送 HTTP 远程请求时会自动设置请求基地址。
处理逻辑说明:
- 若请求地址为绝对地址,则直接使用该地址发送请求。
- 若请求地址为相对地址:
- 未设置局部
BaseAddress时,将其与全局HttpClient实例的BaseAddress拼接,作为最终请求地址。 - 已设置局部
BaseAddress时:- 若局部
BaseAddress为相对地址,则先将局部BaseAddress拼接到请求地址前,再与全局BaseAddress拼接。 - 若局部
BaseAddress为绝对地址,则直接将该绝对地址与请求地址拼接,作为最终请求地址(此时忽略全局BaseAddress)。
- 若局部
- 未设置局部
BaseAddressAttribute 包含以下构造函数和属性:
-
构造函数:
new(baseAddress):作用于方法或接口,设置请求基地址。
-
属性:
BaseAddress:请求基地址(string类型)。