2016-09-26 1 views
0

Так что, глобально на моем сервисе API, я всегда хочу установить URL-адрес службы backend на основе определенных областей вызова.Azure API Management: Выполнение глобальной политики для получения результатов с помощью set-backend-service с ошибкой области

В соответствии с этим 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 отметит то же самое. –

Смежные вопросы