ASP.NET Core 2, маршрутизация атрибутов OData v4

Можно ли достичь указанных ниже маршрутов с помощью ядра asp.net 2, веб-API, odata v4.

  • /одата/контроллер/продукт/
  • /odata/controller/Product/{param}/
  • /odata/controller/Product/{param}/Пользователи
  • /odata/controller/Product/{param}/Companies
  • /odata/controller/Product/Companies/{param}

Используя атрибут маршрутизации, объявляя функции и настраивая маршруты?


person user7932844    schedule 22.06.2018    source источник


Ответы (2)


После долгих экспериментов с маршрутизацией атрибутов, функциями и действиями вышеперечисленное может быть достигнуто с помощью функций OData.

Ниже приведен код для него.

ODataConventionModelBuilder builder = new ODataConventionModelBuilder();

builder.EntitySet<Product>("Product");
builder.EntityType<Product>().Function("Users").Returns<Users>();
builder.EntityType<Product>().Function("Companies").Returns<Companies>();

app.UseMvc(routebuilder =>
{
     routebuilder.MapODataServiceRoute( "OData", "odata", GetEdmModel());
     routebuilder.EnableDependencyInjection();
}

См. ниже для большего понимания.

https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/odata-actions-and-functions

person user7932844    schedule 04.07.2018

Я также смог добиться этого, используя только маршрутизацию атрибутов.

app.UseMvc(b =>
{
    b.MapODataServiceRoute("odata", "api/v1", GetEdmModel());
});

В контроллере:

using Microsoft.AspNet.OData.Routing;

[EnableQuery]
[ODataRoute("content/{contentId}")]
public IActionResult Get(string contentId)
person Leo    schedule 04.03.2019