状态:400 标题:“发生一个或多个验证错误。”
Posted
技术标签:
【中文标题】状态:400 标题:“发生一个或多个验证错误。”【英文标题】:status: 400 title: "One or more validation errors occurred." 【发布时间】:2021-11-27 22:40:25 【问题描述】:我目前收到 400 错误代码,但我不太明白出了什么问题。我试图在网上搜索答案,但没有一个结果有太大帮助。任何帮助/见解将不胜感激。谢谢。
无法将 JSON 值转换为 TheMoonshineCafe.Models.Event。路径:$ |行号:0 | BytePositionInLine:1。
似乎负载没有正确转换为事件类型?
从我的数据服务编辑事件函数:
editEvent(id: Number, event: EventWithID[])
var callResult : any;
console.log(id);
console.log(event);
this.http.put(this.baseUrl + 'api/Events/' + id, event).subscribe(result =>
callResult = result;
console.log(result);
)
从我的 API 中放置事件:
[HttpPut("id")]
public async Task<ActionResult<Event>> PutEvent(int id, Event @event)
if (id != @event.id)
return BadRequest();
_context.Entry(@event).State = EntityState.Modified;
try
await _context.SaveChangesAsync();
catch (DbUpdateConcurrencyException)
if (!EventExists(id))
return NotFound();
else
throw;
return NoContent();
有效载荷:
export class EventWithID
id: number;
eventStart: Date;
eventEnd: Date;
refundCutOffDate: Date;
bandName: String;
bandImagePath: String;
bandLink: String;
maxNumberOfSeats: number;
currentNumberOfSeats: number;
ticketPrice: number;
description: String;
模型.事件:
public class Event
public int id get; set;
public DateTime eventStart get; set;
public DateTime eventEnd get; set;
public DateTime refundCutOffDate get; set;
public string bandName get; set;
public string bandImagePath get; set;
public string bandLink get; set;
public int maxNumberOfSeats get; set;
public int currentNumberOfSeats get; set;
public double ticketPrice get; set;
public string description get; set;
【问题讨论】:
你为什么要对你的有效载荷进行字符串化?此外,您不需要那个内容类型的标题.. 当我删除它们时,我收到状态 400 错误。我看到其他一些人对有效负载进行字符串化并使用内容类型标头,所以我想知道是否需要包含类似的内容。我对创建、读取和删除所有工作感到有些困惑,所以 Put 也应该工作。 有了正确的设置,你也不应该需要...... 好吧,我想我必须弄清楚这个 400 错误,谢谢。只是非常令人困惑,其他一切都有效。 【参考方案1】:修正动作
public async Task<ActionResult<Event>> PutEvent(Event model)
if(model.Id==0) return BadRequest("Wrong Id");
var existedEvent= await _context.Set<Event>().FirstOrDefaultAsync(i=> i.Id==model.Id);
if (existedEvent==null ) return BadRequest("Record not found");
_context.Entry(existedEvent).CurrentValues.SetValues(model);
try
await _context.SaveChangesAsync();
......
this.http.put(this.baseUrl + 'api/Events', event).subscribe(result =>
....
我强烈推荐使用 post 而不是 put。
【讨论】:
我已尝试修复操作和数据服务(打字稿),但现在出现错误:错误 CS1503:参数 2:无法从“int”转换为“System.Threading.CancellationToken” @DerekS 您是否在调试器中签入该模型不为空? @DerekS 抱歉,我在代码中发现了一个错字,请检查我更新后的答案。 谢谢,这为我们解决了问题。 @DerekS 欢迎您!如果它有用,请不要忘记接受答案。用户应该知道。您可以通过单击答案一侧的复选标记来接受答案。以上是关于状态:400 标题:“发生一个或多个验证错误。”的主要内容,如果未能解决你的问题,请参考以下文章