ASP.NET WebAPI中的路由冲突

时间:2020-09-04 00:41:47

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

我有两个不同的控制器,每个控制器都有其配置的路由。为了说明我的问题,我将举例说明:

ProdutoController

[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”上进行旅行,反之亦然。

有人知道我能解决这个问题吗?我看不到这个错误

1 个答案:

答案 0 :(得分:0)

问题是,如果{id}属性为字符串,则两条路径都匹配相同的路由。

Asp.net不能区分“类别”是id参数还是路径的一部分

要解决此问题,可以使用路由约束来创建更特定的路径。

例如,您可以定义参数id的类型,例如int或guid。

[Route("v1/empresas/{idConexao}/produtos/{id:int}")]

这样,您可以通过和调用api的方式应该是:

  • v1 / empresas / {idConexao} / produtos / categorias-确定200
  • v1 / empresas / {idConexao} / produtos / 1->确定200
  • v1 / empresas / {idConexao} / produtos / anotherString->未找到400

您可以在此处阅读有关路线限制的信息:https://docs.microsoft.com/es-es/aspnet/core/fundamentals/routing?view=aspnetcore-3.1#route-constraint-reference

我希望这是有用的!

最诚挚的问候

相关问题