我try 将UTC日期作为查询字符串参数传递给Web API方法.URL如下所示

/api/order?endDate=2014-04-01T00:00:00Z&zoneId=4

The signature of the method looks like

[HttpGet]
public object Index(int zoneId, DateTime? endDate = null)

The date is coming in as 31/03/2014 8:00:00 PM but I'd like it to come in as 01/04/2014 12:00:00 AM

My JsonFormatter.SerializerSettings looks like this

new JsonSerializerSettings
{
    ContractResolver = new CamelCasePropertyNamesContractResolver(),
    DateTimeZoneHandling = DateTimeZoneHandling.Utc,
    DateFormatHandling = DateFormatHandling.IsoDateFormat
};

编辑#1:

推荐答案

The query string parameter value you are sending 2014-04-01T00:00:00Z is UTC time. So, the same gets translated to a time based on your local clock and if you call ToUniversalTime(), it gets converted back to UTC.

那么,问题到底是什么?如果问题是,如果作为查询字符串发送,而不是在请求正文中发布,为什么会发生这种情况,那么这个问题的答案就是ASP.NETWebAPI使用model binding绑定URI路径、查询字符串等,使用parameter binding绑定正文.对于后者,它使用媒体格式化程序.如果发送JSON,将使用JSON媒体格式化程序,它基于JSON.网

由于您已经指定了DateTimeZoneHandling.Utc,因此它将使用该设置,您将获得所需的日期时间类型.顺便说一句,如果您将此设置更改为DateTimeZoneHandling.Local,那么您将看到与模型绑定相同的行为.

Json相关问答推荐

如何在JMESPath中区分空和假?

使用jolt删除空对象

在T—SQL中将STR_AGG与JSON_ARRAY结合起来

如何使用JQ将JSON字符串替换为解析后的类似功能?

通过在织女星简化图上裁剪来显示文本

使用JQ在数组中 Select 第一个具有匹配项的项

VBA json按特定属性名称提取所有数据

将JSON数组组织到菜单中

Jolt-Json转换:通过引用标识符(而不是索引)设置值

将 REST API - json 输出转换为表 Power BI

德纳比可视化区域图表 Power BI

如何在循环中传递列表(会话(字符串属性))以在 Gatling Scala 中创建批量 Json 请求

使用 jq 获取特定键的所有父键

将嵌套的 JSON 对象规范化为 Pandas 数据框

apple-app-site-association json 文件是否会在应用程序中更新?

在 JSON 编码的 HTML5 数据属性中转义/编码单引号

如何将 Swift 对象转换为字典

JSON.parse 返回字符串而不是对象

雅虎财经全币种报价 API 文档

Volley JsonObjectRequest Post 参数不再起作用