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 日期时间绑定的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Web API JSON 输出中没有时间的日期
如何使用客户端的时区将 asp.net 日期时间反序列化为 JSON 日期时间