我有两个不同的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)
{
}
由于
答案 0 :(得分:2)
您可以将正则表达式应用于两个路由,以确保在传递适当的参数时选择它:
[Route(@"clips/{Id:regex([0-9]*[A-Z0-9]*)}", Name = "GetById")]
您需要将相似的表达式应用于其他路线以排除这些命中。
但我同意@ryancdotnet你应该重新评估你的路线。
答案 1 :(得分:0)
看起来问题是因为控制器A上的{id}类型为string
,控制器B的路由基本相同,因为product
也是字符串,因此路由不知道如何区分这两个操作。