如何在Web Api OData Web服务中禁用Formatters

时间:2013-08-13 15:53:44

标签: api web odata

在我的OData Web API Web服务中,我正在尝试禁用除XML之外的所有格式化程序,这样无论客户端在Accept标头中发送什么,我的Web服务都将始终返回XML。我的控制器来自EntitySetController。

我认为在纯Web API Web服务中,您可以删除不需要的格式化程序,如下面的代码,但它似乎不适用于我的OData Web Api Web服务。如何让它始终返回XML?

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // remove all formatters except XML
        MediaTypeFormatter xmlFormatter = config.Formatters.XmlFormatter;
        config.Formatters.Clear();
        config.Formatters.Add(xmlFormatter);

        ODataConventionModelBuilder modelBuilder = new ODataConventionModelBuilder();
        modelBuilder.EntitySet<WorkItem>("WorkItems");
        IEdmModel model = modelBuilder.GetEdmModel();
        config.Routes.MapODataRoute(routeName: "OData", routePrefix: "odata", model: model);
...

1 个答案:

答案 0 :(得分:2)

我假设当你说OData和XML时,你的意思是OData XML和Atom格式。如果是这样,以下内容应该有效,

var odataFormatters = ODataMediaTypeFormatters.Create();
odataFormatters = odataFormatters.Where(
    f => f.SupportedMediaTypes.Any(
        m => m.MediaType == "application/xml" ||
            m.MediaType == "application/atom+xml" ||
            m.MediaType == "application/atomsvc+xml" ||
            m.MediaType == "text/xml")).ToList();

config.Formatters.Clear();
config.Formatters.AddRange(odataFormatters);