Могут ли функции Azure возвращать XML?

Ищу пример Node.js возврата XML из функции Azure. Код, который у меня ниже, возвращает строку xml, но для ответа Content-Type установлено значение text / plain; charset = utf-8 вместо text / xml; charset = utf-8

index.js

module.exports = function(context, req) {
    var xml = '<?xml version="1.0" encoding="UTF-8"?><Response><Say>Azure functions!</Say></Response>';

    context.res = {
        contentType: 'text/xml',
        body: xml
    };

    context.done();
};

Вот привязки.

function.json

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    }
  ],
  "disabled": false
}

person Mark Tucker    schedule 10.11.2016    source источник


Ответы (2)


Отметка,

Абсолютно! Вы были близки, но вы можете увидеть пример того, как вы можете установить тип контента в ответе здесь.

В следующем выпуске также есть исправление, которое обеспечит правильное согласование содержимого, что во многих случаях устранит необходимость явно устанавливать это содержимое.

person Fabio Cavalcante    schedule 10.11.2016
comment
Спасибо! Добавление сработало: headers: { 'Content-Type': 'text/xml' } - person Mark Tucker; 12.11.2016
comment
Вы уверены, что это работает? Я получил такой результат: <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;Response&gt;&lt;Say&gt;Azure functions!&lt;/Say&gt;&lt;/Response&gt;</string> - person dprothero; 18.11.2016
comment
Это работает, если я использую text/html в качестве типа содержимого. Twilio примет это, а Azure не кодирует строку XML, как показано в моем предыдущем комментарии. - person dprothero; 18.11.2016
comment
См. github.com/Azure/azure-webjobs-sdk-script/issues. / 965 - в ответ нужно добавить isRaw: true. - person dprothero; 28.11.2016
comment
да. isRaw был добавлен недавно, чтобы иметь дело с некоторыми изменениями, внесенными в 1.0, и это способ вернуть необработанную полезную нагрузку. - person Fabio Cavalcante; 28.11.2016
comment
Это здорово, что у нас есть это для узла, но для функций .Net v2 мне не удалось использовать конструкции .Net Core для успешного возврата полезной нагрузки XML с правильными заголовками. Я описал свой опыт и обходной путь в своем блоге здесь: netitude.bc3tech.net/2018/05/25/ Хотелось бы знать, если я что-то упускаю. - person bc3tech; 25.05.2018

Чтобы сделать ответ Фабио более полным, обновленный код будет следующим:

module.exports = function(context, req) {
    var xml = '<?xml version="1.0" encoding="UTF-8"?><Response><Say>Azure functions!</Say></Response>';

    context.res = {
        "headers" : { 
            "Content-Type" : 'text/xml'
        },
        "body": xml,
        "isRaw" : true
    };

    context.done();
};

Вам не нужно менять function.json.

Блок «заголовки» можно использовать для установки любых заголовков, которые вы хотите вернуть. Обратите внимание, что любые заголовки, связанные с CORS, будут перезаписаны, если в настройках приложения-функции установлено что-либо для установки данных CORS. Вам нужно либо установить данные CORS в настройках приложения-функции, либо вручную обработать CORS в своем коде.

Значение true для параметра isRaw необходимо, чтобы функция Azure не пыталась перехитрить вас и чтобы XML кодировал ваши уже закодированные данные.

К вашему сведению, по моему опыту, функции Azure активно развиваются и часто меняются. В результате лучше всего, если вы столкнетесь с проблемой или этот код больше не работает; предназначен для поиска / открытия проблемы на Github.

person Doug    schedule 22.02.2017
comment
это isRaw было чрезвычайно полезно! - person Kai; 06.09.2017