Asp.net 如何使用Web API属性路由传递DateTime参数?

Asp.net 如何使用Web API属性路由传递DateTime参数?,asp.net,datetime,asp.net-web-api,routing,Asp.net,Datetime,Asp.net Web Api,Routing,我正在使用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

我正在使用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不希望将其作为日期时间,并且不知道如何使用它。所以我使用了IHttpRouteConstraint来允许它。 问题是,在我告诉它没事后,它仍然不知道如何处理它


所以我的问题是,如何将日期时间传递给路由?

问题是:路径中是否有URL保留字符。MVC不希望它是URL编码的,也不会处理它。但是,它在查询字符串中不是保留的

将其从路由规范中删除,但将其作为参数保留在方法中,模型绑定器将绑定它们。或者,您也可以将它们作为参数删除,并通过上下文查询字符串属性或ControllerContext.Request.GetQueryNameValuePairs()访问它们


那么您应该有?fromDate=2012-01-01T1:45:30PM&toDate=2013-01-01T1:45:30PM

您是否尝试对请求url进行编码?例如,如果您将此字符串编码为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,它会自动完成。好的。如何使您的日期字符串与兼容。你能检查一下是否有效吗?下面是一个以该格式表示的示例日期字符串:2008-04-10 13:30:00ZThanks!我尝试了msdn()中描述的u、o和s格式,您要引用的是u。不幸的是,这样也没有运气。。。我认为必须有一个地方告诉框架使用哪种格式或类似的东西。或者,至少有一种方法可以获取该数据并将其转换为DateTimeOne方法来克服此问题,即在客户端将datetime对象转换为UTC,然后在webapi中从UTC转换回datetime。