【发布时间】:2013-08-05 21:06:48
【问题描述】:
我在获取 WebAPI 接受的日期范围查询时遇到了一些问题。据我所知,这应该可以正常工作,但我仍然收到 400 Bad Request 回复。
我的 API 路由如下所示:
[System.Web.Http.HttpGet]
[GET("range/{start:datetime}/{end:datetime}")]
public HttpResponseMessage Get(DateTime start, DateTime end)
我正在使用AttributeRouting 库,根据this page,我请求的 URL 应该没问题。
我的请求 URL 如下所示:
http://localhost:51258/plots/range/2013-07-29T21:58:39/2013-08-05T21:58:39
我在控制器 RoutePrefix("plots") 上设置了这个,这是 URL 路由的 plots 位的来源。
如果我去掉 DateTime 对象的时间,一切正常,但我需要时间过去。
【问题讨论】:
-
这可能是因为这不是 C# 中的标准 DateTime 格式。日期部分很好,时间也很好,但是它们之间的 T 使它不标准。我会尝试用空格替换它。如果这行得通,那么您就会知道需要做什么。
-
我添加了 T,因为它也不适用于空格或编码空格。根据 Mike Wasson(在页面链接中)的说法,添加 T 是合法的,应该可以正常工作。
-
您是否将他提到的正则表达式(在链接中)添加到您的 DateTime 中?那么只有“yyyy-mm-dd”形式的日期才会匹配。
-
不,在我让这个基本实现工作之前,我一直让它尽可能简单。
-
我刚刚访问了 API 上的 routes.axd 页面并尝试执行请求
http://localhost:51258/plots/range/2013-07-29T21:58:39/2013-07-29T21:58:39并收到此错误A potentially dangerous Request.Path value was detected from the client (:).所以看来:实际上可能是一个非法字符.. .
标签: c# datetime asp.net-web-api attributerouting