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

.Net Core Web API无法接收JSON字符串字段值的问题求助

解决.NET Core Web API接收含JSON字符串字段时的「The input was not valid」错误

这个问题我之前也踩过坑,核心原因是请求体格式和后端JSON解析器的预期不匹配——你用单引号包裹序列化后的对象,会让后端解析器误以为内部的JSON片段是嵌套对象,直接触发格式校验失败。下面给你几个实用的解决方案,按需选择就行:

方案一:调整前端请求体格式(适配后端string参数)

如果后端必须用string类型接收,那得确保发送的是标准JSON格式的字符串值:整个请求体要用双引号包裹,并且内部的JSON字符串要做转义处理,绝对不能用单引号包裹。

举个前端代码的正确示例:

// 先把筛选器对象序列化为JSON字符串
const userFilterStr = JSON.stringify({ role: "admin", status: "active" });
const userTestFilterStr = JSON.stringify({ testCase: "login", env: "dev" });

// 组装Settings对象
const settings = { user_filter: userFilterStr, user_test_filter: userTestFilterStr };

// 关键操作:把Settings对象序列化后,再转一次JSON(让整个内容变成合法的JSON字符串值)
const requestBody = JSON.stringify(JSON.stringify(settings));

// 发送PUT请求,务必设置Content-Type为application/json
fetch("/api/user/profile/settings", {
  method: "PUT",
  headers: { "Content-Type": "application/json" },
  body: requestBody
});

这样后端拿到的就是完整的Settings JSON字符串,解析时不会把内部的JSON片段误判为嵌套对象。

方案二:后端改用强类型模型接收(更推荐)

其实更规范的做法是后端创建一个和前端Settings结构对应的模型类,直接接收整个对象,彻底避开字符串嵌套的格式问题:

// 定义与前端结构匹配的模型类
public class ProfileSettingsModel
{
    public string UserFilter { get; set; } // 对应前端的user_filter字段
    public string UserTestFilter { get; set; } // 对应前端的user_test_filter字段
}

// 修改API接口方法
[HttpPut("user/profile/settings")]
public IActionResult UpdateProfileSettings([FromBody] ProfileSettingsModel settings)
{
    // 直接使用settings.UserFilter和settings.UserTestFilter即可,就是前端传的JSON字符串
    // ...你的业务逻辑代码
    return Ok();
}

前端这边只需要正常序列化Settings对象发送,不用额外包裹任何引号:

const settings = { 
  user_filter: JSON.stringify(filterObj), 
  user_test_filter: JSON.stringify(testFilterObj) 
};
const requestBody = JSON.stringify(settings);

fetch("/api/user/profile/settings", {
  method: "PUT",
  headers: { "Content-Type": "application/json" },
  body: requestBody
});

这种方式符合REST API的设计规范,后续维护也更方便。

关键注意点

  • 必须确保请求头的Content-Type设置为application/json,否则后端可能不会用JSON解析器处理请求体,直接导致解析失败。
  • 绝对不要用单引号包裹请求体,JSON规范只允许双引号作为字符串的边界,单引号会让解析器直接抛出格式错误。

内容的提问来源于stack exchange,提问作者mcc20

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:45:46