调用ASP.NET Core API POST接口报错JSON值无法转换为System.String如何解决
报错原因
- 你的后台
Account接口的POST方法中,使用[FromBody]标记的接收参数类型为string,但请求传递的是结构化JSON对象,不是JSON字符串格式。 - ASP.NET Core自带的模型绑定系统会默认尝试将传入的请求体内容反序列化为参数指定的类型,JSON对象无法直接转换为
System.String,因此触发该报错。
修复方案
分两种场景选择对应方案:
场景1:需要解析传入的账号字段(推荐)
这是常规业务场景,直接通过强类型模型接收参数即可:
- 首先定义和请求JSON结构匹配的DTO(数据传输对象)类:
public class AccountCreateRequest { public string EmailAddress { get; set; } public string Username { get; set; } public string Password { get; set; } public string Status { get; set; } public DateTime CreatedOn { get; set; } }
- 修改POST方法的参数类型为上述定义的DTO类:
[HttpPost] public void Post([FromBody] AccountCreateRequest value) { // 后续业务可以直接读取value的属性,比如value.EmailAddress var x = string.Empty; }
场景2:需要直接接收原始JSON字符串
如果业务需要先拿到完整的JSON字符串再自行处理,可以选择以下任意一种方式:
- 前端调整请求体:将整个JSON对象转为字符串后再发送,比如请求体内容改为
"{\"EmailAddress\": \"hello@example.com\", \"Username\": \"example\", ...}",保持参数类型为string即可正常接收。 - 后端直接读取原始请求体:不需要声明[FromBody]参数,直接在方法内读取
Request.Body的流内容获取原始JSON字符串。
内容的提问来源于stack exchange,提问作者Red Virus
相关产品推荐
相关产品推荐

