2017-03-06 34 views
4

当我从我的浏览器访问我的蔚蓝功能(C#HttpTrigger)我得到一个错误信息,而不是一个JSON响应的XML响应。如何禁用XML序列化在蔚蓝的功能

这是可以预料的,因为响应中包含一个JObject,它可以序列化为JSON,但不适用于XML,浏览器的Accept头要求XML优于JSON。

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

有没有办法在Azure函数中删除或禁用XML格式化程序,以便它可以“忘记”它可以序列化为XML,并且请求标头中的任何application/xml都会被忽略?而是让JSON格式化程序优先,尽管请求要求更喜欢XML?

+0

返回您的实际POCO,而不是序列化器的类。 Json只是一个具有特定格式的字符串。它*可以*被添加到XML文档,就像任何其他字符串一样。另一方面,'JObject'不是* JSON字符串,它是一个特定序列化库使用的对象。这相当于试图返回一个XmlDocument。就像在ASP.NET MVC或Web API中那样 - 返回POCO并让框架根据请求的格式决定如何序列化。 –

+0

此外,如果您不需要XML,请停止询问它。不要试图破坏服务器,修复客户端 –

回答

1

随着有点挖我找到了一个工作的答案。事实证明,HttpRequestMessageExtensions.CreateResponse扩展方法(扩展HttpRequestMessage)有几个重载,其中一些允许明确指定生成的媒体类型。

所以不是

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

我不得不写

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

得到我想要的行为。