查询参数路由约束

我刚开始使用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_StartConfigure方法调用上出错。

 protected void Application_Start() { GlobalConfiguration.Configure(WebApiConfig.Register); } 

消息如下。

ArgumentException未被用户代码处理

路径模板不能以’/’或’〜’字符开头,也不能包含’?’ 字符。

有两件事让我烦恼不已。

首先, 记录 MSDN 上路由前缀的部分清楚地表明,在路径模板的开头放置一个~字符是完全可以接受的。 我试过了,它的工作原理记录在案。

其次,如果不是这样,我如何在查询参数上放置路由约束? 考虑以下情况,删除路径约束。

 [Route("item")] public IHttpActionResult GetItem(int id) { ... } 

URL /item/5将路由到此操作, id设置为5 – 但是URL /item/abcid设置为0

是否无法对查询参数设置路由约束?

根据http://attributerouting.net/#asp-net-web-api(† ,这是不可能的:

注意!由于Web API WebHost框架的集成问题,以下function不起作用:…

  • 查询字符串参数约束,…“

†)请注意,此答案是针对以前版本的Web API编写的,其中属性路由使用单独的AttributeRouting.WebApi NuGet包完成 。 此后,属性路由已合并到Web API核心中 。 尽管如此,似乎仍然不支持开箱即用的查询字符串参数约束。