我有这个:
[HttpGet]
[Route("Cats")]
public IHttpActionResult GetByCatId(int catId)
[HttpGet]
[Route("Cats")]
public IHttpActionResult GetByName(string name)
通过提供查询字符串(例如Cats?catId=5
然而,MVC Web API会说你不能拥有多条相同的路线(两条路线都是" Cats"。
如何让它工作,以便MVC Web API将它们识别为单独的路由?有什么东西我可以放入Route属性吗?它说?
是放入路线的无效字符。
答案 0 :(得分:4)
尝试在属性路由上应用约束。
[HttpGet]
[Route("Cats/{catId:int}")]
public IHttpActionResult GetByCatId(int catId)
[HttpGet]
[Route("Cats/{name}")]
public IHttpActionResult GetByName(string name)
答案 1 :(得分:3)
您可以将有问题的两个动作合并为一个
[HttpGet]
[Route("Cats")]
public IHttpActionResult GetCats(int? catId = null, string name = null) {
if(catId.HasValue) return GetByCatId(catId.Value);
if(!string.IsNullOrEmpty(name)) return GetByName(name);
return GetAllCats();
}
private IHttpActionResult GetAllCats() { ... }
private IHttpActionResult GetByCatId(int catId) { ... }
private IHttpActionResult GetByName(string name) { ... }
或者为了更灵活地尝试路线约束
引用Attribute Routing in ASP.NET Web API 2 : Route Constraints
路线约束
路径约束允许您限制路径中的参数 模板匹配。一般语法是“{parameter:constraint}”。 例如:
[Route("users/{id:int}"] public User GetUserById(int id) { ... } [Route("users/{name}"] public User GetUserByName(string name) { ... }
这里,只有在“id”段的情况下才会选择第一条路线 URI是一个整数。否则,将选择第二条路线。