You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure API Management策略导入报错:YAML发布管道迁移求助

解决Azure API Management策略导入的az rest调用问题

核心问题分析

你遇到的两个错误本质都是请求体的格式/转义处理错误:

  1. < was unexpected at this time:PowerShell/CMD将XML中的<>解析成了重定向符号,导致命令行参数解析失败
  2. 根元素缺失:空XML不符合APIM策略的验证规则,必须提供合法的XML结构

正确解决方案

不要手动拼接JSON和转义特殊字符,用PowerShell的原生JSON序列化工具处理,避免手动转义错误:

步骤1:定义策略XML并构建请求对象

# 直接定义格式化后的策略XML(用Here-String避免转义麻烦)
$policyXml = @"
<policies>
  <inbound/>
  <backend>
    <forward-request/>
  </backend>
  <outbound/>
</policies>
"@

# 构建符合API要求的请求体对象
$requestBody = @{
    properties = @{
        format = "xml"
        value  = $policyXml
    }
}

步骤2:自动序列化为合法JSON

用ConvertTo-Json自动处理所有转义(包括XML中的特殊字符、双引号),避免手动替换出错:

# -Depth确保嵌套结构被正确序列化
$jsonBody = $requestBody | ConvertTo-Json -Depth 10

步骤3:调用az rest(两种可靠方式)

方式1:用双引号包裹JSON变量

az rest --method PUT --uri $uri --body "$jsonBody"

方式2:通过管道传递请求体(避免命令行参数解析冲突)

$jsonBody | az rest --method PUT --uri $uri --body @-

额外注意事项

  • URI格式验证:确保包含apis参数的URI正确,格式应为:
    /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis/{apiId}/policies/policy
    
  • 身份验证:AzureCli@2任务中无需手动Connect-AzAccount,只要任务配置了正确的服务连接,az cli会自动使用任务上下文的身份

内容的提问来源于stack exchange,提问作者Andy B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 21:05:09