【问题标题】:Correct way to post dates to Web API?将日期发布到 Web API 的正确方法?
【发布时间】:2013-01-15 20:24:17
【问题描述】:

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

{"Message":"发生错误。","ExceptionMessage":"属性 'MvcApplication1.Models.ProductSale' 类型上的 'StartDate' 无效。 标记为 [Required] 的值类型属性也必须标记为 [DataMember(IsRequired=true)] 按要求被识别。考虑 使用 [DataContract] 和属性赋予声明类型 和 [DataMember(IsRequired=true)].","ExceptionType":"System.InvalidOperationException","StackTrace":" 在 System.Web.Http.Validation.Validators.ErrorModelValidator.Validate(模型元数据 元数据,对象容器)\r\n at System.Web.Http.Validation.DefaultBodyModelValidator.ShallowValidate(ModelMetadata 元数据、ValidationContext 验证上下文、对象容器)\r\n
在 System.Web.Http.Validation.DefaultBodyModelValidator.ValidateProperties(模型元数据 元数据,ValidationContext 验证上下文)\r\n 在 System.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren(ModelMetadata 元数据、ValidationContext 验证上下文、对象容器)\r\n
在 System.Web.Http.ModelBinding.FormatterParameterBinding.c_DisplayClass1.b_0(Object 型号)\r\n 在 System.Threading.Tasks.TaskHelpersExtensions.c_DisplayClass49.b_48()\r\n 在 System.Threading.Tasks.TaskHelpers.RunSynchronously [TResult](Func`1 func, CancellationToken cancelToken)"} 1

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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    这似乎是哪里出了问题。不知道你的格式化程序,你在约会时做了什么以及它如何变化是不可能的。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-23
      • 1970-01-01
      • 1970-01-01
      • 2012-12-21
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      相关资源
      最近更新 更多