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

Azure APIM中通过ARM模板添加WebSocket策略时遇验证错误

解决ARM模板部署Azure API Management WebSocket API策略时的"Not allowed at 'Api' scope"错误

问题现象

尝试通过ARM模板为Azure APIM中的WebSocket端点添加策略时,收到以下验证错误:

"error": {
    "code": "ValidationError",
    "message": "Not allowed at 'Api' scope for 'WEBSOCKET' api type"
}

同一策略部署到Web API时可成功执行,且手动在Azure Portal中为WebSocket API添加策略也能正常完成,但通过ARM模板单独部署策略时失败。

错误原因

ARM模板中Microsoft.ApiManagement/service/apis/policies子资源类型仅支持REST/HTTP类型的API,对于WebSocket类型的API,不允许单独创建该子资源来部署策略。而Azure Portal手动添加策略时,本质是直接修改WebSocket API资源本身的policies属性,而非创建独立的子资源,因此可以成功。

解决方案

方法1:将策略嵌入WebSocket API的ARM模板定义中

如果是同时部署WebSocket API和策略,直接在API资源的properties中添加policies字段,将策略内容(XML格式)直接写入或通过参数引用:

示例修改后的WebSocket API资源片段:

{
  "type": "Microsoft.ApiManagement/service/apis",
  "apiVersion": "2022-04-01-preview",
  "name": "[concat(parameters('ApimServiceName'), '/', variables('env'))]",
  "properties": {
    "displayName": "[variables('env')]",
    "apiType": "websocket",
    "protocols": ["wss"],
    "serviceUrl": "[variables('svc')]",
    // 直接嵌入策略内容
    "policies": "<policies><inbound><base /></inbound><backend><base /></backend><outbound><base /></outbound><on-error><base /></on-error></policies>"
  }
}

方法2:单独更新WebSocket API策略(非ARM模板方式)

如果需要单独更新已存在的WebSocket API策略,可使用Azure CLI或APIM REST API:

  • Azure CLI命令示例:
az apim api update --resource-group <rg-name> --service-name <apim-name> --api-id <websocket-api-id> --set policies="<policies><inbound>...</inbound></policies>"

原模板问题说明

你提供的单独部署策略的ARM模板使用了Microsoft.ApiManagement/service/apis/policies子资源,这对于WebSocket API是不被支持的,因此需要替换为上述嵌入到API资源的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:40:08