Я хочу создать точку 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
, метод выбора никогда не вызывался.