ASP.NET Web API 日期时间绑定

Posted

技术标签:

【中文标题】ASP.NET Web API 日期时间绑定【英文标题】:ASP.NET Web API datetime binding 【发布时间】:2016-02-03 11:06:13 【问题描述】:

我向 API 控制器提交带有日期值“02/11/2015”(DD/MM/YYYY) 的 JSON 对象。由于某种原因,它在装订时被转换为美国格式(2 月 11 日)。我在同一个解决方案中有标准的 MVC 控制器,它正确地绑定了以相同格式提交的日期值(英国)。造成这种差异的原因是什么:

这里是标准的 MVC 提交标头:

Accept:*/*
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8,pl;q=0.6
Cache-Control:no-cache
Connection:keep-alive
X-Requested-With:XMLHttpRequest

和表单数据

StartDate : 01/11/2015

这里是 API 调用标头

Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8,pl;q=0.6
Cache-Control:no-cache
Connection:keep-alive
Content-Type:application/json; charset=UTF-8
X-Requested-With:XMLHttpRequest

我传递的 JSON 对象

 DateStart: "01/11/2015" 

【问题讨论】:

【参考方案1】:

我猜 webapi json 序列化器中默认的 dateFormat 和 MVC 的不一样。

尝试在配置文件(App_start/WebApiConfig)中指定你的WebApi。

例子:

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.DateFormatHandling = Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat;

或者 GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.DateFormatString = "yyyy-MM-dd"

使用你需要的 DateFormat、DateZone。

更多信息在这里:

Post dates web api custom format

【讨论】:

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.DateFormatString = "yyyy-MM-dd"在你的webapiconfig文件的注册方法中没有改变格式? 最终使用 DateTime 类型的自定义转换器使其工作: config.Formatters.JsonFormatter.SerializerSettings.Converters.Insert(0, new MyDateTimeConverter());感谢您的帮助 完整解决方案在这里:***.com/questions/29577796/…

以上是关于ASP.NET Web API 日期时间绑定的主要内容,如果未能解决你的问题,请参考以下文章