Web API 2.2 APIController と OData v4 ODataController を並べて使用しています。私の APIController は、次のようにルーティング属性を内部的に使用します (事前定義されたルーティングのデフォルトはありません)。
[RoutePrefix("api")]
public class MyController : ApiController
{
[HttpGet]
[Route("My")]
public IHttpActionResult Get()
{
//Code Here
}
[HttpGet]
[Route("My")]
public IHttpActionResult Get([FromUri] String mykey)
{
//Code Here
}
}
そのため、./api/My および ./api/My/?mykey=value を介してルーティングされます
そして、同様のスーツに従うように ODataController をセットアップしようとしました:
[ODataRoutePrefix("My")]
public class oMyController : ODataController {
[HttpGet]
public IHttpActionResult Get(ODataQueryOptions<FileModel> queryOptions) {
//Code Here
}
[HttpGet]
[ODataRoute("({mykey})")]
public IHttpActionResult Get([FromODataUri] String mykey) {
//Code Here
}
}
次のように事前に odata ルートを定義します。
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<MyModel>("My");
config.MapODataServiceRoute(
routeName: "ODataRoute",
routePrefix: "odata",
model: builder.GetEdmModel()
);
しかし、./odata/My および ./odata/My(value) にアクセスしようとすると、ODataController ではなく APIController にアクセスしてしまいます。
異なるプレフィックスを使用してこれらをルーティングする方法はありますが、同じ名前で、適切なコントローラーに移動させるにはどうすればよいですか? できればルートごとに異なる名前を付けたくありません。プレフィックスはすべてを処理する必要がありますが、何らかの理由でそうではありません。