我正在尝试查看是否需要编写自定义内容IHttpRouteConstraint
,或者是否可以与内置的内容搏斗以获得我想要的东西。我在任何地方都找不到任何好的文档。
基本上,这是我的行动:
[Route("var/{varId:int:min(1)}/slot/{*slot:datetime}")]
public async Task<HttpResponseMessage> Put(int varId, DateTime slot)
{
...
}
我想要的是能够这样称呼它:
PUT /api/data/var/1/slot/2012/01/01/131516
并让框架将 19 绑定到 var id 和DateTime
值为“2012 年 1 月 1 日,下午 1:15:16”作为“插槽”值的 a。
按照这里的指南:http ://www.asp.net/web-api/overview/web-api-routing-and-actions/create-a-rest-api-with-attribute-routing我能够得到它通过仅传递日期段来工作,即PUT /api/data/var/1/slot/2012/01/01
or PUT /api/data/var/1/slot/2012-01-01
,但这只会给我一个数据值,没有时间分量。
有些事情告诉我,试图以任何理智的方式通过 URI 段传递时间是一个坏主意,但我不确定为什么这是一个坏主意,除了关于本地与 UTC 时间的模糊性。
我还尝试datetime
使用正则表达式约束约束,例如{slot:datetime:regex(\\d{4}/\\d{2}/\\d{2})/\\d{4})}
尝试让它解析2013/01/01/151617
为 DateTime 之类的东西,但无济于事。
我很确定我可以让它与 custom 一起使用IHttpRouteConstraint
,我只是不想做一些可能内置的东西。
谢谢!