2014-09-02 63 views
2

如何在ASP.NET WebApi 2.2 ODATA服務中生成ATOM格式的輸出?創建JSON版本或簡單的XML格式非常簡單。但無論我如何請求Content-Type,我總是會在配置中獲得第一種格式。 (郵遞員使用Chrome瀏覽器,或設置在製作方法的請求的Content-Type。)如何使用ASP.NET WebApi 2.2生成ATOM格式的ODATA服務?

如果我使用WCF數據服務,我得到ATOM格式的結果。但據我所知,ODATA v4僅在WebApi中實現,而不是在WCF中實現。所以,這似乎有點奇怪,我不能格式化任何方式,我喜歡...

我的配置代碼是最基本的:

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

感謝,

AntiTalent

UPDATE: 使用typical solution found on the net(從1日評論鏈接,@mdisibrio),我得到這個(2.2的WebAPI):

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

是的,我充分意識到,該機構有不同的名稱。這不是我的問題。

+0

是否[這個答案](http://stackoverflow.com/a/25269213/458354)解決你想要完成的?它會爲請求處理程序添加一個原子格式器。不幸的是,v4默認不會添加它。 – mdisibio 2014-09-02 21:49:58

+0

@mdisibio:謝謝。已經嘗試過了。它確實會生成XML,但格式不正確。查看我的更新。 – AntiTalent 2014-09-03 08:07:12

+2

Arrrg ...我花了這麼長時間才弄清楚如何獲得一個XML響應,我從來沒有注意到它是普通的xml而不是Atom。 [這是最接近的解釋(http://www.infoq.com/news/2014/03/asp-net-odata-4)我發現,使任何意義,因爲6.1林達: _OData核心庫能夠序列化OData v4 Atom格式,但由於Atom規範尚未處於CS2階段,因此這尚未正式支持._ – mdisibio 2014-09-04 07:01:42

回答

1

從這個鏈接借款: 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); 
相關問題