2014-05-16 11 views
5

W naszej aplikacji Web API 2, skonfigurowaliśmy formatowanie JSON globalnie tak:MVC5 - WebAPI 2 - CamelCase JSON formater przestał działać, gdy kontroler zmienił powrót HttpResponseMessage

var jsonformatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;  
jsonformatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 

To było wspaniałe - JSON był CamelCase. ., dopóki nie zmieniły nasze metody kontrolera zwrócić HttpReponseMessage (zamiast odpowiedzi modelu typu bezpośrednio) tak:

Request.CreateResponse(HttpStatusCode.OK, response); 

to jedna zmiana wydawała się powodować MVC nie używać formatowania JSON. Nasz JSON nie jest już CaemlCase.

Czy jest to oczekiwane/zaprojektowane zachowanie, czy też nie określiłem poprawnie formatyzatora?

Dzięki, -Mike

Odpowiedz

6

Rzeczywista metoda, która jest wywoływana, gdy używasz Request.CreateResponse to:

public static HttpResponseMessage CreateResponse<T>(
              this HttpRequestMessage request, T value) 
{ 
    return request.CreateResponse<T>(HttpStatusCode.OK, value, configuration: null); 
} 

Jak widać nieruchomość konfiguracja jest właśnie wartość null.

więc można po prostu ręcznie wziąć konfigurację z obiektu żądania i wywołać kolejną przeciążenie tak:

Request.CreateResponse(HttpStatusCode.OK, response, Request.GetConfiguration());

Jeśli jesteś zainteresowany bardziej szczegółowo, można sprawdzić kod źródłowy ram. CreateResponse jest zdefiniowane jako here

+0

Hmmm. Dzięki za odpowiedź. Wygląda jednak na to, że NIE wywołuje teraz moich określonych formaterów. Wcześniej miałem "odpowiedź zwrotną"; (to użyłem mojego formatyzatora camelcase). Teraz używam "Request.CreateResponse (HttpStatusCode.OK, response)" i nie używa mojego formatera – HokieMike

+0

Mój błąd :) Zaktualizowałem swoją odpowiedź – SoftwareFactor

Powiązane problemy