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

如何调用接收字符串数组参数的API?解决不支持媒体类型错误

解决Post API传递数组参数的"Unsupported Media Type"错误

错误原因分析

你遇到的问题核心有三点:

  1. 直接调用SchoolsUuid.ToString()得到的是数组的类型名称(如System.String[]),并非有效的数组数据格式
  2. 创建StringContent时未指定媒体类型为application/json,ASP.NET Core无法识别请求体格式
  3. 原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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:01:19