查询参数路由约束
我刚开始使用ASP.NET Web API 2.1并遇到了限制。 使用属性路由,我可以执行以下操作:
[Route("item/{id:int}")] public IHttpActionResult GetItem(int id) { ... }
URL /item/5
将路由到此操作,但由于{id:int}
中的int
约束,URL /item/abc
将不会。
我尝试更改我的URL,以便id
参数在查询字符串及其约束中,尽管在文档中从未提及或演示过查询参数的路径约束。
[Route("item?{id:int}")] public IHttpActionResult GetItem(int id) { ... }
如果我现在尝试运行,我在Application_Start
的Configure
方法调用上出错。
protected void Application_Start() { GlobalConfiguration.Configure(WebApiConfig.Register); }
消息如下。
ArgumentException未被用户代码处理
路径模板不能以’/’或’〜’字符开头,也不能包含’?’ 字符。
有两件事让我烦恼不已。
首先, 记录 MSDN 上路由前缀的部分清楚地表明,在路径模板的开头放置一个~
字符是完全可以接受的。 我试过了,它的工作原理记录在案。
其次,如果不是这样,我如何在查询参数上放置路由约束? 考虑以下情况,删除路径约束。
[Route("item")] public IHttpActionResult GetItem(int id) { ... }
URL /item/5
将路由到此操作, id
设置为5
– 但是URL /item/abc
, id
设置为0
。
是否无法对查询参数设置路由约束?
根据http://attributerouting.net/#asp-net-web-api(† ) ,这是不可能的:
“ 注意!由于Web API WebHost框架的集成问题,以下function不起作用:…
- 查询字符串参数约束,…“
†)请注意,此答案是针对以前版本的Web API编写的,其中属性路由使用单独的AttributeRouting.WebApi
NuGet包完成 。 此后,属性路由已合并到Web API核心中 。 尽管如此,似乎仍然不支持开箱即用的查询字符串参数约束。