C# Webapi 属性路由不起作用
C# Webapi attribute routing is not working
我有两个不同的 webapi 控制器,其操作如下所示。出于某种原因,我不断收到 "Multiple controller types were found that match the URL...." 异常。谁能帮我弄清楚我在这里做错了什么?
控制器A
[HttpGet]
[Route("clips/{Id}", Name = "GetById")]
public async Task<HttpResponseMessage> Get(string Id)
{
}
*ID 为字母数字,始终以数字开头
控制器B
[HttpGet]
[Route("clips/product", Name="GetXProducts")]
public async Task<HttpResponseMessage> GetXProducts([FromUri]SearchCriteria searchCriteria)
{
}
谢谢
看起来问题是因为您在控制器 A 上的 {id} 是 string
类型,而控制器 B 的路由本质上是相同的,因为 product
也是一个字符串,因此路由不知道如何区分这两个操作。
您可以对两个路由应用正则表达式以确保在传递适当的参数时选择它:
[Route(@"clips/{Id:regex([0-9]*[A-Z0-9]*)}", Name = "GetById")]
您需要对其他路由应用类似的表达式以排除这些命中。
但我同意@ryancdotnet 的观点,您可能应该重新评估您的路线。
我有两个不同的 webapi 控制器,其操作如下所示。出于某种原因,我不断收到 "Multiple controller types were found that match the URL...." 异常。谁能帮我弄清楚我在这里做错了什么?
控制器A
[HttpGet]
[Route("clips/{Id}", Name = "GetById")]
public async Task<HttpResponseMessage> Get(string Id)
{
}
*ID 为字母数字,始终以数字开头
控制器B
[HttpGet]
[Route("clips/product", Name="GetXProducts")]
public async Task<HttpResponseMessage> GetXProducts([FromUri]SearchCriteria searchCriteria)
{
}
谢谢
看起来问题是因为您在控制器 A 上的 {id} 是 string
类型,而控制器 B 的路由本质上是相同的,因为 product
也是一个字符串,因此路由不知道如何区分这两个操作。
您可以对两个路由应用正则表达式以确保在传递适当的参数时选择它:
[Route(@"clips/{Id:regex([0-9]*[A-Z0-9]*)}", Name = "GetById")]
您需要对其他路由应用类似的表达式以排除这些命中。
但我同意@ryancdotnet 的观点,您可能应该重新评估您的路线。