Azure Functions可以返回XML吗?

7

寻找一个返回XML的Azure函数的Node.js示例。我下面的代码返回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
}
2个回答

9

Mark,

没错!你已经接近成功了,但是你可以在这里看到如何设置响应中的内容类型的示例。

此外,在下一版本的修复中,将启用适当的内容协商,这将消除在许多情况下需要显式设置该内容的需求。


谢谢!添加以下内容可以正常工作:headers: { 'Content-Type': 'text/xml' } - Mark Tucker
你确定这个可行吗?我得到了以下输出:<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/"><?xml version="1.0" encoding="UTF-8"?><Response><Say>Azure functions!</Say></Response></string> - dprothero
1
如果我使用 text/html 作为内容类型,它就能正常工作。Twilio 将接受该内容类型,并且 Azure 不会像我之前评论中所示那样对 XML 字符串进行编码。 - dprothero
2
请参见 https://github.com/Azure/azure-webjobs-sdk-script/issues/965 -- 需要在响应中添加 isRaw: true - dprothero
是的。isRaw 是最近添加的,用于处理在 1.0 中进行的一些更改,并返回原始有效载荷的方法。 - Fabio Cavalcante
太好了,我们有这个用于Node的工具,但是对于.NET v2函数,我无法使用.NET Core结构成功返回带有正确标头的XML负载。我在我的博客上记录了我的经验和解决方法:http://netitude.bc3tech.net/2018/05/25/creating-an-xml-json-converter-in-azure-functions很想知道我是否遗漏了什么。 - bc3tech

7
为了使Fabio的回答更加完整,以下是更新后的代码:
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 文件。

"headers" 代码块可用于设置要返回的任何标头。请注意,如果在函数应用程序的设置中设置了任何 CORS 相关标头,则将覆盖这些标头。您必须在函数应用程序设置中设置 CORS 数据,或在代码中手动处理 CORS。

"isRaw" 设置为 true 是必需的,以便 Azure Function 不会试图智能化操作并对已编码数据进行 XML 编码。

请注意,根据我的经验,Azure Functions 正在积极开发并经常更改。因此,如果遇到问题或此代码不再起作用,则最好的方法是 搜索/打开 Github 上的问题。


这个 isRaw 非常有帮助! - Kai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接