WebAPI OData $format 到 xml
Posted
技术标签:
【中文标题】WebAPI OData $format 到 xml【英文标题】:WebAPI OData $format to xml 【发布时间】: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 中的“+” .
【参考方案1】:
设置请求 ContentType 而不是 AcceptHeader 就可以了:
request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/atom+xml");
【讨论】:
对我不起作用。您能否告诉我您使用哪些版本的 Web API 和 OData 库?我正在使用 Web API 2.2(5.2.2 程序集版本)和 OData lib v. 6.7.0。 您好,@stefjnl - 如果可能的话,我想看看您的客户端代码(例如,如果您使用 jquery 的 ajax 来制定请求......它是什么样的?)【参考方案2】:感谢对这个问题提出的关键字 request.Headers.Accept.Add
和 MediaTypeWithQualityHeaderValue
的搜索,我找到了一个 CodeProject Article,它实际上提供了正确添加 Accept 标头并解决相同问题的语法:
this.Request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/atom+xml"));
而不是 MediaTypeWithQualityHeaderValue.Parse("application/atom+xml")
,它会抛出 FormatException。
【讨论】:
以上是关于WebAPI OData $format 到 xml的主要内容,如果未能解决你的问题,请参考以下文章