Web Apiのベストプラクティスを使用してRESTサービスを作成しようとしていますが、どのように処理するのかわかりません。異なるアクションを同じ署名を持つWeb APIメソッドにマップする方法
私はグループがあり、各グループにはユーザーがいるとします。あなたが見ることができるように、我々は同じクラスで同じシグネチャを持つ2つのメソッドを持つことができないので、私の第二の方法はコンパイルされません
[RoutePrefix("api/v1/groups")]
public class GroupsController : ApiController
{
[HttpGet]
[Route("{id:int}")]
public IHttpActionResult Get(int id)
{
return Ok();
}
// I also want to add endpoint which fetches all the users inside of group and I'd like to do it like this:
[HttpGet]
[Route("{id:int}/users")]
public IHttpActionResult Get(int id)
{
return Ok();
}
}
:
これは私のGroupControllerがどのように見えるかです。
マイルートテンプレートは、スタンダール1のようになります。
config.Routes.MapHttpRoute(
name: "DefaultRouting",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
私はまた、アクションメソッド名をマッピングしますが私の目標を達成するためのより良い方法があります場合、私は思っていたルートを追加することができます知っています。 RESTfulなサービスを書くための最善の原則に固執したいと思います。私が知っているように、提案の1つは、カスタムアクション名を避けることです。なぜなら、これはWCFサービスでより一般的であるからです。
をので、私はに移動して、「GetUsersForGroup(int型のID)」をヒットすることができるだろうapi/v1/groups/1/usersforgroup? – user2128702
いいえ、属性のパスは 'api/v1/groups/1/users'です。これは、ルートがメソッド名に依存しないので、属性ルーティングを優先させる理由です。 – toadflakz
私はそれが "GetUsers(int id)"メソッドをヒットすることを意味し、実際にはそうです。そういうわけで私はあなたの答えを答えにしました。 – user2128702