将日期发布到Web API的正确方法?

时间:2013-01-31 16:42:36

标签: asp.net-mvc json parsing datetime asp.net-web-api

我正在从Web API读取数据并填充表单。当我将其提交回Web API时,我收到此错误:

  

{“消息”:“发生了错误。”,“ExceptionMessage”:“属性   类型'MvcApplication1.Models.ProductSale'上的'StartDate'无效。   标记为[必需]的值类型属性也必须标记为   [DataMember(IsRequired = true)]被识别为必需。考虑   使用[DataContract]和属性归因声明类型   同   [数据成员(IsRequired =真)] “” ExceptionType。 “:” System.InvalidOperationException “ ”堆栈跟踪“:”   在   System.Web.Http.Validation.Validators.ErrorModelValidator.Validate(ModelMetadata   元数据,对象容器)\ r \ n at   System.Web.Http.Validation.DefaultBodyModelValidator.ShallowValidate(ModelMetadata   metadata,ValidationContext validationContext,Object container)\ r \ n
  在   System.Web.Http.Validation.DefaultBodyModelValidator.ValidateProperties(ModelMetadata   元数据,ValidationContext validationContext)\ r \ n at   System.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren(ModelMetadata   metadata,ValidationContext validationContext,Object container)\ r \ n
  在   System.Web.Http.ModelBinding.FormatterParameterBinding<> C_ DisplayClass1.b _0(对象   模特)\ r \ n at   System.Threading.Tasks.TaskHelpersExtensions<> C_ DisplayClass49.b _48(个)\ r \ n   在System.Threading.Tasks.TaskHelpers.RunSynchronously [TResult](Func`1   func,CancellationToken cancellationToken)“} 1

我的日期是Web API为“2013-01-31T16:27:18.503”,并回复为“2013-01-31T05:00:00.000Z”。我可以在发送到Web API之前拦截有效负载,并且可以使用http://momentjs.com之类的东西来解析它,但我该怎么办?这让我疯了!

2 个答案:

答案 0 :(得分:1)

2013-01-31T16:27:18.503是根据XML spec的XML日期。

2013-01-31T05:00:00.000Z似乎是ISO 8601日期。

某处似乎出了问题。在不了解格式化程序的情况下,您在日期中所做的事情以及无法改变的方式。

日期格式取决于您的格式化程序。如果您使用JSON格式化程序,则可能会有所不同。

答案 1 :(得分:0)

错误消息有答案。您发布的数据没有任何问题。只需将DataMember(IsRequired = true)属性放在ProductSales的StartDate属性上,即可使验证更快乐。