Csharp/C#教程:WebAPI OData $格式为xml分享


WebAPI OData $格式为xml

对于我的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 light。 我如何强制XML输出?

编辑:

即使我通过发送带有请求的Content-type:application / xmlAccept:application / xml 强制在Fiddler中使用xml ,响应只会列出:Content-Type:application / json; 的OData = minimalmetadata; 流= TRUE; 字符集= utf-8的

编辑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"); 

感谢搜索此问题提供的关键字request.Headers.Accept.AddMediaTypeWithQualityHeaderValue ,我发现了一个CodeProject文章实际上提供了正确添加Accept标头并解决相同问题的语法:

 this.Request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/atom+xml")); 

而不是抛出FormatException的MediaTypeWithQualityHeaderValue.Parse("application/atom+xml")

上述就是C#学习教程:WebAPI OData $格式为xml分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/985612.html

(0)
上一篇 2021年12月21日
下一篇 2021年12月21日

精彩推荐