我已启用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,如果参数丢失,会自动转到特定版本?
在Azure APIM中不可能。每个请求都需要传递API版本。
选择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。