我有一个相当简单的 API,当到达其中一个端点时,它会给我以下堆栈跟踪
Microsoft.AspNetCore.Routing.Matching.AmbiguousMatchException:请求匹配多个端点。火柴:
VimTube.Controllers.CategoryController.GetAllCategories (VimTube) VimTube.Controllers.CategoryController.GetCategoryByName (VimTube)
我知道它失败了,因为我有两种方法指向同一个 URL。以下相同
[HttpGet]
public Task<ActionResult<IEnumerable<Category>>> GetAllCategories()
{
return _repository.FindAll();
}
[HttpGet]
public IEnumerable<Category> GetCategoryByName([FromQuery]string name)
{
return _repository.ListCategoriesWhichStartsWith(name);
}
我的控制器类以vimtube/categories为前缀。
我的想法是拥有这些网址
- vimtube/categories返回所有类别的列表。
- vimtube/categories?name=Ent返回以您传递给它的查询开头的类别。
我用 [FromQuery] 读到这是可能的,但显然不是。谢谢!
您可以为使用创建的每个方法指定路由,
[Route("ruta")]
类似于现在,如果您想在 Uri 中包含参数,您可以这样做
[Route("ruta1/{param1:int}")]
,您可以清楚地看到您可以指定数据类型,尽管我只将它们与string
e一起使用int
。最后一件事,我不记得使用[FromQuery]作为参数,我仅限于[FromBody]和[FromUri]
让我们知道怎么回事 :)