Azure API管理:为set-backend-service执行全局策略会导致范围错误

时间:2016-09-26 15:56:02

标签: azure-api-management policies

因此,我的API服务全局,我总是希望根据某些呼叫区域设置后端服务URL。

根据这个MSDN library article,使用set-backend-service策略听起来很完美,根据其底部的政策范围,它是一个全球政策。

然而,即使张贴他们的确切示例......

<policies>
    <inbound>
        <choose>
            <when condition="@(context.Request.Url.Query.GetValueOrDefault("version") == "2013-05")">
                <set-backend-service base-url="http://contoso.com/api/8.2/" />
            </when>
            <when condition="@(context.Request.Url.Query.GetValueOrDefault("version") == "2014-03")">
                <set-backend-service base-url="http://contoso.com/api/9.1/" />
            </when>
        </choose>
    </inbound>

....导致错误:

  

“第0行第0列的元素'set-backend-service'出错:策略是   不允许在指定的范围内“

我无法弄清楚如何使其更简单的情况进行故障排除。我甚至删除了条件语句,只是单独保留了策略,它仍然显示范围错误。

我知道这个全局范围工作正常,因为我能够将xml-to-json策略作为临时测试并成功保存。

我认为有人已经遇到过这个问题,因为这必须是这个政策的常见用例。否则,我认为MSDN文章已过时,除非此处的任何人都可以看到任何问题。

这是我的全球政策范围: enter image description here

1 个答案:

答案 0 :(得分:0)

将引号更改为单引号,其中&#34;版本&#34;是。我刚刚运行了以下没问题:

<policies>
    <inbound>
        <choose>
            <when condition="@(context.Request.Url.Query.GetValueOrDefault('version') == '2013-05')">
                <set-backend-service base-url="http://contoso.com/api/8.2/" />
            </when>
            <when condition="@(context.Request.Url.Query.GetValueOrDefault('version') == '2014-03')">
                <set-backend-service base-url="http://contoso.com/api/9.1/" />
            </when>
        </choose>
        <base />
    </inbound>
    <outbound>
        <base />
    </outbound>
</policies>