Ошибка импорта шаблона ARM схемы управления API Azure

В моем шаблоне ARM определена следующая схема:

    {
      "name": "[concat(variables('api-v1-operation-prefix'), '/', variables('schema-v1-report-name'))]",
      "type": "Microsoft.ApiManagement/service/apis/schemas",
      "apiVersion": "2018-01-01",
      "properties": {
        "contentType": "application/json",
        "document": {
          "value": "[concat('{\r\n  \"', variables('schema-v1-report-name'), '\": {\r\n    \"type\": \"object\",\r\n    \"required\": [\r\n      \"Email\",\r\n      \"LastName\",\r\n      \"Zip\",\r\n      \"Subject\",\r\n      \"Message\",\r\n      \"CategoryId\",\r\n      \"SubcategoryId\",\r\n      \"RequestTypeInt\"\r\n    ],\r\n    \"properties\": {\r\n      \"FirstName\": {\r\n        \"type\": \"string\"\r\n      },\r\n      \"LastName\": {\r\n        \"type\": \"string\"\r\n      },\r\n      \"Email\": {\r\n        \"type\": \"string\"\r\n      },\r\n      \"Phone\": {\r\n        \"type\": \"string\"\r\n      },\r\n      \"Zip\": {\r\n        \"type\": \"string\"\r\n      },\r\n      \"Subject\": {\r\n        \"type\": \"string\"\r\n      },\r\n      \"Message\": {\r\n        \"type\": \"string\"\r\n      },\r\n      \"CategoryId\": {\r\n        \"type\": \"string\"\r\n      },\r\n      \"SubcategoryId\": {\r\n        \"type\": \"string\"\r\n      },\r\n      \"RequestTypeInt\": {\r\n        \"type\": \"number\"\r\n      },\r\n      \"WantsEmailResponse\": {\r\n        \"type\": \"boolean\"\r\n      }\r\n    }\r\n  }\r\n}')]"
        }
      }
    }

Когда я развертываю шаблон ARM, схема не импортируется должным образом, и я вижу следующую ошибку в представлении спецификации OpenAPI портала Azure:

x-ms-export-notes: -> - Экспортированный API содержит схемы, которые не относятся к типу содержимого «application / vnd.ms-azure-apim.swagger.definitions + json» и, следовательно, не экспортируются как определения Swagger.


person Joey Eng    schedule 05.07.2018    source источник
comment
Попробуйте использовать "contentType": "application/vnd.ms-azure-apim.swagger.definitions+json".   -  person Joy Wang    schedule 06.07.2018
comment
@JoyWang Это дает мне ту же ошибку, но добавляет и эту ошибку, но не уверен, что с ней делать: - ›- Параметры определений / тела не экспортируются, поскольку этот API ссылается на несколько схем с определениями Swagger, а не на одну. Ссылки на схемы: schema-v1-options, schema-v1-report   -  person Joey Eng    schedule 06.07.2018
comment
Попробуйте изменить name, перейдите по этой ссылке: mlogdberg.com   -  person Joy Wang    schedule 06.07.2018
comment
Интересно, что они не следуют формату: document: {value: string} Спасибо, я попробую. Это также, кажется, отвечает на вопрос, почему в сообщении об ошибке говорилось, что у меня было несколько схем с определениями Swagger, как я его и настроил (как несколько ресурсов).   -  person Joey Eng    schedule 06.07.2018
comment
Если это сработает, дайте мне знать.   -  person Joy Wang    schedule 06.07.2018
comment
Не повезло. Вот шаблон ARM, который у меня есть для операций и схем: jsonblob.com/0a547583-813f-11e8 -adf3-af009eda506f   -  person Joey Eng    schedule 06.07.2018
comment
Есть два способа передать схему. 1 - использовать document: {value: ...}, это в основном предназначено для схем, отличных от JSON, поскольку мы должны предоставить представление JSON для этой конечной точки, поэтому необходимо обернуть данные, отличные от JSON, в строку JSON. Для схем на основе JSON (например, определений Swagger) вы можете разместить их прямо внутри документа как правильный json, например: document: {definitions: {TYPE-NAME: {...}}} Выполнение этого плюс с использованием типа содержимого, упомянутого выше должен это сделать.   -  person Vitaliy Kurokhtin    schedule 09.07.2018
comment
@VitaliyKurokhtin, спасибо, я пробовал оба способа, но получил ошибки. Я предпочитаю второй способ (json). Вы можете взглянуть на то, что у меня здесь? jsonblob.com/0a547583-813f-11e8-adf3-af009eda506f Я поставил схемы json в переменных, чтобы упростить просмотр шаблона руки (схема json).   -  person Joey Eng    schedule 09.07.2018
comment
Если в логике шаблона ARM нет чего-то особенного, ваши определения не будут работать. эта [переменные ('schema-v1-options-name')]: [variables ('schema-v1-options')] определила свойство с именем [variables ('schema-v1-options-name')] со строковым значением из [переменных ('schema-v1-options')]. Что неверно. Значение определения должно быть объектом JSON, а не строкой.   -  person Vitaliy Kurokhtin    schedule 11.07.2018
comment
Хорошо, но переменной присвоено значение json. Я надеялся сделать это таким образом, но я попробую сделать так, как вы предлагаете, и доложу.   -  person Joey Eng    schedule 11.07.2018


Ответы (1)


Я следил за шаблоном ARM, основанным на ссылке от Joy Wang. Это дало мне 90% пути туда. Проблема заключалась в том, что для schemaId каждой операции я использовал имя определения (или имя типа), но это должен быть идентификатор ресурса схемы.

person Joey Eng    schedule 20.07.2018