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

Azure ARM模板中NSG配置生效但ASG配置报InvalidJson错误的原因咨询

问题根源:属性类型要求完全不同

这俩配置的核心差异在于ARM模板对networkSecurityGroup和applicationSecurityGroups的数据类型定义天差地别:

  • 对于networkSecurityGroup:它是一个单个对象类型的属性,接受单个NSG的引用对象(格式{"id": "资源ID"})或者null,你现有的NSG代码生成的JSON结构完全匹配这个要求,所以能正常运行。

  • 对于applicationSecurityGroups:它是一个数组/集合类型的属性——哪怕你只关联一个ASG,也必须用数组来包裹这个引用对象。但你当前的代码生成的是单个{"id": "资源ID"}对象,不是数组,这就直接触发了反序列化错误:系统期望接收JSON数组(比如[{"id": "..."}]),但收到的是单个JSON对象,自然无法把对象反序列化为集合类型。

修复后的ASG配置代码

只需要把生成的JSON结构改成数组格式即可,修改后的代码如下:

"applicationSecurityGroups": "[if(not(empty(parameters('NICS')[copyindex()].asg)), json(concat('[ {"id": "', resourceId('Microsoft.Network/applicationSecurityGroups', parameters('NICS')[copyindex()].asg), '"} ]')), json('[]') )]"

这里做了两个关键调整:

  1. 用[ ... ]把ASG引用对象包裹起来,生成标准的JSON数组格式
  2. 当ASG参数为空时,返回空数组[]而非null——集合类型属性通常更接受空数组,这也更符合ARM模板的规范
逻辑验证
  • 当parameters('NICS')[copyindex()].asg有值时,生成的JSON是[{"id": "/subscriptions/.../applicationSecurityGroups/xxx"}],完美匹配数组类型要求
  • 当参数为空时,生成空数组[],表示不关联任何ASG,不会触发类型错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 13:27:38