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

Joh*_*ohn 6 asp.net-web-api mediatypeformatter

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

  1. 在开发客户端中,例如我们构建的iPhone应用程序,主要使用JSON.
  2. 普通用户通过RSS客户端,将其添加到他们喜欢的RSS阅读器(例如Flipboard).

我基于此链接创建了一个自定义RSS 2.0,并在WebApiConfig中进行了配置

public static void Register(HttpConfiguration config)
{
    config.Formatters.Add(new SyndicationMediaTypeFormatter());
Run Code Online (Sandbox Code Playgroud)

它接受application/rss + xml和application/atom + xml的接受头.

用户通常将RSS提要粘贴到他们的rss客户端,而不知道任何关于标题的内容 - 所以我需要有一些默认的RSS路由.

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

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

Kir*_*lla 9

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

是描述此场景的示例.您可以快速查看此界面应如何在此处使用(来自示例).

自定义配置的示例是:

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

PlainTextBufferedFormatter如果你好奇的来源.

  • 源已从 codeplex 中删除并移至此处:[PlainTextBufferedFormatter](https://github.com/aspnet/samples/blob/master/samples/aspnet/WebApi/ControllerSpecificConfigSample/Formatters/PlainTextBufferedFormatter.cs) (2认同)