API 管理的默认版本

Default version for API Management

我已为 Azure API 管理 (APIM) 启用版本控制。版本控制基于查询字符串参数(例如 ?api-version=1.0)。使用查询字符串的目的是,如果用户不提供参数,它将默认为最新版本。所以:

/api/operation?api-version=1.0 <- Goes to 1.0
/api/operation?api-version=1.1 <- Goes to 1.1
/api/operation                 <- Goes to 1.1 (assuming that is latest)

但是,似乎 APIM 使用该参数作为索引器,如果未提供,APIM 不知道要使用哪个版本。有没有办法告诉 APIM,如果缺少参数,自动转到特定版本?

一旦您选择加入 API 版本控制,所有 API 路由都会明确地进行版本控制。这意味着客户端无法在不显式提供 API 版本的情况下请求资源。

为了使您的场景正常工作,您需要在客户端未指定任何内容时允许匹配默认 API 版本。您可以像下面这样设置:

service.AddApiVersioning( options => options.AssumeDefaultVersionWhenUnspecified = true );

AssumeDefaultVersionWhenUnspecified 选项支持客户端使用隐式 API 版本控制发出请求。默认情况下禁用此选项,这意味着所有客户端都必须使用明确的API 版本发送请求。 服务将使用 HTTP 状态代码 400 (Bad Request) 或 HTTP 状态代码 404 (Not Found) 响应未指定 API 版本的客户端请求,具体取决于所请求的路由是否存在。

此外,您可以使用 DefaultApiVersion 选项定义没有显式 API 版本信息的服务的默认 ApiVersion。 默认配置值为1.0

services.AddApiVersioning(
    o => o.DefaultApiVersion =
        new ApiVersion( new DateTime( 2016, 7, 1 ) );

更多细节,你可以参考这个article

在 Azure APIM 中不可能。 API 每个请求都需要传递版本。