У меня есть параллельный 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) заканчиваются тем, что попадают в мой APIController вместо ODataController.
Как я могу направить их, используя разные префиксы, но с одинаковым именем, и передать их на соответствующие контроллеры. Я не хочу иметь разные имена для каждого маршрута, если я могу это предотвратить, префиксы должны позаботиться обо всем, но по какой-то причине это не так.
ODataRoute
! Я не могу найти это - person JB's   schedule 16.08.2017