2016-09-26 37 views
0

因此,我的API服務全局上,我總是希望根據特定的調用區域設置後端服務URL。Azure API管理:爲設置後端服務執行全局策略導致範圍錯誤

根據這個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> 

....導致錯誤:

"Error in element 'set-backend-service' on line 0, column 0: Policy is not allowed in the specified scope"

我無法弄清楚如何使它的任何簡單排除故障的情況。我甚至刪除了條件語句,只留下了策略,它仍然顯示範圍錯誤。

我知道這個全局範圍工作正常,因爲我能夠將xml-to-json策略作爲臨時測試併成功保存。

我想這個問題已經有人遇到了,因爲這一定是這個政策的常見用例。否則,我認爲MSDN文章已過時,除非有人在這裏可以看到任何問題。

這裏是我的政策範圍全球: enter image description here

回答

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> 
+0

感謝賈斯廷的答覆,但沒有運氣。我在這個版本中遇到了一個新的錯誤:「字符文字太多了」。將單引號更改回雙引號可消除該錯誤並返回到我原來的錯誤。 另外,我知道這不適用於全球政策。全球政策不允許使用,因爲沒有比全球更多的基礎了:)你在那裏嘗試嗎? –

+0

@RudyScoggins這是我看到的行爲。如果我們將光標置於之內,則如果您在全局策略範圍內看到複製代碼,則設置的後端服務策略語句會變灰,與文檔中列出的內容相反。我希望Azure APIM團隊中的一些人也記下相同的內容。 –

相關問題