的WebAPI的OData $格式为XML [英] WebAPI OData $format to xml

查看:340
本文介绍了的WebAPI的OData $格式为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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆