2013-07-22 10 views
7

Robimy pewne integracje sklepu azure, a jego kod dostawcy zasobów wymaga od nas użycia xml jako formatera zwrotu. Jednak chcemy używać tylko XML z materiałami Azure i pozostawić domyślny program formatujący JSON.Wymuszenie zwrotu xml na niektórych kontrolerach internetowych api przy jednoczesnym zachowaniu domyślnego JSON

Czy ktoś wie, w jaki sposób można wymusić api sieci dla konkretnych kontrolerów/metod, aby zawsze zwracać xml bez zakłócania globalnych formaterów przy uruchamianiu aplikacji?

Pracując z MVC 4.5 i kodem opartym w znacznej mierze od https://github.com/MetricsHub/AzureStoreRP, po prostu przeniosłem pliki web api do naszych własnych usług i zmodyfikowałem warstwę danych, aby używać naszego backendu w porównaniu z backendem framework, który ma.

Odpowiedz

16

Jeśli chcesz zawsze odesłać XML z określonego działania, można po prostu wykonaj następujące czynności:

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

Można mieć formatek specyficzne tylko dla niektórych kontrolerów. Można to osiągnąć przez funkcję o nazwie 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

Drugim przykładem jest to, czego szukam. To jest świetne, dziękuję! – danatcofo

+0

Tego właśnie szukam. Dzięki Kiran !!!! –

Powiązane problemy