因此,我的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文章已过时,除非此处的任何人都可以看到任何问题。
答案 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>