1

在我的 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);
...
4

1 回答 1

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);
于 2013-08-13T17:07:07.403 回答