Правильный ответ *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.Клиент по-прежнему может явно запросить конкретную версию, включая последнюю.
Надеюсь, это поможет.