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 Core 中为日期绑定设置文化?

ASP.NET Web API 授权令牌提前到期

如何使用客户端的时区将 asp.net 日期时间反序列化为 JSON 日期时间

生成的 Excel 文件在不同系统中显示不同的日期值(Asp.net Web 应用程序)

ASP.NET Web API - 模型绑定不适用于 POST 上的 XML 数据