複数のルートを作るのが答えだと思いますが、ルートリストが長くなり始めているので、これをもっとエレガントにシンプルに表現できないか探しています。:)
現在の例では、複数のオプションを持つルートを作成したいと考えています。いくつかの要素は可変で、一部はそうではありません。
したがって、URI の例は次のようになります。
http://localhost/api/schedules/10/instances/5
一致するルート定義は次のようになります。
api/schedules/{id}/instances/{item}
考えられるエンドポイントは次のとおりです。
http://localhost/api/schedules/10 // returns schedule number 10
http://localhost/api/schedules/10/instances // returns all instances in schedule 10
http://localhost/api/schedules/10/instances/5 // returns 5th instance in schedule 10
問題を引き起こすと思われるのは、2 つのオプション パラメータの間に固定のキーワードを配置することです。次の定義(およびいくつかのバリアント)を試しました。
RouteTable.Routes.MapHttpRoute(
"RouteName",
"api/schedules/{id}/instances/{item}",
new {
id = RouteParameter.Optional,
instances = RouteParameter.Optional,
item = RouteParameter.Optional,
controller = "SomeController"
}
)
そのルートでは、/schedules/10 をヒットしただけでは認識されず、/schedules/10/instances と schedules/10/instances/5 は両方とも schedules/10/instances の結果を返します。
これは何らかの方法で可能ですか、それとも /schedules/{id} 用と /schedules/{id}/instances/{item} 用の 2 つのルートを作成する必要がありますか?
補足として、私は Web API プロジェクトに取り組んでいますが、私の知る限り、それは MVC ソリューションの特定のケースにすぎないため、MVC と Web API の両方にタグを付けました。