除了在每次构建新版本时更改startup.cs之外,
services.AddApiVersioning(config =>
{
config.DefaultApiVersion = new ApiVersion(1, 0);
});
是否有一种方法可以指定“默认版本”为最新版本,而无需指定该版本是什么?例如一些表达方式
config.DefaultApiVersion = new ApiVersionLatest();
。 。 。还是面对RESTApi神所认为的圣洁之物?
谢谢
答案 0 :(得分:0)
正确的答案 取决于您期望达到的目标。 DefaultApiVersion
仅在没有其他API版本可用时起作用。 API版本控制不具有“无API版本” 的概念。 API version-neutral 表示API接受任何API版本和所有API版本,包括根本不接受任何版本。 default API版本也可以被视为 initial API版本。
以下是DefaultAPiVersion
发挥作用的几种情况:
听起来很像,就像您有兴趣在一个地方配置最新的API版本一样。您可以 使用DefaultApiVersion
来执行此操作,但前提是控制器没有其他属性或约定。如果API无法继续使用,则您必须使用表示旧版API版本的属性或约定来显式装饰控制器,以将其从 latest 版本中排除。尽管这是可能的,但很难遵循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版本。您可能还会考虑使用约定,因此甚至不需要custom属性。属性和约定可以组合。
@spender确实提到使用自定义的 IApiVersionSelector ;但是,选择当前仅在未指定API版本的情况下起作用。要启用这种类型的配置,请将其设置为:
services.AddApiVersioning( options =>
{
options.ApiVersionSelector = new CurrentImplementationApiVersionSelector( options );
options.AssumeDefaultVersionWhenUnspecified = true;
}
这将使未指定API版本的客户端始终转发到所请求API的最新版本。客户仍然可以明确要求特定版本,包括最新版本。
我希望有帮助。