【发布时间】:2013-11-10 15:09:23
【问题描述】:
我正在尝试查看是否需要编写自定义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”作为“槽”值。
按照此处的指南: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 或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,但无济于事。
我很确定我可以让它与自定义 IHttpRouteConstraint 一起工作,我只是不想做一些可能内置的事情。
谢谢!
【问题讨论】:
标签: asp.net-web-api asp.net-web-api-routing