Azure中ARM模板无法传递包含&的URL的问题
解决ARM模板中包含&的URL传递失败问题
我刚碰到过完全一样的问题,核心根源是你在sasTokenURL变量里用了HTML转义的&,但ARM模板的JSON运行环境中,不需要对&做HTML转义——模板会把&当作字面量字符处理,导致最终拼接出来的URL里全是&而非正确的&,这直接导致请求地址无效。
修正步骤:
替换转义字符
你的SAS Token里的URL编码(比如%3A、%2F这类)是正确的,不需要改动,只需要把所有&替换成原始的&即可。修正后的变量配置片段
"variables": { "scriptBaseURL": "https://sample.blob.core.windows.net/test/", "sasTokenURL": "?st=2018-04-11T14%3A00%3A00Z&se=2020-04-13T14%3A00%3A00Z&sp=r&sv=2017-04-17&sr=c&sig=9bzbHSDFEPds1mrTxCdCgaF7wnRh%2FsX8sQeNnVMucE%3D", "filePath": "[concat(variables('scriptBaseURL'), 'test.rpm', variables('sasTokenURL'))]", "mongoDBScript": "[concat(variables('scriptBaseURL'), 'install-mongodb-3.4.sh', variables('sasTokenURL'))]", "oracleJDKScript": "[concat(variables('scriptBaseURL'), 'your-jdk-script.sh', variables('sasTokenURL'))]" }
额外验证建议:
- 你可以用ARM模板的部署验证功能先检查拼接后的URL是否正确,或者在模板里添加一个输出参数打印最终的
filePath值,确认生成的URL里是正常的&分隔符:"outputs": { "validatedFilePath": { "type": "string", "value": "[variables('filePath')]" } } - 如果你的SAS Token是从外部传入的参数而非硬编码,确保传入的原始值用的是
&而不是&,避免重复转义。
内容的提问来源于stack exchange,提问作者Galet
相关产品推荐
相关产品推荐

