5

ユーザー、対応するグループを持つシステムを想像してみてください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)方法に委任することは可能ですか? 元のコントローラーでサブリソースを処理する責任を持ち続けたいと思います。言い換えれば、サブリソースがリソースとしても存在する場合、サブリソースの処理はどうあるべきですか?プライマリリソースコントローラに委任されました。..

PSさて、上記のアプローチがRESTfullスタイルの「コッシャー」であるかどうかはわかりません。それは他のすべての議論です...

4

1 に答える 1

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クラスをオーバーライドして、コントローラーのインスタンスを作成することもできます。

この助けを願っています。

于 2012-05-28T21:08:12.720 に答える