【发布时间】:2014-12-20 14:22:10
【问题描述】:
我在我的查询字符串中发送一个 UTC 日期,例如
&EndDate=2000-01-02T03%3a04%3a05.0060000Z
我的控制器参数将它绑定在一个复杂的对象中,例如
public async Task<DocumentsRequest> GetEchoFromUriDocumentsAsync(
[FromUri] DocumentsRequest request)
{
return request;
}
我设法弄清楚的是,我的对象在参数绑定后将我的 UTC 日期更改为本地日期 + 偏移量。这是我的测试用例的sn-p
[TestMethod]
public void Should_generate_querystring_and_parameter_bind_correctly()
{
DocumentsRequest request = DocumentRequestBuilder.DocumentsRequest();
string queryString = ReflectionQueryStringConverter.ToQueryString(request);
string baseUrl = "http://baseUrl/Test/EchoFromUriDocuments";
string uri = baseUrl + queryString;
HttpResponseMessage response = _client.GetAsync(uri).Result;
string outputString = response.Content.ReadAsStringAsync().Result;
JsonSerializer<DocumentsRequest> serializer =
new JsonSerializer<DocumentsRequest>();
DocumentsRequest output = serializer.DeserializeFromString(outputString);
output.EndDate.Should().Be(request.EndDate);
}
以上失败,因为输出是:
2000-01-01T19:04:05.006-08:00
但是,json 序列化随后会截断偏移量并假定它是 UTC 日期...如您所见,日期在往返后不匹配。
这里有一个类似的问题,但不是真正的答案(发帖者回答的是自己的问题)
Passing UTC DateTime to Web API HttpGet Method results in local time
解决此问题的正确解决方案是什么?我认为问题是我希望参数绑定将查询字符串解析为 UTC 日期。 TypeConverter 是要走的路吗?任何人都有如何做到这一点的完整示例?我是否必须在我的所有类的所有属性上使用 DateTime 的 TypeConverter?我希望有一个全局配置。
谢谢。
【问题讨论】:
-
我发现您链接的问题有一个很好的答案(它似乎是在您的问题之前创建的,但尽管在此期间获得了最多的选票,但并未标记为已接受的答案):stackoverflow.com/a/24899562/125407跨度>
标签: c# datetime asp.net-web-api model-binding utc