2013-01-31 68 views
2

我正在从Web API读取数据并填充表单。当我提交回的Web API,我得到这个错误:将日期发布到Web API的正确方法是什么?

{"Message":"An error has occurred.","ExceptionMessage":"Property 'StartDate' on type 'MvcApplication1.Models.ProductSale' is invalid. Value-typed properties marked as [Required] must also be marked with [DataMember(IsRequired=true)] to be recognized as required. Consider attributing the declaring type with [DataContract] and the property with [DataMember(IsRequired=true)].","ExceptionType":"System.InvalidOperationException","StackTrace":" at System.Web.Http.Validation.Validators.ErrorModelValidator.Validate(ModelMetadata metadata, Object container)\r\n at System.Web.Http.Validation.DefaultBodyModelValidator.ShallowValidate(ModelMetadata metadata, ValidationContext validationContext, Object container)\r\n
at System.Web.Http.Validation.DefaultBodyModelValidator.ValidateProperties(ModelMetadata metadata, ValidationContext validationContext)\r\n at System.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren(ModelMetadata metadata, ValidationContext validationContext, Object container)\r\n
at System.Web.Http.ModelBinding.FormatterParameterBinding.<>c_DisplayClass1.b_0(Object model)\r\n at System.Threading.Tasks.TaskHelpersExtensions.<>c_DisplayClass49.b_48()\r\n at System.Threading.Tasks.TaskHelpers.RunSynchronously[TResult](Func`1 func, CancellationToken cancellationToken)"} 1

我的日期在网页API为 “2013-01-31T16:27:18.503”,并会回为“2013-01-31T05:00 :00.000Z”。我可以在发送到Web API之前拦截有效负载,并可以使用类似http://momentjs.com的内容来解析它,但我应该怎么做?这让我疯狂!

+0

如果您正在寻找解决方案,请尝试在该属性上应用[DataContract]属性以及[DataMember(IsRequired = true)]。另请参阅这两个问题:http://stackoverflow.com/questions/12234582/mvc4-rtm-validation-throwing-an-error,http://stackoverflow.com/questions/14079049/asp-net-web-api-验证-datacontract-和数据成员,需要 –

回答

1

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

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

某处这似乎出错了。不知道你的格式化程序,你在日期上做了什么以及它如何变化无法说出。

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

0

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

相关问题