.NET Core Web API默认参数类型是什么?如何无需实体类接收JSON参数?
问题解答
1. 代码默认运行情况与支持的参数类型
你给出的代码在默认配置下可以正常运行,只要请求参数符合绑定规则即可。
ASP.NET Core 对简单类型(如string、int等)的默认参数绑定来源为查询字符串(Query)、form-data、x-www-form-urlencoded三种,默认不支持直接从raw(比如JSON格式的请求体)中绑定参数。
2. 接收JSON参数的现有认知是否正确
这个认知是正确的:
默认情况下,要接收JSON格式的请求体数据,需要为参数添加
[FromBody]特性,且由于JSON反序列化规则限制,多字段的JSON对象必须映射到自定义实体类才能正常解析。
如果仅给单个简单类型参数加[FromBody],只能匹配纯文本格式的请求体,无法解析JSON对象内的字段值。
3. 不封装实体类接收JSON零散参数的实现方案
最简便的实现方式是直接接收JSON根对象作为参数,再手动读取对应字段,有两种常用写法:
方式1:使用JsonElement(System.Text.Json原生支持,无需额外安装包)
using System.Text.Json; [HttpPost("device")] public string Post([FromBody] JsonElement jsonRoot) { string uid = jsonRoot.GetProperty("uid").GetString(); string deviceId = jsonRoot.GetProperty("deviceId").GetString(); // 后续业务逻辑 return "value"; }
方式2:使用JObject(依赖Newtonsoft.Json)
先安装Microsoft.AspNetCore.Mvc.NewtonsoftJson NuGet包,再配置使用Newtonsoft.Json作为序列化器,之后编写代码:
using Newtonsoft.Json.Linq; [HttpPost("device")] public string Post([FromBody] JObject jsonRoot) { string uid = jsonRoot.Value<string>("uid"); string deviceId = jsonRoot.Value<string>("deviceId"); // 后续业务逻辑 return "value"; }
内容的提问来源于stack exchange,提问作者user666
相关产品推荐
相关产品推荐

