WebAPI OData $格式为xml

时间:2014-02-05 10:04:45

标签: c# asp.net xml asp.net-web-api odata

对于我的WebAPI OData应用程序,我试图让我的客户端(浏览器)决定数据输出应该是什么格式。由于 $ format 尚未在WebAPI OData中实现,我在这里使用Raghuramn的示例:https://gist.github.com/raghuramn/5556691

var queryParams = request.GetQueryNameValuePairs();
var dollarFormat = queryParams.Where(kvp => kvp.Key == "$format").Select(kvp => kvp.Value).FirstOrDefault();

if (dollarFormat != null)
{
    request.Headers.Accept.Clear();
    request.Headers.Accept.Add(MediaTypeWithQualityHeaderValue.Parse(dollarFormat));

    // remove $format from the request.
    request.Properties[HttpPropertyKeys.RequestQueryNameValuePairsKey] = queryParams.Where(kvp => kvp.Key != "$format");
}

这适用于JSON($ format = application / json; odata = fullmetadata)和JSON light(format = application / json; odata = light),但到目前为止还不适用于xml。

如果我将 $ format = application / XML 添加到查询字符串,它仍会输出到json light。我如何强制XML输出?

修改

即使我通过发送我强制xml 在Fiddler中 内容类型:application / xml 接受:application / xml 根据请求,响应只列出: Content-Type:application / json;的OData = minimalmetadata;流= TRUE;字符集= UTF-8

编辑2:

接受:application / atom + xml 似乎在原始响应中输出xml。不幸的是,“application / atom + xml”在:

中抛出FormatException
request.Headers.Accept.Add(MediaTypeWithQualityHeaderValue.Parse("application/atom+xml"));

2 个答案:

答案 0 :(得分:3)

设置请求ContentType而不是AcceptHeader可以解决问题:

request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/atom+xml");

答案 1 :(得分:0)

由于搜索了此问题所提供的关键字request.Headers.Accept.AddMediaTypeWithQualityHeaderValue,我发现CodeProject Article实际上提供了语法以正确添加Accept标头并解决同样的问题:

this.Request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/atom+xml"));

而不是抛出FormatException的MediaTypeWithQualityHeaderValue.Parse("application/atom+xml")