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

Asp.Net MVC中传递带数组值的KeyValuePair API请求遇类型转换错误

解决方案

你当前的错误是因为model.Answers.ToList()返回的是List<string>类型,而KeyValuePair<string, string[]>的第二个参数要求是string[],把ToList()改成ToArray()就能解决这个类型转换问题,但这只是表面问题——你用FormUrlEncodedContent传递的是表单格式数据,而你的API期望的是JSON格式请求体,两者不匹配,即使解决类型错误,API也无法正确解析数据。

下面是针对两种场景的处理方案:

一、正确发送JSON格式请求体(推荐)

这是匹配API接收格式的标准做法:

  1. 构造符合API要求的数据结构
// 用匿名类匹配API的请求结构
var requestData = new { answers = model.Answers.ToArray() };
  1. 将数据序列化为JSON字符串
// 方式1:使用Newtonsoft.Json(需引用对应NuGet包)
string jsonContent = JsonConvert.SerializeObject(requestData);

// 方式2:使用.NET内置的System.Text.Json
string jsonContent = System.Text.Json.JsonSerializer.Serialize(requestData);
  1. 创建请求内容并发送
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:00:20