Точка OData в существующем приложении ASP. NET MVC - PullRequest
0 голосов
/ 28 января 2020

Я хочу создать точку OData на существующем веб-сайте ASP. NET MVC. В настоящее время приложение использует несколько контроллеров Web API. Моя цель, чтобы OData работал по адресу:

ApplicationRoot\OData\{entity name}

Я хочу иметь один контроллер OData. Каждое действие будет возвращать список конкретных объектов. например, OData\Approval, OData\Brokerage

Данные возвращаются только для целей отчетности, поэтому меня не волнует обновление, удаление, получение одного элемента и т. д. c.

Моя конфигурация из WebApiConfig выглядит следующим образом:

config.Routes.MapHttpRoute(
            name: "OData",
            routeTemplate: "OData/{action}",
            defaults: new { controller = "OData" }
        );

ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<MarketPlace.Models.OData.AccreditationStatus>("Accreditation");
builder.EntitySet<MarketPlace.Models.OData.BrokeragePackage>("Brokerage");

config.MapODataServiceRoute("ODataRoute", "OData", builder.GetEdmModel());
config.Count().Filter().OrderBy().Expand().Select().MaxTop(null);

Кажется, это работает, но если я вызываю в браузере "~ Root \ OData", он возвращает:

{
    "@odata.context": "https://~Root/OData/$metadata",
    "value": [
               {"name":"Accreditation", "kind":"EntitySet", "url":"Accreditation"},
               {"name":"Brokerage", "kind":"EntitySet", "url":"Brokerage"}
             ]
}

Проблема с URL-адресами, которые должны быть OData\\{entityName}.

Кроме того, когда я пытаюсь позвонить в браузере: https://~Root/OData/$metadata

Я получаю исключение, потому что система пытается вызвать $metadata действие из-за моей маршрутизации.

Я пробовал CustomRoutingConvention, но по какой-то причине было выполнено только действие SelectController, метод выбора никогда не вызывался.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...