【问题标题】:ASP.NET Web API datetime bindingASP.NET Web API 日期时间绑定
【发布时间】: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" }

【问题讨论】:

    标签: asp.net-mvc asp.net-web-api data-binding binding asp.net-apicontroller


    【解决方案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());感谢您的帮助
    • 完整解决方案在这里:stackoverflow.com/questions/29577796/…
    猜你喜欢
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 2014-02-19
    • 2012-06-06
    相关资源
    最近更新 更多