WebAPI OData $格式转换为xml

2023-11-27

对于我的 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。

如果我添加$格式=应用程序/XML对于查询字符串,它仍然输出为 json light。如何强制输出 XML?

EDIT:

即使我强制 XML在 Fiddler 中通过发送内容类型:application/xml and 接受:应用程序/xml对于请求,响应仅列出: 内容类型:application/json; odata=最小元数据;流=真;字符集=utf-8

EDIT 2:

接受:application/atom+xml似乎确实在原始响应中输出 xml。不幸的是,“application/atom+xml”在以下位置抛出 FormatException:

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

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

request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/atom+xml");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WebAPI OData $格式转换为xml 的相关文章