Azure 函数不返回 XML 响应
Posted
技术标签:
【中文标题】Azure 函数不返回 XML 响应【英文标题】:Azure Function not returning XML response 【发布时间】:2021-09-29 16:08:42 【问题描述】:我无法将结果对象作为 XML 返回。正如我从文档中了解到的,JsonResult
将给定对象格式化为 JSON。但是ObjectResult
内置了内容协商功能。
尽管在请求中将 Accept
和 Content-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 响应的主要内容,如果未能解决你的问题,请参考以下文章