项目场景:
WebApi .netCore 3.1 架构,定义一个添加用户接口。代码如下。
[Route("api/[controller]")]
[ApiController]
public class DateTimeTController : ControllerBase
{
/// <summary>/// Post 接口,参数为DateTime类型/// </summary>/// <param name="value"></param>[HttpPost]public bool Post([FromBody] UserModel value){
if (value.ID < 0){
return false;}// ...业务处理return true;}
}
public class UserModel
{
public int ID {
get; set; }public string Name {
get; set; }public DateTime CreateTime {
get; set; }
}
问题描述:
调试接口,向接口传以下参数。接口返回状态码 400,报错“The JSON value could not be converted to System.DateTime”。
{"id": 0,"name": "TestName","createTime": "2020-01-01 06:53:10"
}
原因分析:
状态码 400 原因:json无法正常解析DateTime格式。
可是 “2020-01-01 06:53:10” 格式是正确的,为什么无法解析呢?
原来 微软为了提高执行效率,将 System.Text.Json 作为内置 json 处理,但只识别 “2020-01-01T06:53:10” 这种格式 的时间值。
解决方案:
两种解决方案:
?1. 时间类型传参格式 :日期与时间中间添加 T 字符,举例:“2020-01-01T06:53:10”。
?2. 修改程序配置:不推荐
??在startup.cs 配置文件中修改配置。提示:需要安装Microsoft.AspNetCore.Mvc.NewtonsoftJson。
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers().AddNewtonsoftJson();
}