状态: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();
            
            ......

javascript

  this.http.put(this.baseUrl + 'api/Events', event).subscribe(result => 
 ....

我强烈推荐使用 post 而不是 put。

【讨论】:

我已尝试修复操作和数据服务(打字稿),但现在出现错误:错误 CS1503:参数 2:无法从“int”转换为“System.Threading.CancellationToken” @DerekS 您是否在调试器中签入该模型不为空? @DerekS 抱歉,我在代码中发现了一个错字,请检查我更新后的答案。 谢谢,这为我们解决了问题。 @DerekS 欢迎您!如果它有用,请不要忘记接受答案。用户应该知道。您可以通过单击答案一侧的复选标记来接受答案。

以上是关于状态:400 标题:“发生一个或多个验证错误。”的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 R 中的 DSE 包模拟卡尔曼滤波器的后验滤波估计

请求失败,状态码 400

Postman HTTP 状态 400 - 为啥?

HTTP 状态 400 - 错误请求 - 休眠

如何从 400 覆盖 @NotNull HTTP 状态代码

错误:EntityTooLarge 状态 400 AmazonAWS