ASP.NET Web API可以处理具有不同控制器的子资源

时间:2012-05-11 15:46:06

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

想象一个系统包含用户,具有相应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)方法? 我想继续负责使用原始Controller处理子资源。 换句话说,如果子资源也作为资源存在,那么子资源处理应该是什么?委托给主要资源控制器......

P.S。 现在,我不确定上面的方法是否与RESTfull样式“合作”,这是完整的其他讨论......

1 个答案:

答案 0 :(得分: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类,以您的方式创建控制器实例。

希望得到这个帮助。