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 每个请求都需要传递版本。
我已为 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 每个请求都需要传递版本。