首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Microsoft.AspNetCore.Mvc.Versioning如何默认为“最新”版本

Microsoft.AspNetCore.Mvc.Versioning如何默认为“最新”版本
EN

Stack Overflow用户
提问于 2018-10-05 12:47:21
回答 1查看 1.4K关注 0票数 3

除了在构建新版本时更改startup.cs之外,

代码语言:javascript
复制
services.AddApiVersioning(config =>
{
    config.DefaultApiVersion = new ApiVersion(1, 0);
});

是否有一种方法可以指定“默认版本”是最新版本,而不指定该版本是什么?例如某种表达方式

代码语言:javascript
复制
config.DefaultApiVersion = new ApiVersionLatest();

。。。或者这是在面对所有被RESTApi神明认为神圣的事物时飞起来的?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-10-25 21:26:27

正确的答案在一定程度上取决于你期望实现什么。只有在没有其他API版本可用时,DefaultApiVersion才会发挥作用。API版本控制是而不是有“无API版本”的概念。API版本中立意味着API接受任何和所有API版本,包括根本不接受.默认的API版本也可以被认为是最初的API版本。

下面是DefaultAPiVersion发挥作用的几个场景:

  • 控制器不适用任何属性或约定。
  • 选择可能的API版本不会产生任何结果。

听起来您对在一个地方配置最新的API版本很感兴趣。您可以使用DefaultApiVersion来做到这一点,但前提是控制器没有其他属性或约定。如果API没有继续运行,则必须使用指示遗留API版本的属性或约定显式地修饰控制器,以将其排除在最新版本之外。虽然这是可能的,但很难遵循国际海事组织的规定。

更好的方法可能是使用描述所需行为的扩展。例如:

代码语言:javascript
复制
[AttributeUsage( AttributeTargets.Class, AllowMultiple = false )]
public sealed class LatestApiVersionAttribute : ApiVersionAttribute, IApiVersionProvider
{
  public LatestApiVersionAttribute() : base( new ApiVersion( 2, 0 ) ) { }
}

现在,您可以将其应用于所有控制器,a la:

代码语言:javascript
复制
[LatestApiVersion]
public class MyController : ControllerBase
{
  // ommitted
}

这使您有机会管理最新的API版本是单一位置。您还可以考虑使用约定,这样甚至不需要自定义属性。属性和约定可以结合在一起。

@spender确实提到使用自定义IApiVersionSelector;,但是,选择目前只在未指定API版本时才起作用。要启用这种类型的配置,请将其设置为:

代码语言:javascript
复制
services.AddApiVersioning( options =>
{
   options.ApiVersionSelector = new CurrentImplementationApiVersionSelector( options );
   options.AssumeDefaultVersionWhenUnspecified = true;
}

这将使未指定API版本的客户端始终转发到所请求API的最新版本。客户端仍然可以显式地要求一个特定的版本,包括最新版本。

我希望这能帮上忙。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52666011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档