You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中将form-data类型的API请求体转换为JSON格式

解决form-data请求体转JSON及重发请求的方案

一、优先方案:直接解析原始form-data(推荐)

你当前手动截取原始请求体的方式容易因边界符、编码等细节出错,不如直接利用ASP.NET框架自带的解析能力获取form-data的键值对,再序列化为JSON:

// 直接从Request对象读取form-data的所有键值对
var formDataDict = Request.Form.ToDictionary(kv => kv.Key, kv => kv.Value);

// 序列化为JSON格式(需引用System.Text.Json命名空间)
string jsonRequestBody = System.Text.Json.JsonSerializer.Serialize(formDataDict);

// 将JSON存入数据库
// ... 你的数据库存储逻辑

这种方式能自动处理form-data的边界分隔、编码等问题,避免手动截取带来的各种异常。

二、适配现有处理后文本的转换方法

如果只能基于你当前处理后的文本(交替的键、值行)转换为JSON,可以按行分割后两两配对成键值对,再序列化:

// 假设处理后的请求体内容为processedBody字符串
var lines = processedBody.Split(new[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries);
var formDataDict = new Dictionary<string, string>();

for (int i = 0; i < lines.Length; i += 2)
{
    // 去除键字符串前后的引号
    string key = lines[i].Trim('"');
    // 处理最后一行可能无对应值的情况
    string value = i + 1 < lines.Length ? lines[i + 1].Trim() : string.Empty;
    formDataDict[key] = value;
}

// 序列化为JSON
string jsonRequestBody = System.Text.Json.JsonSerializer.Serialize(formDataDict);

三、从存储的JSON还原form-data并重发请求

后续需要重发API请求时,只需将存储的JSON反序列化为字典,再构造MultipartFormDataContent即可:

// 从数据库取出存储的JSON字符串
string storedJson = "...";

// 反序列化为字典
var formDataDict = System.Text.Json.JsonSerializer.Deserialize<Dictionary<string, string>>(storedJson);

// 构造form-data请求内容
var multipartContent = new MultipartFormDataContent();
foreach (var kv in formDataDict)
{
    multipartContent.Add(new StringContent(kv.Value), kv.Key);
}

// 发送POST请求
using var httpClient = new HttpClient();
var response = await httpClient.PostAsync("目标API的URL", multipartContent);

内容的提问来源于stack exchange,提问作者Shakeeb Kp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 00:05:18