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

时间:2014-09-02 11:34:00

标签: asp.net-web-api odata atom-feed

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

如果我使用WCF数据服务,我会得到ATOM格式化结果。但据我了解,ODATA v4仅在WebApi中实现,而不是在WCF中实现。所以,似乎有点奇怪,我不能以任何我喜欢的方式格式化它......

我的配置代码是基本的:

   config.MapODataServiceRoute(
        routeName: "ODataRoute",
        routePrefix: null,
        model: builder.GetEdmModel());

谢谢,

AntiTalent

更新: 使用typical solution found on the net(来自第1条评论的链接,@ mdisibrio),我得到了这个(WebApi 2.2):

<ODataServiceDocument 
xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.datacontract.org/2004/07/Microsoft.OData.Core">
  <EntitySets>
    <ODataEntitySetInfo>
      <Name>Projects</Name>
      <Title i:nil="true"/>
      <Url>Projects</Url>
    </ODataEntitySetInfo>
  </EntitySets>
  <FunctionImports/>
  <Singletons/>
</ODataServiceDocument>

但我想得到的是(WCF数据服务):

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

是的,我完全清楚,这些实体有不同的名称。这不是我的问题。

1 个答案:

答案 0 :(得分:2)

借鉴此链接: How to disable Formatters in Web Api OData web service

您可以在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);