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