除了在构建新版本时更改startup.cs之外,
services.AddApiVersioning(config =>
{
config.DefaultApiVersion = new ApiVersion(1, 0);
});是否有一种方法可以指定“默认版本”是最新版本,而不指定该版本是什么?例如某种表达方式
config.DefaultApiVersion = new ApiVersionLatest();。。。或者这是在面对所有被RESTApi神明认为神圣的事物时飞起来的?
谢谢
发布于 2018-10-25 21:26:27
正确的答案在一定程度上取决于你期望实现什么。只有在没有其他API版本可用时,DefaultApiVersion才会发挥作用。API版本控制是而不是有“无API版本”的概念。API版本中立意味着API接受任何和所有API版本,包括根本不接受.默认的API版本也可以被认为是最初的API版本。
下面是DefaultAPiVersion发挥作用的几个场景:
听起来您对在一个地方配置最新的API版本很感兴趣。您可以使用DefaultApiVersion来做到这一点,但前提是控制器没有其他属性或约定。如果API没有继续运行,则必须使用指示遗留API版本的属性或约定显式地修饰控制器,以将其排除在最新版本之外。虽然这是可能的,但很难遵循国际海事组织的规定。
更好的方法可能是使用描述所需行为的扩展。例如:
[AttributeUsage( AttributeTargets.Class, AllowMultiple = false )]
public sealed class LatestApiVersionAttribute : ApiVersionAttribute, IApiVersionProvider
{
public LatestApiVersionAttribute() : base( new ApiVersion( 2, 0 ) ) { }
}现在,您可以将其应用于所有控制器,a la:
[LatestApiVersion]
public class MyController : ControllerBase
{
// ommitted
}这使您有机会管理最新的API版本是单一位置。您还可以考虑使用约定,这样甚至不需要自定义属性。属性和约定可以结合在一起。
@spender确实提到使用自定义IApiVersionSelector;,但是,选择目前只在未指定API版本时才起作用。要启用这种类型的配置,请将其设置为:
services.AddApiVersioning( options =>
{
options.ApiVersionSelector = new CurrentImplementationApiVersionSelector( options );
options.AssumeDefaultVersionWhenUnspecified = true;
}这将使未指定API版本的客户端始终转发到所请求API的最新版本。客户端仍然可以显式地要求一个特定的版本,包括最新版本。
我希望这能帮上忙。
https://stackoverflow.com/questions/52666011
复制相似问题