【问题标题】:How to pass DateTime parameter using Web API attribute routing?如何使用 Web API 属性路由传递 DateTime 参数?
【发布时间】: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


【解决方案1】:

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

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

所以你会有 ?fromDate=2012-01-01T1:45:30PM&toDate=2013-01-01T1:45:30PM

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 2014-03-02
    • 2017-06-26
    • 2014-05-11
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    相关资源
    最近更新 更多