5

想象一个具有用户的系统,具有相应的组ApiControllers。然后想象以下访问模式:

/api/users                  
/api/users/1
/api/users?groupId=1    <- #1 returns users belonging to group id 1 via Get(int? groupId)

/api/groups/
/api/groups/1
/api/groups/1/users     <- #2 sub resource, returns users belonging to group id 1

是否可以将#2 的责任委托给#1 的Get(int? groupId)方法? 我想继续负责使用其原始控制器处理子资源。换句话说,如果子资源也作为资源存在,那么子资源处理应该是什么?委托给主要资源控制器...

PS现在,我不确定上述方法是否具有 RESTfull 样式的“cosher”,这完全是其他讨论......

4

1 回答 1

6

WEB Api Beta 不支持路由的方法级别属性。他们说,他们正在考虑改进下一个版本的路由故事。

目前唯一的方法(据我所知)是明确映射这些路线。在你的情况下:

 // for your rest style api 
 routes.MapHttpRoute(
     name: "UserGroups",
     routeTemplate: "api/groups/{groupID}/users",
     defaults: new { controller = "Users"},
     constraints: new { groupID = @"\d+" } 
 );

对于 RPC URI 样式,默认路由将作为一目了然。

 routes.MapHttpRoute(
           name: "ApiDefault",
           routeTemplate: "api/{controller}/{id}",
           defaults: new { controller = "Users", id = RouteParameter.Optional }
       );

您还可以覆盖 DefaultHttpControllerFactory 类以您的方式创建控制器实例。

希望这有帮助。

于 2012-05-28T21:08:12.720 回答