我正在使用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传递给路线?
答案 0 :(得分:4)
问题在于:是路径中的URL保留字符。 MVC不期望它是URL编码的,也不会处理它。但是,未在查询字符串中保留。
从路由规范中删除它,但将它们作为参数保留在方法中,模型绑定器将绑定它们。或者,您也可以将它们作为参数删除,并通过Context查询字符串属性或ControllerContext.Request.GetQueryNameValuePairs()访问它们。
所以你会有吗?fromDate = 2012-01-01T1:45:30 PM& toDate = 2013-01-01T1:45:30 PM