调用Events更新接口返回400:JSON无法转换为TheMoonshineCafe.Models.Event类型
问题根因及修复方案
核心错误:请求Payload类型不匹配
你前端editEvent函数的第二个参数定义为EventWithID[](数组类型),但后端PutEvent接口预期接收的是单个Event对象。给需要单个对象的接口传入数组,JSON反序列化第一步就会失败,你收到的报错提示BytePositionInLine: 1就是因为JSON首个字符是数组的[,而框架预期是对象的{,直接触发转换失败。
修复:将editEvent的参数定义改为单个对象类型event: EventWithID,调用该函数时传入单个事件对象,不要传入数组。潜在错误:后端接口缺失[FromBody]注解
ASP.NET Core处理PUT请求时,默认不会主动从请求体中读取JSON绑定到参数,需要显式给接收参数添加[FromBody]注解,否则框架会优先从路由、表单字段取值,找不到对应值就会报反序列化错误。
修复:修改后端接口参数定义如下:public async Task<ActionResult<Event>> PutEvent(int id, [FromBody] Event @event)兼容问题:类型与日期格式不匹配
- 前端
EventWithID类中字符串类型使用了大写String,建议改为TS标准的小写string;ticketPrice字段前后端分别为number和double,对齐类型可避免隐式转换异常。 - 前端
Date类型序列化后的格式如果和后端DateTime的解析规则不兼容,也会触发反序列化失败,建议前端传值时将日期转换为UTC格式的ISO字符串,或者后端配置JSON序列化规则兼容前端的日期格式。
- 前端
验证方法
打开浏览器F12开发者工具,切换到网络面板,找到对应的PUT请求查看请求Payload:如果Payload以[开头说明仍为数组格式,修复正常后Payload应以{开头,为单个对象结构,且字段和后端Event类的字段一一对应。
内容的提问来源于stack exchange,提问作者Derek S
相关产品推荐
相关产品推荐

