Azure 函数不返回 XML 响应

Posted

技术标签:

【中文标题】Azure 函数不返回 XML 响应【英文标题】:Azure Function not returning XML response 【发布时间】:2021-09-29 16:08:42 【问题描述】:

我无法将结果对象作为 XML 返回。正如我从文档中了解到的,JsonResult 将给定对象格式化为 JSON。但是ObjectResult 内置了内容协商功能。

尽管在请求中将 AcceptContent-Type 标头都设置为 application/xml,但该函数始终将响应对象序列化为 JSON。

[FunctionName("Function1")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,
    ILogger log)

    ResponseMessage responseObject = new ResponseMessage
    
        Code = "111",
        Message = "This response shall be XML formatted"
    ;

    return new ObjectResult(responseObject);

我发现帖子Can Azure Functions return XML? 提到了适当的内容协商即将到来,所以我假设.Net Core 3.1 5 年后应该支持这一点。

编辑:

我正在测试的代码是在本地运行的。刚刚注意到,通过“在门户中开发”放入托管 Azure 函数的相同代码运行良好,并在请求中设置 Accept:application/xml 时返回预期的 XML。 Accept 是充分条件,Content-Type 不需要设置。

【问题讨论】:

【参考方案1】:

Azure 函数不返回 XML 响应

最简单的方法是依赖Content Result

[FunctionName("ContentResultWithXmlInString")]
public static IActionResult Run4([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequest req, TraceWriter log)

    string xmlContent = File.ReadAllText("xmlcontent.xml");            
    return new ContentResult  Content = xmlContent, ContentType = "application/xml" ;




  GET http://localhost:7071/api/ContentResultWithXmlInString HTTP/1.1
    User-Agent: Fiddler
    Host: localhost:7071
    Accept: application/xml
    
    
    HTTP/1.1 200 OK
    Date: Fri, 25 May 2018 22:16:58 GMT
    Content-Type: application/xml
    Server: Kestrel
    Content-Length: 232
    
    <?xml version="1.0" encoding="utf-8" ?>
    <MyData xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/HttpReturnXml">
      <Property1>Foo</Property1>
      <Property2>3</Property2>
    </MyData>

您将 xml 转换为字符串,然后将该字符串放入 OKObjectResult

更多信息请参考XML response

【讨论】:

以上是关于Azure 函数不返回 XML 响应的主要内容,如果未能解决你的问题,请参考以下文章

Azure 函数返回不推荐使用的 API 标头

Azure 函数中间件:如何返回自定义 HTTP 响应?

数据工厂中使用的 Python Azure 函数返回:“响应内容不是有效的 JObject”

Azure HTTP 触发函数调用返回 417 错误代码

Azure 逻辑应用返回多个响应

Easy Auth 对某些人返回空响应