Asp.net web api 如何使用ASP.NET WebApi 2.2生成ATOM格式的ODATA服务?

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

如何在ASP.NET WebApi 2.2 ODATA服务中生成ATOM格式的输出?创建JSON版本或简单的XML格式很容易。但无论我如何请求内容类型,我总是在配置中获得第一种格式。(对Chrome使用PostMan,或在producer方法中设置请求的内容类型。)

若我使用WCF数据服务,我会得到ATOM格式的结果。但据我所知,ODataV4只在WebApi中实现,而不是在WCF中实现。所以,这似乎有点奇怪,我不能以我喜欢的方式格式化它

我的配置代码是基本的:

   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);