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

本文关键字:控制器 资源 处理 Web NET API 是否 ASP | 更新日期: 2023-09-27 18:33:50

想象一个系统,其中包含具有相应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)方法?我想保留处理子资源的责任,由其原始控制者负责。换句话说,如果子资源也作为资源存在,那么子资源处理应该是?委派给主资源控制器...

附言现在,我不确定上述方法是否与 RESTfull 样式"更舒适",那是完全不同的讨论......

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

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类,以你的方式创建控制器的实例。

希望这有帮助。