4.1创建实例与基本项
在互联网应用中,保存用户自定义数据最常用的方法是使用 Form 表单提交。Form 表单不仅能传输文本数据,还能传输二进制数据(例如文件)。
HttpMultipartFormDataBuilder 表单构建器#
在互联网应用中,保存用户自定义数据最常用的方法是使用 Form 表单提交。Form 表单不仅能传输文本数据,还能传输二进制数据(例如文件)。
为了构建包含这些多部分表单内容,我们使用 HttpMultipartFormDataBuilder 表单构建器。该构建器最终会生成一个 MultipartFormDataContent 对象,并将其设置为 HttpRequestMessage 的 Content 属性,同时指定请求的内容类型为 multipart/form-data。
创建构建器实例#
由于 HttpMultipartFormDataBuilder 的构造函数是私有的,因此无法直接使用 new 关键字进行实例化。若想在 HTTP 远程请求中设置多部分表单内容,必须通过 HttpRequestBuilder 对象提供的 SetMultipartContent(Action<HttpMultipartFormDataBuilder>) 方法进行设置。
HttpRequestBuilder.Post("https://furion.net") .SetMultipartContent(multipart => { // multipart 的类型是 HttpMultipartFormDataBuilder });设置内容边界#
在构建多部分表单内容时,可以通过以下链式调用方法为多部分表单内容设置边界(Boundary):
HttpRequestBuilder.Post("https://furion.net") .SetMultipartContent(multipart => { // 属性方式设置边界(非推荐) multipart.Boundary = "--------------------"; // 方法方式设置边界(推荐),支持链式调用 multipart.SetBoundary("--------------------"); });保留内容的默认 Content-Type#
在与一些较老的 HTTP 服务对接时,提交表单数据时不应设置多部分表单内容的 Content-Type,否则可能引发异常。 而现代 HTTP 接口则无此限制。因此,框架默认在提交表单数据时会自动移除多部分表单内容的 Content-Type。
若需取消此操作,可通过以下方式设置:
HttpRequestBuilder.Post("https://furion.net") .SetMultipartContent(multipart => { multipart.OmitContentType = false; // 保留多部分内容默认的 Content-Type // 或使用 multipart.SetOmitContentType(false); });// 【推荐】使用 SetMultipartContent(Action<HttpMultipartFormDataBuilder> configure, bool omitContentType) 重载方法HttpRequestBuilder.Post("https://furion.net/") .SetMultipartContent(multipart => { // ... }, false); // 保留多部分内容默认的 Content-Type添加单个表单项内容#
向多部分表单内容添加独立的项,即添加单个表单属性。
HttpRequestBuilder.Post("https://furion.net") .SetMultipartContent(multipart => { multipart.AddFormItem(1, "id"); // 将被赋值给 FormClass 的 Id 属性 multipart.AddFormItem("Furion", "name"); // 将被赋值给 FormClass 的 Name 属性 });上述代码对应于服务端接收的类定义,如:
public class FormClass{ public int Id { get; set; } public string Name { get; set; } // 其他属性}