【发布时间】:2020-12-23 06:26:03
【问题描述】:
我有两个不同的控制器,每个控制器都有其配置的路由。为了解释我的问题,我将举例说明:
产品控制器
[Route("v1/empresas/{idConexao}/produtos/{id}")]
ProdutoCategoriaController
[Route("v1/empresas/{idConexao}/produtos/categorias")]
使用邮递员对“v1/empresas/{idConexao}/produtos/categorias”路线执行 GET 时,我收到以下错误消息:
找到多个与 URL 匹配的控制器类型。如果多个控制器上的属性路由与请求的 URL 匹配,就会发生这种情况
但是,如果我对路线“v1/empresas/{idConexao}/produtos/{id}”发表评论,我可以在路线“v1/empresas/{idConexao}/produtos/categorias”上进行评论,反之亦然。
有谁知道我该如何解决这个问题?我认为这个错误没有意义
【问题讨论】:
-
因为
"categorias"是一个完全合法的 ID,除非您另外指定。查看文档:docs.microsoft.com/en-us/aspnet/web-api/overview/… -
如果您的
id始终是数字,您可以将其标记为[Route("v1/empresas/{idConexao}/produtos/{id:int}")],这应该允许两个路由都工作。有关其他约束类型,请参阅 Aluan 发布的文档。只要您选择“类别”不适合的一个,它就可以工作。 -
您的两条路线都在工作,在相同的控制器名称产品中获取 http 动词。您在两条路线中都指定了相同的控制器名称,这就是原因。如果您更改路线,例如 [Route("v1/empresas/{idConexao}/produtos/{id}")] [Route("v1/empresas/{idConexao}/ProdutoCategoria/categorias")]
-
@AluanHaddad Haddad 阅读文档我能够更好地理解路线限制的工作原理
-
很高兴这很有用。有很多方法可以完成这项工作,我不想在没有更多信息(例如 Id 的类型)的情况下随意推荐一种。
标签: c# asp.net-web-api asp.net-web-api2 asp.net-web-api-routing