Маршрутизация ODATA вызывает исключение с версионными конечными точками APIC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Маршрутизация ODATA вызывает исключение с версионными конечными точками API

Сообщение Anonymous »

Я унаследовал проект Web API .NET 6, использующий ODATA и пакеты ASP.Versioning. Функциональность выпуска версий не была на 100% правильной, и теперь, когда проект необходим для более регулярного использования, я хочу правильно реализовать обозначение версий. < /p>

маршруты атрибутов с тем же именем 'odata /v {версия: apiversion} /parts' должен иметь одинаковый шаблон:
action: '... v2.controllers.partscontroller.get' - шаблон: 'odata/v {версия: apiversion}/parts/odata/v {версия: apiversion}/parts'
action: '... v2. Controllers.partscontroller.get ' - Template:' Odata/V {версия: Apiversion}/Parts '
action: '... v1.controllers.partscontroller.get' - Template: 'Odata/V {версия: Apiversion}/Parts'
action: '... v1.controllers.partscontroller.get' - template: 'Odata /v {версия: apiversion}/parts '

Мои контроллеры смотрят Как: < /p>
namespace ...Api.Versions.v1.Controllers
{
[ApiController]
[ApiExplorerSettings(GroupName = "v1")]
[ApiVersion("1")]
[Route("odata/v{version:apiVersion}/[controller]")]
public class PartsController : ODataController
{
[Produces("application/json")]
[EnableQuery]
[HttpGet]
public async Task Get()
{
...
}
}
}
< /code>
и < /p>
namespace ...Api.Versions.v2.Controllers
{
[ApiController]
[ApiExplorerSettings(GroupName = "v2")]
[ApiVersion("2")]
[Route("odata/v{version:apiVersion}/[controller]")]
public class PartsController : ODataController
{
[Produces("application/json")]
[EnableQuery]
[HttpGet]
public async Task Get()
{
...
}
}
}
< /code>
my startup.cs имеет следующую конфигурацию: < /p>
public void ConfigureServices(IServiceCollection services)
{
...
services.AddControllers()
.AddOData(options =>
{
options.EnableQueryFeatures(maxTopValue: 8000);
options.TimeZone = TimeZoneInfo.Utc;
});

services.AddApiVersioning(options =>
{
options.AssumeDefaultVersionWhenUnspecified = true;
options.DefaultApiVersion = new ApiVersion(1);
options.ReportApiVersions = true;
options.ApiVersionReader = new UrlSegmentApiVersionReader();
})
.AddMvc()
.AddOData(options =>
{
options.AddRouteComponents("odata/v{version:apiVersion}");
})
.AddODataApiExplorer(options =>
{
options.GroupNameFormat = "'v'V";
options.SubstituteApiVersionInUrl = true;
});
...
}

public void Configure(IApplicationBuilder app)
{
...
app.UseRouting();

app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
...
}
< /code>
и моя конфигурация EDM выглядит следующим образом: < /p>
namespace ...Api.Utilities.ModelConfiguration
{
using Asp.Versioning;
using Asp.Versioning.OData;
using Microsoft.OData.ModelBuilder;

public class PartModelConfiguration : IModelConfiguration
{
public void Apply(ODataModelBuilder builder, ApiVersion apiVersion, string routePrefix)
{
switch (apiVersion.MajorVersion)
{
case 1:
ConfigureV1(builder);
break;
case 2:
ConfigureV2(builder);
break;
default:
ConfigureCurrent(builder);
break;
}
}

private void ConfigureV1(ODataModelBuilder builder) =>
ConfigureCurrent(builder);

private void ConfigureV2(ODataModelBuilder builder) =>
ConfigureCurrent(builder);

private EntityTypeConfiguration ConfigureCurrent(ODataModelBuilder builder)
{
var part = builder.EntitySet("Parts").EntityType;
part.HasKey(p => p.IdPart);
return part;
}
}
}
< /code>
Прямо сейчас нет никакой разницы между моделями для V1 и V2, это только для проверки функциональности. < /p>
Я верю, что вышеупомянутая конфигурация автоматически зарегистрирован для DI в соответствии с последним разделом на этой странице: https://github.com/dotnet/aspnet-api-ve ... igurations
написано /> Я чувствую, что есть какой -то маленький кусочек конфигурации, который я пропустил, но изо всех сил пытаюсь найти, что это может быть. < /p>

Подробнее здесь: https://stackoverflow.com/questions/794 ... -endpoints
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Маршрутизация ODATA вызывает исключение с версионными конечными точками API
    Anonymous » » в форуме C#
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Маршрутизация ODATA вызывает исключение с версионными конечными точками API
    Anonymous » » в форуме C#
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Маршрутизация ODATA вызывает исключение с версионными конечными точками API
    Anonymous » » в форуме C#
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Служба веб-API — развязность с динамическими конечными точками
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Служба веб-API ASP.NET Core 8 — Swagger с динамическими конечными точками
    Anonymous » » в форуме C#
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»