2016-11-10 2 views
4

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

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 
} 

ответ

6

Марк,

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

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

+0

Спасибо! Добавление этого сработало: 'headers: {'Content-Type': 'text/xml'}' –

+0

Вы уверены, что это сработало? Я получил этот вывод: ' <? Xml version =" 1.0 "encoding =" UTF-8 "? > < Ответ > < Скажите > Функции Azure! </Say > </Ответ > ' – dprothero

+1

Это работает, если я использую' text/html' в качестве типа содержимого. Twilio согласится с этим, и Azure не кодирует строку XML, как показано в моем предыдущем комментарии. – dprothero

3

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

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, будут перезаписаны, если у вас есть что-либо, установленное в настройках вашего приложения Function, для установки данных CORS. Вы либо должны установить данные CORS в настройках приложения приложения, либо вручную обрабатывать CORS в своем коде.

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

FYI, мой опыт в том, что Azure Functions активно развивается и часто меняется. В результате ваш лучший выбор, если вы столкнулись с проблемой, или этот код больше не работает; is to search/open an issue on Github.

+0

этот 'isRaw' был чрезвычайно полезен! – Kai