3.13路径参数

在 URL 路径中替换对象模板字符串。

URL 路径中替换对象模板字符串。

cs
HttpRequestBuilder.Get("https://furion.net?id={id}&name={name}")    .WithPathParameter("id", 1)  // 添加单个参数,{id} 将被替换为 1    .WithPathParameter("name", new[] { "furion", "monksoul" }) // 添加单个参数,{name} 将被替换为 furion,monksoul    .WithPathParameters(new Dictionary<string, object?> { })   // 添加多个路径参数    .WithPathParameters(new { id = 1, name = "Furion" })   // 添加多个路径参数,{id} 和 {name} 分表被替换为 1 和 Furion    .WithPathParameters(new { id = 1, name = "Furion" }, "user")   // 添加带前缀的参数,{user.id} 和 {user.name} 分别被替换为 1 和 FurionHttpRequestBuilder.Get("https://furion.net/{id}/{name?}")   // "?" 结尾表示键不存在时替换为空字符串    .WithPathParameter(new { id = 1 });HttpRequestBuilder.Get("https://furion.net/{**path}")   // "**" 开头表示不对路径分割符 "/" 转义    .WithPathParameter(new { path = "files/images/photo.jpg" });

若路径参数键出现重复,则后设置的键值会覆盖先前的设置。

模板路径语法

模板路径除了直接使用 {key} 外,还支持通过 . 访问对象的属性、嵌套属性,以及通过 [index] 访问集合中的元素。此外,对象类型的属性在未找到同名属性时,会自动尝试将其视为字典,并以路径标识符作为键进行取值(等同于 dict["key"])。

  • {key}:直接替换对应的值。
  • {key.property}:访问 key 对象的 property 属性,或当 key 为字典时访问键为 "property" 的值。
  • {key.property.nested}:多级属性/键访问。
  • {list[0]}:访问 list 集合(数组、List<T> 等)中索引为 0 的元素。
  • {user.names[1]}:先访问 user 对象的 names 属性,再取其索引 1 处的元素。
  • {dic.key}:当 dic 是字典时(包括 Dictionary<string, T>Hashtable 等),dic.key 会作为 dic["key"] 取值。
  • {obj.dictProp.someKey[0].another}:混合使用点号和索引,逐级深入取值。

以上路径都支持在结尾添加 ? 表示值不存在时替换为空字符串,以及添加 ** 前缀表示不对路径分隔符 / 进行转义。


配置参数

除了通过 {key} 模板语法设置路径参数外,框架还提供了配置参数,用于读取配置信息进行替换操作。配置参数使用 [[key]] 语法,例如:

cs
HttpRequestBuilder.Get("https://furion.net?id=[[id]]&name=[[name]]");

启用配置参数支持

要在 HttpRemote 服务中启用配置参数支持,请按照以下步骤进行配置:

cs
services.AddHttpRemote(builder => {})    .ConfigureOptions(options =>    {        // 设置用于替换 URL 地址中配置模板参数的提供源        options.Configuration = builder.Configuration;  // 若使用 Furion 框架可直接设置 App.Configuration    });

配置参数的使用

配置参数将从您的配置文件中读取并替换到 URL 中。例如,您的配置文件可能如下所示:

appsettings.json
{  "id": 1,  "name": "Furion"}

配置参数的键支持多种格式语法,以便更灵活地访问配置文件中的值:

  • [[key]]:直接访问 key 对应的值。
  • [[key:sub]]:访问 key 下的 sub 子项的值。
  • [[key:sub:nest]]:访问 key 下的 sub 子项中的 nest 子项的值。
  • 备用值查找:
    • [[notfound | bak]]:如果 notfound 不存在,则查找 bak
    • [[notfound | bak | other]]:如果 notfoundbak 都不存在,则查找 other
    • [[notfound | bak:sub | other:sub:nest]]:支持更深层次的备用查找。
  • 默认值:
    • [[notfound || default]]:如果 notfound 不存在,则使用 default 作为值。
    • [[notfound | bak | other || 默认值]]:结合备用查找和默认值,确保总有值可用。