我已为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,如果缺少该参数,会自动转到特定版本?
答案 0 :(得分:1)
一旦您选择了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。
答案 1 :(得分:1)
在Azure APIM中不可能。每个请求都必须传递API版本。