如何将FormUrlEncodedContent输出为字符串用于调试排查
如何将FormUrlEncodedContent输出为字符串/JSON格式排查问题
当然可以将FormUrlEncodedContent的内容输出为字符串或JSON格式,用来和供应商核对实际发送的数据。以下是具体实现方法:
方法1:输出为URL编码格式字符串
FormUrlEncodedContent继承自HttpContent,可以通过ReadAsStringAsync()方法读取其内容。注意HttpContent只能被读取一次,所以需要先复制一份内容用于输出,原对象保留用于发送请求:
// 原请求数据,用于后续发送请求 var requestData = new FormUrlEncodedContent(requestModel.ToKeyValuePair()); // 复制一份内容用于输出排查 var requestDataCopy = new FormUrlEncodedContent(requestModel.ToKeyValuePair()); // 读取为URL编码字符串(和实际发送的请求体完全一致) var formContentString = await requestDataCopy.ReadAsStringAsync(); // 输出内容,可打印或写入日志 Console.WriteLine(formContentString); // 示例输出:@@FirstName@@firs=张三&@@LastName@@last=李四&@@Address1@@addre=XX街道XX号
方法2:输出为JSON格式
如果需要更易读的格式,可以将键值对集合转换为字典后序列化为JSON:
使用System.Text.Json(.NET Core/.NET 5+默认)
// 将KeyValuePair集合转为字典 var formDataDict = requestModel.ToKeyValuePair().ToDictionary(kv => kv.Key, kv => kv.Value); // 序列化为格式化后的JSON var jsonString = System.Text.Json.JsonSerializer.Serialize(formDataDict, new System.Text.Json.JsonSerializerOptions { WriteIndented = true }); Console.WriteLine(jsonString);
使用Newtonsoft.Json(如果项目引用了该包)
var formDataDict = requestModel.ToKeyValuePair().ToDictionary(kv => kv.Key, kv => kv.Value); var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(formDataDict, Newtonsoft.Json.Formatting.Indented); Console.WriteLine(jsonString);
示例JSON输出:
{ "@@FirstName@@firs": "张三", "@@LastName@@last": "李四", "@@Address1@@addre": "XX街道XX号" }
完整代码示例
结合你的现有代码,整合后的写法如下:
var requestModel = new LeadRequestModel { ContractFirstName = "张三", ContractLastName = "李四", PropStreetAddress = "XX市XX区XX街道123号" }; // 原请求数据,用于发送请求 var requestData = new FormUrlEncodedContent(requestModel.ToKeyValuePair()); // 输出URL编码格式内容 var requestDataCopy = new FormUrlEncodedContent(requestModel.ToKeyValuePair()); var formString = await requestDataCopy.ReadAsStringAsync(); Console.WriteLine("实际发送的URL编码请求体:"); Console.WriteLine(formString); // 输出JSON格式内容 var formDict = requestModel.ToKeyValuePair().ToDictionary(kv => kv.Key, kv => kv.Value); var jsonString = System.Text.Json.JsonSerializer.Serialize(formDict, new System.Text.Json.JsonSerializerOptions { WriteIndented = true }); Console.WriteLine("\nJSON格式数据:"); Console.WriteLine(jsonString); // 发送请求 HttpResponseMessage response = await client.PostAsync(apiUrl, requestData);
你可以把输出的字符串提供给供应商,他们可以直接核对数据是否正确到达,或者是否符合接口的字段要求。
内容的提问来源于stack exchange,提问作者bb2j3z
相关产品推荐
相关产品推荐

