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 样式"更舒适",那是完全不同的讨论......
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类,以你的方式创建控制器的实例。
希望这有帮助。