的WebAPI的OData $格式为XML [英] WebAPI OData $format to xml
问题描述
我的WebAPI OData的应用,即时通讯试图给我的客户端(浏览器)数据输出应该是什么格式的决定。为 $格式尚未在OData的的WebAPI,即时通讯使用此处Raghuramn的例子来实现: HTTPS ://gist.github.com/raghuramn/5556691
VAR queryParams = request.GetQueryNameValuePairs();
VAR dollarFormat = queryParams.Where(KVP => kvp.Key ==$格式)选择(KVP => kvp.Value)。.FirstOrDefault();如果(dollarFormat!= NULL)
{
request.Headers.Accept.Clear();
request.Headers.Accept.Add(MediaTypeWithQualityHeaderValue.Parse(dollarFormat)); //从请求删除$格式。
request.Properties [HttpPropertyKeys.RequestQueryNameValuePairsKey] = queryParams.Where(KVP =>!kvp.Key =$格式);
}
这适用于JSON($格式=应用程序/ JSON; ODATA = fullmetadata)和JSON光。(格式=应用程序/ JSON; ODATA =光),但到目前为止还没有对XML
如果我的 $格式=应用程序/ XML 添加到查询字符串,它仍然输出到JSON光。如何强制XML输出?
编辑:
即使我的力XML 的提琴手中通过发送
的内容类型:应用程序/ XML 的和
接受:应用程序/ XML 的
与请求,响应简单地列出:
内容类型:应用程序/ JSON的; ODATA = minimalmetadata;流= TRUE;字符集= UTF-8
编辑2:
的接受:应用程序/原子+ XML 的似乎输出XML在原始响应。不幸的是,应用程序/原子+ XML抛出出现FormatException中:
<$p$p><$c$c>request.Headers.Accept.Add(MediaTypeWithQualityHeaderValue.Parse(\"application/atom+xml\"));设置请求的ContentType,而不是AcceptHeader做的伎俩:
request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse(应用程序/原子+ XML);
for my WebAPI OData application, im trying to give my client (browser) the decision what format the data output should be. as $format is not implemented yet in WebAPI OData, im using Raghuramn's example here: 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");
}
This works for JSON ($format=application/json;odata=fullmetadata) and JSON light (format=application/json;odata=light) but so far not for xml.
if i add $format=application/XML to the querystring, it still outputs to json light. how do i force XML output?
EDIT:
even if i force xml in Fiddler by sending Content-type: application/xml and Accept: application/xml with the request, the response simply lists: Content-Type: application/json; odata=minimalmetadata; streaming=true; charset=utf-8
EDIT 2:
Accept: application/atom+xml does seem to output xml in the raw response. Unfortunately, "application/atom+xml" throws a FormatException in:
request.Headers.Accept.Add(MediaTypeWithQualityHeaderValue.Parse("application/atom+xml"));
setting the request ContentType instead of the AcceptHeader did the trick:
request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/atom+xml");
这篇关于的WebAPI的OData $格式为XML的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!