Dim*_*kov 3 asp.net-web-api asp.net-web-api-routing
我正在尝试查看是否需要编写一个自定义,IHttpRouteConstraint或者是否可以与内置的内容搏斗以获取所需的内容。我看不到任何关于此的好的文档。
基本上,这是我的操作:
[Route("var/{varId:int:min(1)}/slot/{*slot:datetime}")]
public async Task<HttpResponseMessage> Put(int varId, DateTime slot)
{
...
}
Run Code Online (Sandbox Code Playgroud)
我想要的是能够这样称呼它:
PUT /api/data/var/1/slot/2012/01/01/131516并让框架将19绑定到var id和DateTime一个值为“ slot”的值“ aJan 1st,2012,1:15:16 pm”。
按照此处的指南进行操作: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,我只是不想做可能内置的事情。
谢谢!
小智 6
一种选择是将DateTime作为查询字符串参数传递(请参见[FromUri]
例如
[Route("api/Customer/{customerId}/Calls/")]
public List<CallDto> GetCalls(int customerId, [FromUri]DateTime start, [FromUri]DateTime end)
Run Code Online (Sandbox Code Playgroud)
这将有一个签名
GET api/Customer/{customerId}/Calls?start={start}&end={end}
Run Code Online (Sandbox Code Playgroud)
使用创建查询字符串日期
startDate.ToString("s", CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)
查询字符串看起来像
api/Customer/81/Calls?start=2014-07-25T00:00:00&end=2014-07-26T00:00:00
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9075 次 |
| 最近记录: |