C# 在ASP.NET Web API中选择性禁用XML格式化程序

C# 在ASP.NET Web API中选择性禁用XML格式化程序,c#,asp.net,.net,asp.net-web-api,asp.net-web-api2,C#,Asp.net,.net,Asp.net Web Api,Asp.net Web Api2,在ASP.NET Web API中,我需要为单个方法强制输出XML,但为其他方法启用JSON格式化程序。我在本主题中看到的所有内容都建议从GlobalConfiguration中删除JSON格式化程序,如下所示: //删除JSON格式化程序 var formatters=GlobalConfiguration.Configuration.formatters; 移除(formatters.JsonFormatter); 这可以工作,但在应用程序范围内禁用JSON输出。我需要能够在不影响全局配置

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

//删除JSON格式化程序
var formatters=GlobalConfiguration.Configuration.formatters;
移除(formatters.JsonFormatter);
这可以工作,但在应用程序范围内禁用JSON输出。我需要能够在不影响全局配置的情况下为特定方法或控制器指定格式化程序。这是可能的,还是只能通过GlobalConfiguration完成?

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

基本上,你要做的是:

  • 设置一般情况下的基本JSON格式
  • 为XML方法引入特定控制器,并为其提供特定配置:

  • 微软就是为了这个目的而推出的。您需要将功能划分为不同的控制器,但希望这不会对您的特定目标造成太多麻烦(甚至可能是一种改进)

    基本上,你要做的是:

  • 设置一般情况下的基本JSON格式
  • 为XML方法引入特定控制器,并为其提供特定配置:


  • 除了我需要使用System.Net.Http.Formatting.XmlMediaTypeFormatter而不是XMLFormatter之外,它工作得非常好。除了我需要使用System.Net.Http.Formatting.XmlMediaTypeFormatter而不是XMLFormatter之外,它工作得非常好。
    [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());
        }
    }