4.24设置表单名称策略(转换器)
创建于 2026 年 8 月 17 日约 2 分钟读完
在发送 HTTP 表单数据时,与直接发送 application/json 格式的 JSON 数据不同,无法直接利用自定义 JSON 序列化选项对属性名称进行格式化。当将对象设置为表单数据时,框架会先将对象转换为 IDictionary<string, object?> 类型,再逐项添加为表单字段。因此,该过程不会沿用 JSON 序列化的命名规则。
由于 C# 语言中通常采用大驼峰命名法(PascalCase)命名属性,而在与某些第三方服务(如 Java 编写的 API)交互时,对方可能对字段名称大小写敏感,导致请求失败。为此,框架提供了 SetFormNameTransformer 方法,用于配置表单字段名称的转换规则。
HttpRequestBuilder.Post("https://furion.net") .SetMultipartContent(multipart => { multipart.AddObject(new { Id = 1, Name = "Furion"}) .SetFormNameTransformer(FormNamingPolicy.CamelCase); // 使用小驼峰命名法转换表单字段名 });框架内置了以下五种常见的命名规则转换方式,同时也支持自定义转换逻辑:
- 小驼峰命名法(
FormNamingPolicy.CamelCase):例如将TempCelsius转换为tempCelsius。 - 小写蛇形命名法(
FormNamingPolicy.SnakeCaseLower):例如将TempCelsius转换为temp_celsius。 - 大写蛇形命名法(
FormNamingPolicy.SnakeCaseUpper):例如将TempCelsius转换为TEMP_CELSIUS。 - 小写短横线命名法(
FormNamingPolicy.KebabCaseLower):例如将TempCelsius转换为temp-celsius。 - 大写短横线命名法(
FormNamingPolicy.KebabCaseUpper):例如将TempCelsius转换为TEMP-CELSIUS。
此外,你还可以通过自定义转换器委托实现特定格式,例如为所有字段名称统一添加 _ 前缀:
HttpRequestBuilder.Post("https://furion.net") .SetMultipartContent(multipart => { multipart.AddObject(new { Id = 1, Name = "Furion"}) .SetFormNameTransformer(name => "_" + name); });