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

zam*_*6ak 5 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
Run Code Online (Sandbox Code Playgroud)

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

PS现在,我不确定上述方法是否与RESTfull样式"合作",这是完整的其他讨论......

小智 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+" } 
 );
Run Code Online (Sandbox Code Playgroud)

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

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

此外,您还可以覆盖DefaultHttpControllerFactory类,以您的方式创建控制器实例.

希望这有帮助.