4.3对象与互联网文件

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

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

当需要将对象添加到多部分表单内容中时,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() ]);});

添加互联网文件内容#

在多部分表单内容中添加来自互联网地址的文件内容。

cs
HttpRequestBuilder.Post("https://furion.net")    .SetMultipartContent(multipart =>    {        multipart.AddFileFromRemote("https://furion.net/img/furionlogo.png", "file");        multipart.AddFileFromRemote("https://furion.net/img/furionlogo.png", "file", "logo.png");   // 自定义文件名        multipart.AddFileFromRemote("https://furion.net/img/furionlogo.png", "file", "logo.png", "image/png");   // 自定义媒体类型,不传 Content-Type 将自动根据文件扩展名解析        multipart.AddFileFromRemote("https://furion.net/img/furionlogo.png", configure: (client,request) => {});   // 支持配置 HttpClient 和 HttpRequestMessage 实例    });

注意:从互联网地址添加文件时,文件大小限制为 100MB