ASP.NET Core Web API中如何将字符串数组传入JSON键
解决ASP.NET Core 6 Web API无法识别请求负载键名的问题
你的问题出在请求负载结构和参数类型不匹配:请求是一个包含names数组的对象,但你用string[]作为参数,模型绑定只会尝试把请求根直接解析成数组,自然识别不了外层的names键。
以下是两种可行的解决方法:
方法1:创建匹配请求结构的DTO类(推荐)
定义一个和请求负载结构对应的类,让模型绑定能正确映射键值对:
public class NameRequest { public string[] Names { get; set; } }
然后修改接口方法的参数:
public async Task<ActionResult<IEnumerable<EmpDetails>>> GetDetails([FromBody] NameRequest request) { // 通过request.Names获取数组值 var names = request.Names; // 后续业务逻辑... }
方法2:使用动态类型接收(无需创建类)
如果不想额外定义类,可以用Newtonsoft.Json.Linq.JObject(需确保项目引入Newtonsoft.Json包)或者ASP.NET Core内置的System.Text.Json.JsonElement来接收,再提取数组:
用JObject的示例:
using Newtonsoft.Json.Linq; public async Task<ActionResult<IEnumerable<EmpDetails>>> GetDetails([FromBody] JObject request) { string[] names = request["names"].ToObject<string[]>(); // 后续业务逻辑... }
用JsonElement的示例:
using System.Text.Json; public async Task<ActionResult<IEnumerable<EmpDetails>>> GetDetails([FromBody] JsonElement request) { request.TryGetProperty("names", out JsonElement namesElement); string[] names = namesElement.Deserialize<string[]>(); // 后续业务逻辑... }
内容的提问来源于stack exchange,提问作者niler
相关产品推荐
相关产品推荐

