Asp.net web api 在WebAPI模型中使用NodeTime Instant总是无法验证

Asp.net web api 在WebAPI模型中使用NodeTime Instant总是无法验证,asp.net-web-api,json.net,nodatime,Asp.net Web Api,Json.net,Nodatime,我的WebAPI v4端点的一个模型的字段类型为NodaTime.Instant。模型验证总是报告此操作失败(Model.IsValid==false),并显示错误消息“意外的令牌解析瞬间。预期的字符串,获取的日期。”这显然来自 请求消息实际上以包含ISO-8601日期的字符串形式传递即时,因此在NodaTime获取请求消息之前,它必须在某个时刻被解析为BCLDateTime。我尝试使用OffsetDateTime和LocalDateTime,但在每种情况下都会出现类似的错误 那我在这里该怎么办

我的WebAPI v4端点的一个模型的字段类型为
NodaTime.Instant
。模型验证总是报告此操作失败(
Model.IsValid==false
),并显示错误消息“意外的令牌解析瞬间。预期的字符串,获取的日期。”这显然来自

请求消息实际上以包含ISO-8601日期的字符串形式传递
即时
,因此在NodaTime获取请求消息之前,它必须在某个时刻被解析为BCL
DateTime
。我尝试使用
OffsetDateTime
LocalDateTime
,但在每种情况下都会出现类似的错误

那我在这里该怎么办?我是否应该传递除即时<代码>以外的内容?是否有其他方法来处理不会导致此错误的解析或验证

我在下面包括了一个最小的复制。如果您使用类似于
{“SomeInstant”:“2013-08-13T17:51:22.1705292Z”的请求主体发布到它,它应该会失败


多亏了Twitter的乐趣,看起来这只是在Json.NET中禁用自动日期时间处理的问题

[...]JsonFormatter.SerializerSettings.DateParseHandling = DateParseHandling.None
有可能我们应该修复配置方法来自动执行此操作


请注意,这也将禁用处理
“Date(…)”
值,因此您需要小心处理。当然,如果您完全控制了调用方,这应该不会是一个问题。

恐怕我对Json.NET和WebAPIv4的使用方式了解不够,无法了解这是如何工作的。如果错误消息提到的是
Date
,而不是
DateTime
,听起来它可能没有实际解析它,但在JSON中它被识别为
Date
。嗯。添加json.net标记,因为这看起来可能是相关的…这就解决了它,谢谢!我检查过了,使用此设置,您仍然可以在API中使用BCL DateTime,只要它们使用ISO-8601格式。不管怎样,思维正确的API都应该这样做。看起来像是Json.NET4.5.4中添加了
DateParseHandling
。我们在Json.NET4.0.8上构建了NodaTime.Serialization.JsonNet。我们或许应该重新审视它。
[...]JsonFormatter.SerializerSettings.DateParseHandling = DateParseHandling.None