2013-07-22 20 views
7

Stiamo facendo un po 'di integrazione nel negozio azzurro e il suo codice del fornitore di risorse ci impone di usare xml come formattatore di ritorno. Tuttavia, vogliamo utilizzare solo XML con le risorse di Azure e lasciare solo il formattatore JSON predefinito.force xml return su alcuni web api controller mantenendo il default JSON

Quindi, qualcuno sa come si può forzare l'API Web per controller/methood specifici per restituire sempre xml senza fare confusione con i formattatori globali all'avvio dell'applicazione?

Lavorando con MVC 4.5 e codice basato in gran parte su https://github.com/MetricsHub/AzureStoreRP, ho semplicemente spostato la roba web api nei nostri servizi e modificato il livello dati per utilizzare il nostro backend rispetto al backend di entità framework che ha.

risposta

16

Se vi piace per inviare sempre indietro XML da un'azione specifica, si può solo effettuare le seguenti operazioni:

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; 
} 

si può avere formattatori specifici per solo alcuni controllori. Ciò può essere ottenuto da una funzione chiamata 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

Il secondo esempio è quello che sto cercando. Grazie mille! – danatcofo

+0

Questo è quello che sto cercando. Grazie Kiran !!!! –