force xml return on some web api controllers while maintaining default JSON

前端 未结 1 1772
南方客
南方客 2021-02-09 01:09

We are doing some azure store integration and its resource provider code requires us to use xml as the return formatter. However we only want to use XML with the Azure stuff an

相关标签:
1条回答
  • 2021-02-09 01:45

    If you like to always send back Xml from a specific action, you could just do the following:

    public HttpResponseMessage GetCustomer(int id)
    {
        Customer customer = new Customer() { Id  =1, Name = "Michael" };
    
        //forcing to send back response in Xml format
        HttpResponseMessage resp = Request.CreateResponse<Customer>(HttpStatusCode.OK, value: customer,
            formatter: Configuration.Formatters.XmlFormatter);
    
        return resp;
    }
    

    You can have formatters specific to certain controllers only. This can be achieved by a feature called Per-Controller Configuration:

    [MyControllerConfig]
    public class ValuesController : ApiController
    

    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
    public class MyControllerConfigAttribute : Attribute, IControllerConfiguration
    {
        public void Initialize(HttpControllerSettings controllerSettings, HttpControllerDescriptor controllerDescriptor)
        {
            // yes, this instance is from the global formatters
            XmlMediaTypeFormatter globalXmlFormatterInstance = controllerSettings.Formatters.XmlFormatter;
    
            controllerSettings.Formatters.Clear();
    
            // NOTE: do not make any changes to this formatter instance as it reference to the instance from the global formatters.
            // if you need custom settings for a particular controller(s), then create a new instance of Xml formatter and change its settings.
            controllerSettings.Formatters.Add(globalXmlFormatterInstance);
        }
    }
    
    0 讨论(0)
提交回复
热议问题