如何在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
相关产品推荐
相关产品推荐

