4.10添加对象内容(复杂表单/上传文件)

创建于 2026 年 8 月 17 日约 2 分钟读完

当需要将对象添加到多部分表单内容中时,HttpMultipartFormDataBuilder 提供了灵活的处理方式,具体取决于是否指定了表单名。

1. 未指定表单名:在这种情况下,对象会被解析并遍历,其属性将作为独立的表单项进行设置。

cs
HttpRequestBuilder.Post("https://furion.net")    .SetMultipartContent(multipart =>    {        multipart.AddObject(new { id = 1, name = "furion" }); // 未指定表单名(将被赋值给 FormClass 的 Id 和 Name 属性)    });

上述代码将生成两个表单项:IdName,它们对应于服务端接收的类定义,如:

cs
public class FormClass{    public int Id { get; set; }    public string Name { get; set; }    // 其他属性}

2. 指定表单名:如果为对象指定了表单名,则整个对象将作为表单的一个嵌套项进行设置。这通常用于服务端期望接收具有嵌套结构的对象。

cs
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 属性)    });

在这种情况下,服务端接收的类定义应包含一个嵌套类,如:

cs
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; }    // 其他属性...}

包含文件(或二进制数据)的复杂表单

对象字段除基础数据类型外,还可包含文件或二进制数据(如 StreamIFormFileFileInfoMultipartFile)。推荐使用 MultipartFile 类型声明文件字段。

示例代码如下:

cs
HttpRequestBuilder.Post("https://furion.net")    .SetMultipartContent(multipart =>    {        multipart.AddObject(new FormClass { Id = 1, Name = "furion", File = MultipartFile.CreateFromPath("文件路径") });    });

对应的模型类定义如下:

cs
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()]) 来完成注册:

  • 单次请求设置:
cs
HttpRequestBuilder.Post("https://furion.net/")    .AddHttpContentProcessors(() => [ new FormFileContentProcessor() ])
  • 全局配置:

Startup.csProgram.cs 文件中,配置并注册 HttpRemote 服务,以启用 IFormFile 内容处理器功能:

cs
services.AddHttpRemote(builder =>{    builder.AddHttpContentProcessors(() => [ new FormFileContentProcessor() ]);});