Версионный API Explorer без атрибута APIController - PullRequest
0 голосов
/ 18 апреля 2019

Я реализовал aspnet core api versioning , как описано здесь

, вот пример кода

 services.AddApiVersioning(
                options =>
                {
                    options.ReportApiVersions = true;
                    options.DefaultApiVersion = new ApiVersion(0,0);
                    options.AssumeDefaultVersionWhenUnspecified = true;
                } );

services.AddVersionedApiExplorer(
                options =>
                {
                    // note: the specified format code will format the version as "'v'major[.minor][-status]"
                    options.GroupNameFormat = "'v'VVV";
                    options.SubstituteApiVersionInUrl = true;
                } );

Пример контроллера:

    [Route("api/v{version:apiVersion}/[controller]")]
    [ApiVersion("1")]
    public class BreadcrumbsController : BaseController
    {
...code removed...
    }

Все работает нормально, если я добавляю атрибут [ApiController] в контроллеры, но если я удаляю его, IApiVersionDescriptionProvider не возвращает результатов.VersionApiExplorer, похоже, не находит контроллеров.К сожалению, добавление атрибута [ApiController] переопределяет некоторые фильтры, которые мы реализовали, поэтому я не хочу добавлять его в контроллеры.

Как получить Versioned API Explorer для обнаружения контроллеров без добавления атрибута ApiController?

1 Ответ

0 голосов
/ 18 апреля 2019

Копая больше, я нашел в документации к выпуску https://github.com/Microsoft/aspnet-api-versioning/releases

  • ApiVersioningOptions.UseApiBehavior теперь по умолчанию имеет значение true

    • Это может привести к исключению ваших контроллеров API, если [ApiController] не был применен
    • Если ваши контроллеры API используют основанную на соглашениях маршрутизацию, они определенно будут исключены, поскольку [ApiController] не может быть применен

Прочитав, что я добавил предложенный UseApiBehavior = false (по умолчанию он имеет значение true, что является серьезным изменением), и теперь он работает правильно

 services.AddApiVersioning(
                options =>
                {
                    options.ReportApiVersions = true;
                    options.DefaultApiVersion = new ApiVersion(0,0);
                    options.AssumeDefaultVersionWhenUnspecified = true;
                    options.UseApiBehavior = false;
                } );

Надеюсь, это поможет кому-то еще в будущем

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