Web Api 2内容协商不服从Accept Header

时间:2016-03-18 10:05:24

标签: json xml asp.net-web-api asp.net-web-api2 content-negotiation

关注Darrel Miller's guide我将原始数据发布到我的网络API控制器并保留它。内容可以是application / xml或application / json。

在相应的get方法中,我检索发布的内容,解析为XML内容的XElement或json的JToken,并返回OK(json)或OK(xml)。

public IHttpActionResult Get()
{
    // obtain parsed JToken or XElement

    return OK(parsedObject);
}

问题在于,它不遵守Accept Header,例如,当Accept为" application / xml"时,返回原始json。这是设计还是我错过了什么?

我期待this种行为。

编辑 - 如果我将传递给OK方法的内容修改为parsedObject.ToString(),则遵循Accept标头,因此将JToken对象转换为XML似乎存在问题。

1 个答案:

答案 0 :(得分:1)

您确定没有从格式化程序列表中删除XmlSerializer吗?

无论如何,您始终可以控制将在响应级别用于序列化的格式化程序。

例如:

    //forcing xml
    HttpResponseMessage resp = Request.CreateResponse(HttpStatusCode.OK, result, new XmlMediaTypeFormatter());
    return resp;

您可以使用当前格式化程序的实例更改new XmlMediaTypeFormatter()以进行实际配置。

查看this链接和this链接了解详情。

相关问题