【发布时间】:2021-03-09 16:41:10
【问题描述】:
我遇到了这个问题,找不到快速指南,所以我在这里。
我已经创建了 ASP.NET Core API。
在一个控制器上,我定义了 2 个 get 方法。每个接受不同的参数,但都是字符串。这会产生以下问题。
Microsoft.AspNetCore.Routing.Matching.AmbiguousMatchException: The request matched multiple endpoints. Matches:
Airbnb.Controllers.ListingsAndReviewsController.GetById (Airbnb)
Airbnb.Controllers.ListingsAndReviewsController.GetByName (Airbnb)
我的方法看起来像这样。
[HttpGet("{id}")]
public IEnumerable<ListingsAndReviews> GetById(String id)
{
}
[HttpGet("{name}")]
public IEnumerable<ListingsAndReviews> GetByName(String name)
{
}
【问题讨论】:
-
设身处地为 url 路由器思考问题,路由器应该为
site.com/ListingsAndReviews/gibberish-string这样的 url 调用哪种方法?您的路由器不知道gibberish-string是 id 还是 name。因此,帮助它找到匹配项,将您的 url 模板更改为每种方法的不同内容。 -
你确定 id 是一个字符串吗?
-
@Nonik id 在技术上是一个 ObjectId,但我只能将 Id 作为字符串输入,然后将其转换为 ObjectId。查询是使用 ObjectId 完成的。我可能会改变它,一旦我建立了一个前端......
标签: c# asp.net-core model-view-controller