如何在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>
是的,我完全清楚,这些实体有不同的名称。这不是我的问题。
答案 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);