如何在Web Api中使用具有特定路由的特定媒体格式化程序

时间:2014-02-12 23:14:05

标签: c#-4.0 asp.net-web-api

我有一个WebApi项目,其中包含返回JSONP的控制器。为此,我使用的是JsonPMediaTypeFormatter类 - 我现在必须将这些控制器与不使用自定义格式化程序的第二个Web Api项目合并。如何为特定路线提供JSONP,即

“api / ProductsController / {action} / {id} - 返回JSONP

“api / LookupController / {action} / {id} - 没有自定义格式化程序

    public static void Register(HttpConfiguration config)
    {
         config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
        config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);

        config.Formatters.Insert(0, new JsonpMediaTypeFormatter());
     }

1 个答案:

答案 0 :(得分:2)

没有专门的格式化程序的路由方式,但有一个per-controller configuration可以用来拥有特定的格式化程序。例如,在您的方案中,您可以为某些控制器组配置一个公共基本控制器,并使用每个控制器的配置属性来装饰该基本控制器。

用于创建每个控制器配置的Web API示例: http://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/ControllerSpecificConfigSample/ReadMe.txt