在ASP.NET Web API

时间:2016-06-27 14:09:24

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

在ASP.NET Web API中,我需要为单个方法强制XML输出,但为其他方法启用JSON格式化程序。我在该主题上看到的所有内容都建议从GlobalConfiguration中删除JSON格式化程序,如下所示:

// remove JSON formatter
var formatters = GlobalConfiguration.Configuration.Formatters;
formatters.Remove(formatters.JsonFormatter);

这可以工作但禁用JSON输出应用程序。我需要能够为特定方法或控制器指定格式化程序,而不会影响全局配置。这是可能的还是只能通过GlobalConfiguration完成?

1 个答案:

答案 0 :(得分:1)

Microsoft为此特定目的引入了per-controller configuration。您 需要将您的功能分成不同的控制器,但希望这对您的特定目标来说不会太麻烦(甚至可能是一种改进)。

基本上,这就是你所做的:

  1. 为一般情况设置基本JSON格式
  2. 为XML方法引入一个特定的Controller,并为其提供一个特定的配置:
  3. [XMLControllerConfig]
    public class XMLController: ApiController
    {
        [HttpGet]
        public string SomeMethod(string someArgument)
        {
            return "abc";
        }
    }
    

    ...

    class XMLControllerConfigAttribute: Attribute, IControllerConfiguration
    {
        public void Initialize(HttpControllerSettings controllerSettings, 
                               HttpControllerDescriptor controllerDescriptor)
        {
            controllerSettings.Formatters.Clear();
            controllerSettings.Formatters.Add(new XMLFormatter());
        }
    }