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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:06:03