Asp.Net MVC中传递带数组值的KeyValuePair API请求遇类型转换错误
解决方案
你当前的错误是因为model.Answers.ToList()返回的是List<string>类型,而KeyValuePair<string, string[]>的第二个参数要求是string[],把ToList()改成ToArray()就能解决这个类型转换问题,但这只是表面问题——你用FormUrlEncodedContent传递的是表单格式数据,而你的API期望的是JSON格式请求体,两者不匹配,即使解决类型错误,API也无法正确解析数据。
下面是针对两种场景的处理方案:
一、正确发送JSON格式请求体(推荐)
这是匹配API接收格式的标准做法:
- 构造符合API要求的数据结构
// 用匿名类匹配API的请求结构 var requestData = new { answers = model.Answers.ToArray() };
- 将数据序列化为JSON字符串
// 方式1:使用Newtonsoft.Json(需引用对应NuGet包) string jsonContent = JsonConvert.SerializeObject(requestData); // 方式2:使用.NET内置的System.Text.Json string jsonContent = System.Text.Json.JsonSerializer.Serialize(requestData);
- 创建请求内容并发送
HttpContent content = new StringContent(jsonContent, Encoding.UTF8, "application/json"); HttpResponseMessage responseMessage = client.PostAsync("verification-questions", content).Result;
二、若坚持使用FormUrlEncodedContent(不推荐)
仅当API同时支持表单格式解析时可用,需将数组拆分为重复键名的键值对:
var keyValuePairs = new List<KeyValuePair<string, string>>(); foreach (var answer in model.Answers) { keyValuePairs.Add(new KeyValuePair<string, string>("answers", answer)); } HttpContent content = new FormUrlEncodedContent(keyValuePairs); HttpResponseMessage responseMessage = client.PostAsync("verification-questions", content).Result;
这种方式会生成answers=Apple&answers=Banana&answers=Orange&answers=Mango格式的表单数据,和API期望的JSON数组格式不兼容,请谨慎使用。
内容的提问来源于stack exchange,提问作者Yas Smitch
相关产品推荐
相关产品推荐

