【问题标题】:status: 400 title: "One or more validation errors occurred."状态:400 标题:“发生一个或多个验证错误。”
【发布时间】: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 错误,谢谢。只是非常令人困惑,其他一切都有效。

标签: javascript c# .net angular typescript


【解决方案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 欢迎您!如果它有用,请不要忘记接受答案。用户应该知道。您可以通过单击答案一侧的复选标记来接受答案。
猜你喜欢
  • 2014-12-08
  • 2018-11-24
  • 2014-03-07
  • 1970-01-01
  • 1970-01-01
  • 2013-02-13
  • 1970-01-01
  • 1970-01-01
  • 2011-02-06
相关资源
最近更新 更多