如何调用接收字符串数组参数的API?解决不支持媒体类型错误
解决Post API传递数组参数的"Unsupported Media Type"错误
错误原因分析
你遇到的问题核心有三点:
- 直接调用
SchoolsUuid.ToString()得到的是数组的类型名称(如System.String[]),并非有效的数组数据格式 - 创建
StringContent时未指定媒体类型为application/json,ASP.NET Core无法识别请求体格式 - 原API参数未明确绑定源,Post请求下简单类型数组默认不会自动从请求体解析
方案1:JSON格式传递请求体(推荐)
这是REST API最常用的标准方式,先修正API端点,添加[FromBody]特性明确从请求体读取数组:
[HttpPost("GetSchoolsDetails")] public ActionResult<SchoolModel> GetSchoolsDetails([FromBody] string[] SchoolsUuid) { // 你的业务代码 }
再修改客户端调用代码,将数组序列化为JSON字符串,并指定正确的媒体类型:
var requestUrl = "http://localhost:6200/api/Schools/GetSchoolsDetails"; // 序列化数组为JSON格式 var jsonPayload = JsonSerializer.Serialize(SchoolsUuid); var requestContent = new StringContent(jsonPayload, Encoding.UTF8, "application/json"); using (var client = new HttpClient()) { client.DefaultRequestHeaders.Add("Authorization", _infrastructureAuthKey); var response = client.PostAsync(requestUrl, requestContent).Result; // 后续可添加响应处理逻辑,比如: // var schoolData = await response.Content.ReadFromJsonAsync<SchoolModel>(); }
方案2:FormData传递数组
如果你的API适配表单提交场景,可使用MultipartFormDataContent传递数组,API参数无需修改特性:
var requestUrl = "http://localhost:6200/api/Schools/GetSchoolsDetails"; using (var client = new HttpClient()) { client.DefaultRequestHeaders.Add("Authorization", _infrastructureAuthKey); var formContent = new MultipartFormDataContent(); // 逐个添加数组元素,参数名需与API参数名完全一致 foreach (var uuid in SchoolsUuid) { formContent.Add(new StringContent(uuid), "SchoolsUuid"); } var response = client.PostAsync(requestUrl, formContent).Result; }
方案3:URL查询参数传递数组
即使是Post请求,也可以将数组放在URL查询参数中传递,API参数无需修改:
var requestUrl = "http://localhost:6200/api/Schools/GetSchoolsDetails"; // 构建查询参数,通过重复参数名传递数组元素 var queryString = string.Join("&", SchoolsUuid.Select(u => $"SchoolsUuid={Uri.EscapeDataString(u)}")); requestUrl += $"?{queryString}"; using (var client = new HttpClient()) { client.DefaultRequestHeaders.Add("Authorization", _infrastructureAuthKey); // Post请求传递空内容即可 var response = client.PostAsync(requestUrl, null).Result; }
内容的提问来源于stack exchange,提问作者Vasanth R
相关产品推荐
相关产品推荐

