Microsoft.AspNetCore.Mvc. Версия как по умолчанию для "последней" версии - PullRequest
0 голосов
/ 05 октября 2018

Кроме изменения файла startup.cs при создании новой версии,

services.AddApiVersioning(config =>
{
    config.DefaultApiVersion = new ApiVersion(1, 0);
});

существует ли способ указать, что «версия по умолчанию» является самой последней версией, без указания того, что это за версия?например, какой-то способ сказать

config.DefaultApiVersion = new ApiVersionLatest();

.,,или это бросает вызов всем тем, кого боги RESTApi считают святыми?

Спасибо

1 Ответ

0 голосов
/ 26 октября 2018

Правильный ответ *1001* немного зависит от того, чего вы ожидаете достичь.DefaultApiVersion вступает в игру только тогда, когда нет другой версии API.Управление версиями API не имеет концепцию "нет версии API" .API независимый от версии означает, что API принимает все версии API, в том числе ни одну.Версия API по умолчанию также может рассматриваться как начальная версия API .

Вот несколько сценариев, когда DefaultAPiVersion вступает в игру:

  • К контроллеру не применяется атрибуция или условные обозначения
  • Выбор возможных версий API не дает результатов

Это звучит , как будто вы заинтересованы в настройкесамая последняя версия API в одном месте.Вы можете использовать для этого DefaultApiVersion, но только если у контроллера нет других атрибутов или соглашений.Если API не переносится вперед, вам придется явно украсить контроллер атрибутом или соглашением, которое указывает унаследованную версию API, чтобы исключить его из последней версии.Хотя это возможно, трудно следовать IMO.

Лучше всего, вероятно, использовать расширение, описывающее желаемое поведение.Например:

[AttributeUsage( AttributeTargets.Class, AllowMultiple = false )]
public sealed class LatestApiVersionAttribute : ApiVersionAttribute, IApiVersionProvider
{
  public LatestApiVersionAttribute() : base( new ApiVersion( 2, 0 ) ) { }
}

Теперь вы можете применить это ко всем своим контроллерам а-ля:

[LatestApiVersion]
public class MyController : ControllerBase
{
  // ommitted
}

Это дает вам возможность управлять последней версией API в одном месте.Вы также можете рассмотреть возможность использования соглашений, поэтому вам даже не нужен пользовательский атрибут.Атрибуты и условные обозначения могут быть объединены.

@ spender упоминает использование пользовательского IApiVersionSelector ;однако выбор в настоящее время вступает в игру только тогда, когда не указана версия API.Чтобы включить этот тип конфигурации, настройте его следующим образом:

services.AddApiVersioning( options =>
{
   options.ApiVersionSelector = new CurrentImplementationApiVersionSelector( options );
   options.AssumeDefaultVersionWhenUnspecified = true;
}

Это позволит клиентам, не указавшим версию API, всегда перенаправлять на самую последнюю версию запрошенного API.Клиент по-прежнему может явно запросить конкретную версию, включая последнюю.

Надеюсь, это поможет.

...