4

我正在尝试使用 ARM 模板来部署我的 API 管理服务,并让除了 policyContent 之外的一切都正常工作。基本上,它希望 policyContent 为“Json 转义了策略的 Xml 编码内容”。这很难维护,并且试图找到一种方法来获取 XML 文件并将内容注入到这个字符串中,或​​者一些更好的方法。我不想编写程序来维护这些字符串,因为它感觉不应该那么复杂。

政策参考

字符串示例

{ "name": "policy", "type": "Microsoft.ApiManagement/service/apis/policies", "apiVersion": "2017-03-01", "properties": { "policyContent": "string" } }

4

2 回答 2

5

您可以将策略维护到 XML 文件中并像这样引用它:

{
    "apiVersion": "2018-01-01",
    "name": "policy",
    "type": "Microsoft.ApiManagement/service/policies",
    "properties": {
        "policyContent": "[concat(parameters('repoBaseUrl'), '/policy.xml')]",
        "contentFormat": "rawxml-link"
    },
    "dependsOn": [
        "[resourceId('Microsoft.ApiManagement/service/', parameters('ApimServiceName'))]"
    ]
}

您的policy.xml文件必须在线可用,并且看起来像这样:

<policies>
    <inbound>
        <rate-limit calls="3" renewal-period="10" />
        <base />
    </inbound>
    <outbound>
        <base />
    </outbound>
    <backend>
        <base />
    </backend>
    <on-error>
        <base />
    </on-error>
</policies>
于 2018-06-26T06:46:20.830 回答
1

好吧,我能想到的唯一一件事(因为 arm 模板中没有任何本机可以帮助您)是从文件中读取输入并将其转换为 JSON:

$xml = (Get-Content file -Raw).ToString()
($xml | ConvertTo-Json -Compress) -replace '\\u003c','<' ) -replace '\\u003e','>'

它可能会在不将那些 unicode 替换回 的情况下工作<>,不知道。

于 2018-02-17T21:08:24.257 回答