2.3Form 表单提交(URL 编码)
在互联网应用中,保存用户自定义的数据最常见的方式是使用 Form 表单提交。Form 表单不仅能携带文本数据,还能携带二进制数据,如文件。
在互联网应用中,保存用户自定义的数据最常见的方式是使用 Form 表单提交。Form 表单不仅能携带文本数据,还能携带二进制数据,如文件。
var content = await httpRemoteService.PostAsAsync<YourRemoteFormResult>("https://localhost:7044/HttpRemote/AddForm?id=1", builder => builder.SetMultipartContent(multipart => multipart // 设置多部分表单内容 .AddJson(new { id = 1, name = "furion" }) // 设置 JSON 数据 .AddFileAsStream(@"C:\Workspaces\httptest.jpg", "file"))); // 设置文件(支持流方式、字节数组方式、远程 URL 地址和 Base64 字符串)SetMultipartContent 方法专门用于设置请求类型为 multipart/form-data 的表单数据,并提供了丰富的扩展选项,包括:
Boundary或SetBoundary(boundary):设置多部分表单内容边界。AddJson(rawJson):添加JSON内容。AddFormItem(value, name):添加单个表单项内容。AddHtml(htmlString, name):添加HTML内容。AddXml(xmlString, name):添加XML内容。AddText(text, name):添加文本内容。AddObject(rawObject, name):添加对象内容。AddFileFromRemote(url, name):添加互联网文件内容。AddFileFromBase64String(base64String, name, fileName):添加Base64字符串文件内容。AddFileAsStream(path, name):添加本地文件作为流内容。AddFileWithProgressAsStream(path, channel, name):添加本地文件作为流内容(带文件传输进度)。AddFileAsByteArray(path, name):添加本地文件作为字节数组内容。AddFile(multipartFile, name):添加MultipartFile文件内容。AddFile(fileInfo, name):添加FileInfo文件内容。AddFile(IFormFile):添加IFormFile文件内容。AddFiles(IFormFileCollection):添加IFormFileCollection文件内容。AddFile(IBrowserFile):添加IBrowserFile文件内容。AddFiles(IEnumerable<IBrowserFile>):添加多个IBrowserFile文件内容。AddStream(stream, name):添加二进制流内容。AddByteArray(byteArray, name):添加二进制字节数组内容。Add(httpContent):添加HttpContent内容。
这些只是常用的设置方法,SetMultipartContent 提供了更多的灵活性。
除了上述方式,还支持以下几种方法:
// 使用构建器模式var content = await httpRemoteService.SendAsAsync<YourRemoteFormResult>(HttpRequestBuilder.Post("https://localhost:7044/HttpRemote/AddForm?id=1") .SetMultipartContent(multipart => multipart // 设置多部分表单内容 .AddJson(new { id = 1, name = "furion" }) // 设置 JSON 数据 .AddFileAsStream(@"C:\Workspaces\httptest.jpg", "file"))); // 设置文件(支持流方式、字节数组方式、远程 URL 地址和 Base64 字符串// 更多详细用法可参考第 19.2.1 节以下是一些 Form 表单提交的常见例子:
var content = await httpRemoteService.PostAsAsync<YourRemoteFormResult>("https://localhost:7044/HttpRemote/AddForm?id=1", builder => builder.SetMultipartContent(multipart => multipart // 设置多部分表单内容 .AddJson(new { id = 1, name = "furion" }) // 设置 JSON 数据 .AddFormItem("age", "Age") // 支持设置单个值 .AddFileAsStream(@"C:\Workspaces\httptest.jpg", "file") // 设置单个文件(对应表单 File 字段) // 支持互联网文件地址 .AddFileFromRemote("https://furion.net/img/furionlogo.png", "files") // 设置多个文件(对应表单 Files 字段) // 支持读取本地文件作为字节数组 .AddFileAsByteArray(@"C:\Workspaces\httptest.jpg", "files")); // 设置多个文件(对应表单 Files 字段) // 添加 MultipartFile 文件 .AddFile(MultipartFile.CreateFromPath(@"C:\Workspaces\httptest.jpg")));URL编码表单
除了包含多个部分的 multipart/form-data 表单请求外,还有一种常见的请求类型是 application/x-www-form-urlencoded,它以 URL 编码形式发送数据。这种表单的特点是,所有特殊字符都会进行 URL 编码,通常用于无需上传文件等二进制数据的简单表单提交场景。
以下示例将展示如何构建符合 application/x-www-form-urlencoded 提交类型的表单数据。
var content = await httpRemoteService.PostAsAsync<YourRemoteModel>("https://localhost:7044/HttpRemote/AddURLForm", builder => builder .SetFormUrlEncodedContent(new { id = 1, name = "furion" })); // 设置 application/x-www-form-urlencoded 请求内容// 支持 URL 编码字符串格式var content = await httpRemoteService.PostAsAsync<YourRemoteModel>("https://localhost:7044/HttpRemote/AddURLForm", builder => builder .SetFormUrlEncodedContent("id=1&name=furion", useStringContent: true);