如何消除ApiController中两个动作之间的歧义

时间:2013-01-30 17:27:38

标签: asp.net asp.net-mvc-4 asp.net-web-api asp.net-web-api-routing

我在创建路由或其他配置时遇到问题,这些配置会消除两个Get方法的歧义。这是一个示例类:

public class UsersController : ApiController

   public User[] GetMany([FromUri]int[] id)
   {
      // returns all users requested by id
   }

   public User[] GetAll()
   {
      // returns all users
   }

}

我希望myhost/api/users映射到GetAllmyhost/api/users?id=123映射到GetMany

现在它们都产生500错误,因为两个方法都匹配为两个URI的可能操作。

这是我的路线:

        routes.MapHttpRoute(
            name: "AllUsersRoute",
            routeTemplate: "api/users",
            defaults: new { },
            constraints: new { }
        );

虽然我知道在这个简单的例子中,GetMany方法可以更改为将空ID列表视为对所有人的请求,但在更复杂的情况下可能不是这种情况。

注意,我正在使用MVC 4 Web API,Visual Studio 2010。

1 个答案:

答案 0 :(得分:3)