正确答案取决于您期望达到的目标。只有在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 的最新版本。客户仍然可以明确要求特定版本,包括最新版本。
我希望这会有所帮助。