找到了与请求匹配的多个操作(GET)

时间:2013-04-01 21:08:06

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

我在我的控制器中定义了2个GET方法,一个名为“Favorites”,另一个名为“Get”。在我的路线中,我专门将不同的URL路线映射到这两种不同的方法。

然而,当我点击/ Api / MockUsers / Get?userId = 2时,我收到以下错误:

  

找到了与请求匹配的多项操作

然而,当我点击/ api / MockUsers / 1 / favorites时,它返回的数据就好了。

我很困惑,因为我似乎特意路由/ Api / MockUsers / Get?userId = 2到ACTION“Get”,而非“收藏夹”,为什么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;
}

1 个答案:

答案 0 :(得分:0)

您可以使用默认的Webapi路由执行此操作,但更改查询方式。 WebApiConfig.cs中的默认路由:

configuration.Routes.MapHttpRoute("API Default", "api/{controller}/{id}",
   new { id = RouteParameter.Optional });

假设webapi控制器名为MockUsers,示例调用的行为如下:

GET / Api / MockUsers?userId = 2444 - >将解析为具有userId作为参数的GET方法(您的Get方法端点)。

获取 / Api / MockUsers?id = 23444 - >将解析为具有Id作为参数的GET方法(您的收藏方法端点)。