"Cannot convert value to NodaTime.LocalDateTime"
"Cannot convert value to NodaTime.LocalDateTime"
我正在使用 .Net Core 3.1 作为我的框架。
我在启动时有这个设置:
using NodaTime;
using NodaTime.Serialization.SystemTextJson;
services.AddControllers()
.AddJsonOptions(options =>
{
var settings = options.JsonSerializerOptions;
settings.AllowTrailingCommas = false;
settings.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb);
settings.WithIsoDateIntervalConverter();
settings.WithIsoIntervalConverter();
});
这是我的 API 模型:
public class CreateDto
{
public int Status { get; set; }
public Guid ApprovedBy { get; set; }
public LocalDateTime DateFrom { get; set; }
public LocalDateTime DateTo { get; set; }
}
这是我的控制器:
[HttpPost]
public async Task<IActionResult> Create([FromBody] CreateDto createEntity)
{
var createdEntity = await _service.Create(createEntity);
return Ok(createdEntity);
}
每次我使用 Postman 时 JSON 正文:
{
"Status": 1,
"ApprovedBy": "970a50c5-ae21-4f41-bea9-691f8c60224c",
"DateFrom": "2020-04-01T00:00:00.000Z",
"DateTo": "2020-04-05T23:59:59.000Z"
}
我总是遇到这个错误:
{
"errors": {
"DateTo": [
"Cannot convert value to NodaTime.LocalDateTime"
],
"DateFrom": [
"Cannot convert value to NodaTime.LocalDateTime"
]
},
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "|4a836dd3-4ce779bc5503ac63."
}
问题:我的启动配置是否遗漏了什么?如果没有,我该如何解决这个错误?
您的 JSON 不代表 LocalDateTime
值 - 它代表 Instant
(或 OffsetDateTime
)值,因为最后的 "Z" .
所以你的选择是:
- 将模型中的类型更改为
Instant
或 OffsetDateTime
- 更改您要发送的数据 - 只需删除每个字符串末尾的 'Z'
我正在使用 .Net Core 3.1 作为我的框架。
我在启动时有这个设置:
using NodaTime;
using NodaTime.Serialization.SystemTextJson;
services.AddControllers()
.AddJsonOptions(options =>
{
var settings = options.JsonSerializerOptions;
settings.AllowTrailingCommas = false;
settings.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb);
settings.WithIsoDateIntervalConverter();
settings.WithIsoIntervalConverter();
});
这是我的 API 模型:
public class CreateDto
{
public int Status { get; set; }
public Guid ApprovedBy { get; set; }
public LocalDateTime DateFrom { get; set; }
public LocalDateTime DateTo { get; set; }
}
这是我的控制器:
[HttpPost]
public async Task<IActionResult> Create([FromBody] CreateDto createEntity)
{
var createdEntity = await _service.Create(createEntity);
return Ok(createdEntity);
}
每次我使用 Postman 时 JSON 正文:
{
"Status": 1,
"ApprovedBy": "970a50c5-ae21-4f41-bea9-691f8c60224c",
"DateFrom": "2020-04-01T00:00:00.000Z",
"DateTo": "2020-04-05T23:59:59.000Z"
}
我总是遇到这个错误:
{
"errors": {
"DateTo": [
"Cannot convert value to NodaTime.LocalDateTime"
],
"DateFrom": [
"Cannot convert value to NodaTime.LocalDateTime"
]
},
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "|4a836dd3-4ce779bc5503ac63."
}
问题:我的启动配置是否遗漏了什么?如果没有,我该如何解决这个错误?
您的 JSON 不代表 LocalDateTime
值 - 它代表 Instant
(或 OffsetDateTime
)值,因为最后的 "Z" .
所以你的选择是:
- 将模型中的类型更改为
Instant
或OffsetDateTime
- 更改您要发送的数据 - 只需删除每个字符串末尾的 'Z'