C#Webapi属性路由不起作用

时间:2016-06-23 16:08:17

标签: c# asp.net-web-api asp.net-web-api-routing

我有两个不同的webapi控制器,其操作如下所示。出于某种原因,我一直得到“发现匹配URL的多个控制器类型......”例外。谁能帮助我弄清楚我在这里做错了什么?

ControllerA

[HttpGet]
[Route("clips/{Id}", Name = "GetById")]
public async Task<HttpResponseMessage> Get(string Id)
{

}

* Id是字母数字,它始终以数字

开头

ControllerB

[HttpGet]
[Route("clips/product", Name="GetXProducts")]
public async Task<HttpResponseMessage> GetXProducts([FromUri]SearchCriteria searchCriteria)
{

}

由于

2 个答案:

答案 0 :(得分:2)

您可以将正则表达式应用于两个路由,以确保在传递适当的参数时选择它:

[Route(@"clips/{Id:regex([0-9]*[A-Z0-9]*)}", Name = "GetById")]

您需要将相似的表达式应用于其他路线以排除这些命中。

但我同意@ryancdotnet你应该重新评估你的路线。

答案 1 :(得分:0)

看起来问题是因为控制器A上的{id}类型为string,控制器B的路由基本相同,因为product也是字符串,因此路由不知道如何区分这两个操作。