Azure CLI调用零售定价API时skuName过滤不生效问题
错误原因
过滤不生效的核心原因是不符合Azure零售定价API的参数传递规则:
- 该接口遵循OData查询规范,所有针对资源属性的筛选条件,必须通过专用的
$filter参数按OData语法传入。你直接把skuName作为顶层查询参数传递的写法,接口会直接忽略这个不识别的参数,默认返回全量定价数据,根本不会执行过滤逻辑。 - 返回结果里的
NextPageLink带上了skuName=F4s v2,只是az rest工具自动把你传入的所有自定义URL参数拼接到了分页链接中,不代表服务端实际识别、执行了这个过滤条件。 - 你直接在浏览器访问带
$filter参数的地址能正常返回过滤结果,就是因为参数传递方式符合接口的OData规范要求。
修正方案
按照OData规范通过$filter传入筛选条件即可,提供两种通用写法:
写法1:通过--url-parameters传参
根据你使用的终端环境选择对应转义规则的命令:
- Bash环境(Linux/macOS/Git Bash/WSL Bash)
az rest -u "https://prices.azure.com/api/retail/prices" \ --url-parameters '{"$filter":"skuName eq '\''F4s v2'\''", "currencyCode":"GBP"}'
- PowerShell环境
az rest -u "https://prices.azure.com/api/retail/prices" ` --url-parameters "{``"$filter``":``"skuName eq 'F4s v2'``", ``"currencyCode``":``"GBP``"}"
写法2:直接传入完整带参URL
这种写法不需要处理复杂的JSON转义,注意在Shell环境中转义$特殊字符即可,跨环境兼容性更好:
# Bash环境 az rest -u "https://prices.azure.com/api/retail/prices?currencyCode=GBP&\$filter=skuName eq 'F4s v2'"
# PowerShell环境 az rest -u "https://prices.azure.com/api/retail/prices?currencyCode=GBP&`$filter=skuName eq 'F4s v2'"
执行上述正确命令后,接口会仅返回skuName匹配F4s v2的定价结果,不会再混入其他规格的定价数据。
内容的提问来源于stack exchange,提问作者abinitio
相关产品推荐
相关产品推荐

