4.10添加对象内容(复杂表单/上传文件)
创建于 2026 年 8 月 17 日约 2 分钟读完
当需要将对象添加到多部分表单内容中时,HttpMultipartFormDataBuilder 提供了灵活的处理方式,具体取决于是否指定了表单名。
1. 未指定表单名:在这种情况下,对象会被解析并遍历,其属性将作为独立的表单项进行设置。
HttpRequestBuilder.Post("https://furion.net") .SetMultipartContent(multipart => { multipart.AddObject(new { id = 1, name = "furion" }); // 未指定表单名(将被赋值给 FormClass 的 Id 和 Name 属性) });上述代码将生成两个表单项:Id 和 Name,它们对应于服务端接收的类定义,如:
public class FormClass{ public int Id { get; set; } public string Name { get; set; } // 其他属性}2. 指定表单名:如果为对象指定了表单名,则整个对象将作为表单的一个嵌套项进行设置。这通常用于服务端期望接收具有嵌套结构的对象。
HttpRequestBuilder.Post("https://furion.net") .SetMultipartContent(multipart => { multipart.AddObject(new { id = 1, name = "furion" }); // 未指定表单名(将被赋值给 FormClass 的 Id 和 Name 属性) multipart.AddObject(new { id = 1, name = "furion" }, "child"); // 指定表单名,将赋值给 FormClass 的 Child 属性) });在这种情况下,服务端接收的类定义应包含一个嵌套类,如:
public class FormClass{ public int Id { get; set; } public string Name { get; set; } public ChildClass Child { get; set; } // 嵌套类 // 其他属性...}public class ChildClass{ public int Id { get; set; } public string Name { get; set; } // 其他属性...}包含文件(或二进制数据)的复杂表单
对象字段除基础数据类型外,还可包含文件或二进制数据(如 Stream、IFormFile、FileInfo 或 MultipartFile)。推荐使用 MultipartFile 类型声明文件字段。
示例代码如下:
HttpRequestBuilder.Post("https://furion.net") .SetMultipartContent(multipart => { multipart.AddObject(new FormClass { Id = 1, Name = "furion", File = MultipartFile.CreateFromPath("文件路径") }); });对应的模型类定义如下:
public class FormClass // 支持属性 [AliasAs] 定义别名{ public int Id { get; set; } public string Name { get; set; } public MultipartFile File { get; set; } // public IFormFile File { get; set; } // 注意:需要按照以下步骤配置}注意:若使用 IFormFile 替代 MultipartFile,需确保已注册 FormFileContentProcessor。可通过全局或局部调用 .AddHttpContentProcessors(() => [new FormFileContentProcessor()]) 来完成注册:
- 单次请求设置:
HttpRequestBuilder.Post("https://furion.net/") .AddHttpContentProcessors(() => [ new FormFileContentProcessor() ])- 全局配置:
在 Startup.cs 或 Program.cs 文件中,配置并注册 HttpRemote 服务,以启用 IFormFile 内容处理器功能:
services.AddHttpRemote(builder =>{ builder.AddHttpContentProcessors(() => [ new FormFileContentProcessor() ]);});