API Management的默认版本

问题描述 投票:2回答:2

我已启用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 azure-api-management
2个回答
1
投票

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


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

© www.soinside.com 2019 - 2024. All rights reserved.