ASP.NET Web API domyślnie negocjuje zawartość - zwróci XML, JSON lub inny typ na podstawie Accept
nagłówka. Nie potrzebuję / nie chcę tego, czy istnieje sposób (na przykład atrybut lub coś), aby powiedzieć interfejsowi API sieci Web, aby zawsze zwracał JSON?
asp.net-mvc
asp.net-web-api
Borek Bernard
źródło
źródło
GlobalConfiguration.Configuration.Formatters
Odpowiedzi:
Obsługa tylko formatu JSON w ASP.NET Web API - WŁAŚCIWY SPOSÓB
Zamień IContentNegotiator na JsonContentNegotiator:
Implementacja JsonContentNegotiator:
źródło
Accept
XML otrzyma JSON, a nie 406 ?Accept
nagłówka.GlobalConfiguration...Clear()
faktycznie działa.Wyczyść wszystkie elementy formatujące i dodaj ponownie program formatujący Json.
EDYTOWAĆ
Dodałem to do
Global.asax
środkaApplication_Start()
.źródło
Philip W miał właściwą odpowiedź, ale dla jasności i kompletnego działającego rozwiązania, edytuj plik Global.asax.cs tak, aby wyglądał następująco: (Zauważ, że musiałem dodać referencję System.Net.Http.Formatting do pliku wygenerowanego w magazynie)
źródło
Spowoduje to wyczyszczenie programu formatującego XML, a tym samym ustawienie domyślnego formatu JSON.
źródło
Zainspirowany doskonałą odpowiedzią Dmitrija Pawłowa, nieznacznie ją zmieniłem, aby móc podłączyć dowolny formatyzator, którego chciałem wymusić.
Kredyt dla Dmitrija.
źródło
Jeśli chcesz to zrobić tylko dla jednej metody, zadeklaruj swoją metodę jako zwracającą
HttpResponseMessage
zamiastIEnumerable<Whatever>
i wykonaj:ten kod jest trudny do testowania jednostkowego, ale jest to również możliwe w następujący sposób:
źródło
To ma ustawione poprawne nagłówki. Wydaje się nieco bardziej elegancki.
źródło
Możesz użyć w WebApiConfig.cs:
źródło
dla osób używających OWIN
staje się (w Startup.cs):
źródło