在ASP.Net Web API中,如何更改特定Controller或Action的默认格式化程序

时间:2014-03-17 20:34:17

标签: asp.net-web-api mediatypeformatter

我们正在运行一个Web API站点,它将用于多种用途:

  1. 在开发客户端中,例如我们构建的iPhone应用程序,主要使用JSON。
  2. 普通用户通过RSS客户端,将其添加到他们喜欢的RSS阅读器(例如Flipboard)。
  3. 我创建了一个基于this link的自定义RSS 2.0,并在WebApiConfig中配置了

    public static void Register(HttpConfiguration config)
    {
        config.Formatters.Add(new SyndicationMediaTypeFormatter());
    

    它接受application / rss + xml和application / atom + xml的接受头文件。

    用户通常会将RSS源粘贴到他们的rss客户端,而不知道任何有关头的信息 - 所以我需要默认一些RSS路由。

    但是,这是棕色地带开发,json供稿已经在使用中,目前作为默认设置,我无法在整个网站中更改默认格式化程序,而不会对现有开发人员客户产生负面影响。

    我可以将其作为特定控制器的默认格式化程序,但不能作为整个站点的默认格式化程序吗?

1 个答案:

答案 0 :(得分:9)

您可以使用IControllerConfiguration来定义每个控制器的特定配置..

This是描述此方案的示例。您可以快速了解如何使用此接口here(来自示例)。

自定义配置的一个示例是:

public class CustomControllerConfigAttribute : Attribute, IControllerConfiguration
{
    public void Initialize(HttpControllerSettings controllerSettings, 
                           HttpControllerDescriptor controllerDescriptor)
    {
        // Register an additional plain text media type formatter
        controllerSettings.Formatters.Add(new PlainTextBufferedFormatter());
    }
}

PlainTextBufferedFormatter的来源,如果您有点好奇。