0

所以在我的 API 服务全局上,我总是希望根据某些调用区域设置后端服务 URL。

根据这篇MSDN 库文章,使用 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 文章已经过时,除非这里的任何人都可以看到任何问题。

这是我的全球政策范围: 在此处输入图像描述

4

1 回答 1

0

将引号更改为“版本”所在的单引号。我只是运行以下没问题:

<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>
于 2016-09-27T20:59:20.510 回答