PowerShell调用Azure ML REST API返回空对象问题排查求助
问题描述
尝试调用机器学习相关的REST API,运行PowerShell脚本无报错,但测试任意API都返回空对象。使用的SPN具备Contributor权限,已完成授权同意,且确认可以正常获取token。
已测试多个同类型GET接口,均出现同样问题,暂无排查思路。
问题相关PowerShell代码
$tenant_id = "XXXXXXXXXXXXXXXXXXX" $ApplicationId = "XXXXXXXXXXXXXXX" $spn_client_secret = "XXXXXXXXXXXXX" $subscriptionid="XXXXXXXXXXXX" $uri = "https://login.microsoftonline.com/$tenant_id/oauth2/token" $BodyText = "grant_type=client_credentials&client_id=$ApplicationId&resource=https://management.azure.com&client_secret=$spn_client_secret" # 获取TOKEN $Response = Invoke-RestMethod -Method POST -Body $BodyText -Uri $URI -ContentType application/x-www-form-urlencoded $aad_access_token = $Response.access_token # 已验证可正常获取token # 调用AML配额查询接口 $urllist = "https://management.azure.com/subscriptions/$subscriptionid/providers/Microsoft.MachineLearningServices/locations/westeurope/quotas?api-version=2021-03-01-preview" $headers = @{"Authorization" = "Bearer " + $aad_access_token} Invoke-RestMethod -Method GET -HEADERS $headers -Uri $urllist -ContentType application/x-www-form-urlencoded
排查方案与解决方法
- 移除GET请求中的
Content-Type参数:Content-Type是用来标识请求体的格式,GET请求无请求体,添加该参数可能导致接口解析异常返回空,直接从GET请求的Invoke-RestMethod命令中删除-ContentType application/x-www-form-urlencoded即可。 - 验证区域资源匹配:确认你的Azure订阅在西欧(westeurope)区域有Azure Machine Learning相关资源或配额配置,如果该区域从未部署过AML相关资源,接口返回空列表属于正常现象,可以替换为你实际使用的AML所在区域重试。
- 查看原始响应排查异常:将
Invoke-RestMethod替换为Invoke-WebRequest,查看HTTP状态码和原始响应内容,确认是否是200正常返回,以及是否存在隐藏的错误信息:
$response = Invoke-WebRequest -Method GET -Headers $headers -Uri $urllist # 查看HTTP状态码 $response.StatusCode # 查看完整原始响应内容 $response.Content
- 验证Token有效性:将获取到的Token解析后查看aud(受众)字段是否为
https://management.azure.com,同时检查权限声明是否包含AML相关操作的权限。 - 替换正式版API版本:当前使用的
2021-03-01-preview属于预览版API,可能存在兼容性问题,可以替换为正式版API版本(如2023-04-01)重试。
内容的提问来源于stack exchange,提问作者Frédéric De Lène Mirouze
相关产品推荐
相关产品推荐

