想象一个系统包含用户,具有相应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样式“合作”,这是完整的其他讨论......
答案 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类,以您的方式创建控制器实例。
希望得到这个帮助。