Asp.net web api 如何使用ASP.NET WebApi 2.2生成ATOM格式的ODATA服务?
如何在ASP.NET WebApi 2.2 ODATA服务中生成ATOM格式的输出?创建JSON版本或简单的XML格式很容易。但无论我如何请求内容类型,我总是在配置中获得第一种格式。(对Chrome使用PostMan,或在producer方法中设置请求的内容类型。) 若我使用WCF数据服务,我会得到ATOM格式的结果。但据我所知,ODataV4只在WebApi中实现,而不是在WCF中实现。所以,这似乎有点奇怪,我不能以我喜欢的方式格式化它 我的配置代码是基本的:Asp.net web api 如何使用ASP.NET WebApi 2.2生成ATOM格式的ODATA服务?,asp.net-web-api,odata,atom-feed,Asp.net Web Api,Odata,Atom Feed,如何在ASP.NET WebApi 2.2 ODATA服务中生成ATOM格式的输出?创建JSON版本或简单的XML格式很容易。但无论我如何请求内容类型,我总是在配置中获得第一种格式。(对Chrome使用PostMan,或在producer方法中设置请求的内容类型。) 若我使用WCF数据服务,我会得到ATOM格式的结果。但据我所知,ODataV4只在WebApi中实现,而不是在WCF中实现。所以,这似乎有点奇怪,我不能以我喜欢的方式格式化它 我的配置代码是基本的: config.MapODa
config.MapODataServiceRoute(
routeName: "ODataRoute",
routePrefix: null,
model: builder.GetEdmModel());
谢谢
反价
更新:
使用(来自第一条评论的链接@mdisibrio),我得到了以下信息(WebApi 2.2):
项目
项目
但我想得到的是(WCF数据服务):
违约
项目列表
是的,我完全知道,这些实体有不同的名称。这不是我的问题。借用此链接:
您可以添加希望在WebApiConfig中使用的任何格式化程序。以你为例,我想你应该这样做:
var odataFormatters = ODataMediaTypeFormatters.Create();
odataFormatters = odataFormatters.Where(
f => f.SupportedMediaTypes.Any(
m => m.MediaType == "application/atom+xml" ||
m.MediaType == "application/atomsvc+xml")).ToList();
config.Formatters.Clear();
config.Formatters.AddRange(odataFormatters);
你的目标是什么?它将向请求处理程序添加一个atom格式化程序。很遗憾,v4默认情况下不添加它。@mdisibio:谢谢。我已经试过了。它确实生成XML,但格式不正确。查看我的更新。arrg…我花了很长时间才弄明白如何获得xml响应,我从来没有注意到它是普通的旧xml而不是Atom。我发现这是有道理的,从6.1 libs开始:OData核心库能够序列化OData v4 Atom格式,但这并没有得到正式支持,因为Atom规范还并没有进入CS2阶段。使用您的解决方案,我得到了
406Not Acceptable
<service xmlns="http://www.w3.org/2007/app"
xmlns:atom="http://www.w3.org/2005/Atom"
xml:base="http://MYSERVER/Service.svc/">
<workspace>
<atom:title>Default</atom:title>
<collection href="ProjectList">
<atom:title>ProjectList</atom:title>
</collection>
</workspace>
</service>
var odataFormatters = ODataMediaTypeFormatters.Create();
odataFormatters = odataFormatters.Where(
f => f.SupportedMediaTypes.Any(
m => m.MediaType == "application/atom+xml" ||
m.MediaType == "application/atomsvc+xml")).ToList();
config.Formatters.Clear();
config.Formatters.AddRange(odataFormatters);