我在我的控制器中定义了 2 个 GET 方法,一个名为“Favorites”,另一个简单地命名为“Get”。在我的路由中,我专门将不同的 URL 路由映射到这两种不同的方法。
但是,当我点击 /Api/MockUsers/Get?userId=2 时,我收到以下错误:
找到多个与请求匹配的操作
但是,当我点击 /api/MockUsers/1/favorites 时,它会很好地返回数据。
我很困惑,因为似乎我专门将 /Api/MockUsers/Get?userId=2 路由到 ACTION “Get”,而不是“Favorites”,那么为什么 MvC4 会感到困惑?
这就是我的路线的样子:
routes.MapHttpRoute(
name: "Users",
routeTemplate: "api/MockUsers/{id}/favorites",
defaults: new { controller = "MockUsers", action = "Favorites", id = 1 }
);
routes.MapHttpRoute(
name: "Api_Get",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { action = "Get", id = RouteParameter.Optional },
constraints: new { httpMethod = new HttpMethodConstraint("GET") }
);
在我的控制器中,我有两种方法:
[AcceptVerbs("GET")]
public UserFavorite Favorites(long id)
{
Favorite f = new Favorite(1, "Favorite 1", "Favorite Type 1");
UserFavorite userFavorite = new UserFavorite(1, f);
return userFavorite;
}
public User Get(long userId)
{
User u = _mockusersService.GetUser(userId);
return u;
}