ASP.NET Core 5 MVC 无法为我的 DTO 绑定 DateTime 属性 建模? ASP.NET 核心模型绑定过程是否存在任何已知问题?

ASP.NET Core 5 MVC not able to model bind DateTime property of my DTO ? Is there any known problem with ASP.NET core model binding process?

这是我的场景 -

我正在尝试 post 具有以下结构的 json 对象使用 angular 12 到 MVC 控制器操作方法。

public class Student{
   public string FullName {get;set;}
   public int Age {get;set;}
   public DateTime BirthDate {get;set;}
}

我已经使用 [FromBody] 属性修饰了我的 MVC 操作方法参数。

但是,当我尝试将 post json 对象添加到我的操作中时,模型只是拒绝绑定(模型对象为空)

接下来,我尝试从 DateTime => string 更改 BirthDate,并观察到模型已正确绑定。

模型活页夹是否存在任何已知问题,或者我是否缺少任何需要启用的与日期时间相关的配置?

我的行动

[HttpPost]
public JsonResult Save1([FromBody] Student st) 
{ 
  return Json(st); 
}

Angular代码

this._http.post<any>("../../TupleBinderAPI/Save1", {
  fullName: this.FullName,
  age: this.Age,
  birthDate: this.BirthDate
}, {
  headers: {
    ["Content-Type"]: "application/json; charset=UTF-8"
  }
}).subscribe((data: any) => {

  console.log(data);
});

我这边测试发现,当我设置输入值为“2020-1-12”时,不会绑定DateTime类型,但是可以绑定string.

但是,如果我将值设置为“2020-01-12”,那么它可以成功绑定到 DateTime 类型。

由于我没有找到任何官方文件来说明它,所以依我的拙见,你的问题可能来自this.BirthDate的格式不正确,你可以检查变量的值。我们通常将DateTime格式化为“yyyy-MM-dd”,所以像这种字符串格式可能可以自动转换为DateTime类型,但其他格式则不能。如果你坚持使用你的数据时间格式,你可以在这里使用自定义模型绑定,但我认为这会增加工作量。

问题已由王老师诊断并详细说明。在将数据发送到服务之前,您需要更改 angular 的日期格式。

您可以使用 DatePip 模块 - https://angular.io/api/common/DatePip

下面是更改日期格式的示例代码。

import { DatePipe } from '@angular/common'
...
constructor(public datepipe: DatePipe){}
...
myFunction(){
 this.date=new Date();
 let latest_date =this.datepipe.transform(this.date, 'yyyy-MM-dd');
}

你可以查看下面的帖子