【发布时间】:2014-03-01 16:41:59
【问题描述】:
对于我的 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 灯。我如何强制 XML 输出?
编辑:
即使我在 Fiddler 中通过发送强制 xml 内容类型:application/xml 和 接受:应用程序/xml 对于请求,响应仅列出: 内容类型:应用程序/json; odata=最小元数据;流=真;字符集=utf-8
编辑 2:
Accept: application/atom+xml 似乎确实在原始响应中输出了 xml。不幸的是,“application/atom+xml”在以下位置抛出了 FormatException:
request.Headers.Accept.Add(MediaTypeWithQualityHeaderValue.Parse("application/atom+xml"));
【问题讨论】:
-
你试过
text/xml吗? -
是的,也输出 json...
-
仅供参考,当使用 $format=application/atom+xml 查询字符串时,Raghuramn 的示例将失败,因为 DollarFormat 的值将是“application/atom xml”,这是由于 url 中的“+” .
标签: c# asp.net xml asp.net-web-api odata