Korzystając z nowszego interfejsu API sieci Web ASP.NET , w przeglądarce Chrome widzę XML - jak mogę go zmienić, aby żądał JSON, aby wyświetlać go w przeglądarce? Wierzę, że to tylko część nagłówków żądania, czy mam rację?
json
google-chrome
asp.net-web-api
naspinski
źródło
źródło
Odpowiedzi:
Właśnie dodałem następujące elementy w
App_Start / WebApiConfig.cs
klasie w moim projekcie MVC Web API .Dzięki temu otrzymujesz JSON na większość zapytań, ale możesz je otrzymać
XML
po wysłaniutext/xml
.Jeśli musisz mieć odpowiedź
Content-Type
jakapplication/json
należy sprawdzić odpowiedź Todda poniżej .NameSpace
używaSystem.Net.Http.Headers
.źródło
Content-Type
nagłówek odpowiedzi nadal będzietext/html
.Jeśli zrobisz to w
WebApiConfig
, domyślnie otrzymasz JSON, ale nadal pozwoli ci zwrócić XML, jeśli podasztext/xml
jakoAccept
nagłówek żądaniaJeśli nie używasz typu projektu MVC i dlatego nie miałeś tej klasy na początek, zapoznaj się z tą odpowiedzią, aby uzyskać szczegółowe informacje na temat jego włączenia.
źródło
application/xml
z priorytetem 0,9 i*/*
priorytetem 0,8. Usuwającapplication/xml
usuwasz możliwość zwracania XML przez interfejs API sieci Web, jeśli klient tego zażąda. np. jeśli wyślesz „Akceptuj: aplikacja / xml”, nadal otrzymasz JSON.Korzystanie z RequestHeaderMapping działa jeszcze lepiej, ponieważ ustawia również
Content-Type = application/json
w nagłówku odpowiedzi, co pozwala Firefoksowi (z dodatkiem JSONView) sformatować odpowiedź jako JSON.źródło
Najbardziej podoba mi się podejście Felipe Leusin - upewnij się, że przeglądarki otrzymują JSON bez narażania negocjacji treści od klientów, którzy faktycznie chcą XML. Jedynym brakującym elementem było dla mnie to, że nagłówki odpowiedzi nadal zawierały content-type: text / html. Dlaczego to był problem? Ponieważ używam rozszerzenia JSON Formatter Chrome , które sprawdza typ zawartości i nie otrzymuję ładnego formatowania, do którego jestem przyzwyczajony. Naprawiłem to za pomocą prostego niestandardowego formatera, który przyjmuje żądania tekstowe / HTML i zwraca odpowiedzi aplikacji / JSON:
Zarejestruj się tak:
źródło
this.SerializerSettings.Formatting = Formatting.Indented;
jeśli chcesz, aby był ładnie wydrukowany bez rozszerzenia przeglądarki.using System.Net.Http.Formatting
iusing Newtonsoft.Json
Szybka porada MVC4 # 3 - Usuwanie formatera XML z ASP.Net Web API
W
Global.asax
dodać linię:tak:
źródło
W pliku WebApiConfig.cs dodaj na końcu funkcji rejestru :
Źródło .
źródło
W Global.asax używam poniższego kodu. Mój identyfikator URI, aby uzyskać JSON, to
http://www.digantakumar.com/api/values?json=true
źródło
Zobacz negocjacje zawartości w interfejsie WebAPI. Te ( część 1 i część 2 ) niezwykle szczegółowe i dokładne posty na blogu wyjaśniają, jak to działa.
Krótko mówiąc, masz rację i wystarczy ustawić nagłówki
Accept
lubContent-Type
żądanie. Ponieważ akcja nie jest zakodowana w celu zwrócenia określonego formatu, możesz ustawićAccept: application/json
.źródło
Ponieważ pytanie dotyczy Chrome, możesz uzyskać rozszerzenie Postman, które pozwala ustawić typ zawartości żądania.
źródło
network.http.accept.default
konfiguracji natext/html,application/xhtml+xml,application/json;q=0.9,application/xml;q=0.8,*/*;q=0.7
.text/html,application/xhtml+xml;q=1.0,*/*;q=0.7
aby uniknąć błędnych hostów, takich jak Bitbucket, przed przypadkowym udostępnieniem przeglądarki JSON zamiast HTML.Jedną szybką opcją jest skorzystanie ze specjalizacji MediaTypeMapping. Oto przykład użycia QueryStringMapping w zdarzeniu Application_Start:
Teraz, gdy adres URL zawiera w tym przypadku kwerendę? A = b, odpowiedź Jsona będzie wyświetlana w przeglądarce.
źródło
Ten kod sprawia, że Json jest moim domyślnym i pozwala mi również używać formatu XML. Po prostu dołączę
xml=true
.Dziękuję wszystkim!
źródło
Nie używaj przeglądarki do testowania interfejsu API.
Zamiast tego spróbuj użyć klienta HTTP, który pozwala określić żądanie, takie jak CURL, a nawet Fiddler.
Problem z tym problemem leży w kliencie, a nie w interfejsie API. Internetowy interfejs API działa poprawnie, zgodnie z żądaniem przeglądarki.
źródło
Większość powyższych odpowiedzi ma sens. Ponieważ widzisz dane formatowane w formacie XML, oznacza to, że zastosowano formatator XML, więc możesz zobaczyć format JSON po prostu usuwając XMLFormatter z parametru HttpConfiguration, takiego jak
ponieważ JSON jest formatem domyślnym
źródło
Użyłem globalnego filtra akcji, aby usunąć,
Accept: application/xml
gdyUser-Agent
nagłówek zawiera „Chrome”:Wydaje się, że działa.
źródło
Uważam, że aplikacja Chrome „Advanced REST Client” doskonale nadaje się do współpracy z usługami REST. Możesz ustawić Content-Type na
application/json
między innymi: Zaawansowany klient RESTźródło
Prawidłowy format jest zwracany przez formatyzator typu media. Jak wspomnieli inni, możesz to zrobić w
WebApiConfig
klasie:Aby uzyskać więcej, sprawdź:
W przypadku, gdy twoje działania zwracają XML (co jest domyślnym przypadkiem) i potrzebujesz tylko określonej metody, aby zwrócić JSON, możesz następnie użyć
ActionFilterAttribute
i zastosować ją do tej konkretnej akcji.Filtruj atrybut:
Zastosowanie do działania:
Pamiętaj, że możesz pominąć słowo
Attribute
na dekoracji akcji i użyć go[JsonOutput]
zamiast[JsonOutputAttribute]
.źródło
źródło
zgodnie z najnowszą wersją ASP.net WebApi 2,
poniżej
WebApiConfig.cs
, to zadziałaźródło
Nie jest dla mnie jasne, dlaczego w odpowiedzi jest cała ta złożoność. Oczywiście istnieje wiele sposobów, aby to zrobić, dzięki QueryStrings, nagłówkom i opcjom ... ale to, co uważam za najlepszą praktykę, jest proste. Żądasz prostego adresu URL (np
http://yourstartup.com/api/cars
.:), aw zamian dostajesz JSON. Otrzymasz JSON z odpowiednim nagłówkiem odpowiedzi:Szukając odpowiedzi na to samo pytanie, znalazłem ten wątek i musiałem kontynuować, ponieważ ta zaakceptowana odpowiedź nie działa dokładnie. Znalazłem odpowiedź, która moim zdaniem jest zbyt prosta, aby nie być najlepszą:
Ustaw domyślny formatyzator WebAPI
Dodam tutaj również moją wskazówkę.
Mam pytanie, skąd biorą się wartości domyślne (przynajmniej te, które widzę). Czy są to ustawienia domyślne .NET, czy może zostały utworzone gdzieś indziej (przez kogoś innego z mojego projektu). Zawsze mam nadzieję, że to pomoże.
źródło
Oto rozwiązanie podobne do odpowiedzi jayson.centeno i innych, ale przy użyciu wbudowanego rozszerzenia z
System.Net.Http.Formatting
.Rozwiązanie było ukierunkowane przede wszystkim na obsługę formatu $ dla OData we wczesnych wersjach WebApi, ale dotyczy również implementacji innej niż OData i zwraca
Content-Type: application/json; charset=utf-8
nagłówek w odpowiedzi.To pozwala na sczepienie
&$format=json
lub&$format=xml
do końca swojego identyfikatora użytkownika podczas testowania za pomocą przeglądarki. Nie koliduje z innymi oczekiwanymi zachowaniami podczas korzystania z klienta innego niż przeglądarka, w którym można ustawić własne nagłówki.źródło
Możesz użyć jak poniżej:
źródło
Wystarczy dodać te dwa wiersze kodu do klasy WebApiConfig
źródło
Po prostu zmienisz
App_Start/WebApiConfig.cs
tak:źródło
Z MSDN Budowanie aplikacji jednostronicowej za pomocą ASP.NET i AngularJS (około 41 minut).
Powinien być aktualny, próbowałem i działało.
źródło
Minęło trochę czasu, odkąd pytanie zostało zadane (i udzielono odpowiedzi), ale inną opcją jest zastąpienie nagłówka Accept na serwerze podczas przetwarzania żądania za pomocą programu MessageHandler, jak poniżej:
Gdzie
someOtherCondition
może być cokolwiek, w tym typ przeglądarki itp. Dotyczy to przypadków warunkowych, w których tylko czasami chcemy zastąpić domyślną negocjację treści. W przeciwnym razie, podobnie jak w przypadku innych odpowiedzi, wystarczy po prostu usunąć niepotrzebne formatyzatory z konfiguracji.Oczywiście musisz go zarejestrować. Możesz to zrobić globalnie:
lub na podstawie trasy po trasie:
A ponieważ jest to moduł obsługi komunikatów, będzie działał zarówno na końcach potoku, jak i na żądanie, podobnie jak
HttpModule
. Możesz więc łatwo potwierdzić zastąpienie niestandardowym nagłówkiem:źródło
Oto najprostszy sposób, którego użyłem w swoich aplikacjach. Dodaj podane poniżej 3 wiersze kodu
App_Start\\WebApiConfig.cs
wRegister
funkcjiInternetowy interfejs API Asp.net automatycznie serializuje Twój zwracany obiekt do JSON, a gdy
application/json
jest dodawany w nagłówku, aby przeglądarka lub odbiornik zrozumieli, że zwracasz wynik JSON.źródło
WebApiConfig to miejsce, w którym możesz skonfigurować, czy chcesz wyświetlać dane w formacie json czy xml. domyślnie jest to xml. w funkcji rejestru możemy użyć HttpConfiguration Formatters do sformatowania wyjścia. System.Net.Http.Headers => MediaTypeHeaderValue („text / html”) jest wymagany, aby uzyskać wynik w formacie json.
źródło
Korzystając z odpowiedzi Felipe Leusina od lat, po ostatniej aktualizacji bibliotek podstawowych i Json.Net, natrafiłem na
System.MissingMethodException
: SupportedMediaTypes. Rozwiązaniem w moim przypadku, miejmy nadzieję, pomocnym dla innych osób, które doświadczają tego samego nieoczekiwanego wyjątku, jest instalacjaSystem.Net.Http
. NuGet najwyraźniej usuwa go w niektórych okolicznościach. Po ręcznej instalacji problem został rozwiązany.źródło
Jestem zdziwiony, widząc tak wiele odpowiedzi wymagających kodowania, aby zmienić pojedynczy przypadek użycia (GET) w jednym interfejsie API zamiast używania odpowiedniego narzędzia, które musi być zainstalowane raz i może być użyte dla dowolnego interfejsu API (własnego lub zewnętrznego) i wszystkich przypadków użycia.
Dobra odpowiedź brzmi:
źródło