【发布时间】:2014-01-21 02:36:34
【问题描述】:
我正在使用 ASP.NET Web API 2 开发 REST API。 当我尝试将日期集成到游戏中时,事情变得很糟糕。
路线如下:
[Route("{id:Guid}/{from:DateTime}/{to:DateTime}")]
当我这样做时,我可以完美地通过类似的东西
.../[id]/2012-01-01/2013-01-01
但是,当我需要时间信息时,情况变得非常糟糕,让我们想象一下:
.../[id]/2012-01-01/2013-01-01 1:45:30 PM/2013-01-01 1:45:30 PM
似乎空格没问题,但“:”被阻塞了。所以我虽然我应该使用我自己的格式,是 yyyyMMddhhmm。这给出了以下 URL:
.../[id]/201301031147/201401031147
然而,.NET 并不期望这是一个 DateTime 并且不知道如何使用它。所以我使用了 IHttpRouteConstraint 来允许它。 问题是我告诉它没事后它还是不知道怎么处理……
所以我的问题是,如何将 DateTime 传递给路由?
【问题讨论】:
-
您是否尝试对您的请求网址进行编码?例如,如果你编码这个字符串 2013-01-01 1:45:30 PM/2013-01-01 1:45:30 PM 你会得到这个 2013-01- 01%201%3A45%3A30%20PM%2F2013-01-01%201%3A45%3A30%20PM
-
您好,感谢您的回复!我实际上在客户端使用 RestSharp,它会自动执行此操作。
-
好的。如何让您的日期字符串与The Universal Sortable Format 兼容。你能检查一下这是否有效吗?这是以该格式表示的示例日期字符串:2008-04-10 13:30:00Z
-
再次感谢!我尝试了 msdn (msdn.microsoft.com/fr-fr/library/zdtaw1bw(v=vs.110).aspx) 中描述的 u、o 和 s 格式,您引用的是 u。不幸的是,这种方式也没有运气......我认为必须有一个地方告诉框架使用哪种格式或类似的东西。或者至少是一种获取该数据并将其自己转换为 DateTime 的方法
-
解决此问题的一种方法是在客户端将 datetime 对象转换为 UTC,然后在 webapi 中从 UTC 转换回 datetime。
标签: asp.net datetime asp.net-web-api routing