如何在 azure 函数中禁用 XML 序列化

How to disable XML serialization in azure functions

当我从我的浏览器访问我的 azure 函数 (C# HttpTrigger) 时,我得到一个带有错误消息的 XML 响应,而不是 JSON 响应。

这是意料之中的,因为响应包含一个 JObject,它可以很好地序列化为 JSON,但不能序列化为 XML,并且浏览器的 Accept header 要求选择 XML 而不是 JSON。

我可以通过摆弄浏览器的 Accept header(插入 application/json;q=0.95)来使用变通方法来获得正确的响应,但我真正想要的是禁用 XML 序列化Azure 函数,因为我的函数无论如何都不会 XML 兼容。

有没有办法删除或禁用 Azure Functions 中的 XML 格式化程序,以便它 "forgets" 可以序列化为 XML,以及任何 application/xml请求 header 被忽略?而是让 JSON 格式化程序优先,尽管请求要求更喜欢 XML?

经过一些挖掘,我找到了一个可行的答案。原来 HttpRequestMessageExtensions.CreateResponse 扩展方法(扩展 HttpRequestMessage)有几个重载,其中一些允许明确指定结果媒体类型。

所以不用

return req.CreateResponse(HttpStatusCode.OK, returnObject);

我不得不写

return req.CreateResponse(HttpStatusCode.OK, returnObject, "application/json");

获得我想要的行为。