Jak uzyskać odpowiedź json za pomocą system.net.webrequest w C #?


80

Potrzebuję danych JSON z domeny zewnętrznej. Użyłem zapytania internetowego, aby uzyskać odpowiedź ze strony internetowej. Oto kod:

var request = WebRequest.Create(url);
string text;
var response = (HttpWebResponse) request.GetResponse();

using (var sr = new StreamReader(response.GetResponseStream()))
{
    text = sr.ReadToEnd();
}

Czy ktoś wie, dlaczego nie mogę uzyskać danych JSON?


ktoś wie, dlaczego nie mogę uzyskać danych JSON?
h3n

6
Potrzebujesz using (var response = request.GetResponse()){ ... }. Może nie rozwiązać problemu, ale oszczędza wyciek zasobów.
John Saunders,

Odpowiedzi:


67

Musisz wyraźnie zapytać o typ zawartości.

Dodaj tę linię:

 request.ContentType = "application/json; charset=utf-8";
W odpowiednim miejscu


Czy można przekazać parametr z tym żądaniem?
Jidheesh Rajan

7
Request Content-Type opisuje typ treści żądania. Służy do informowania serwera, w jakim formacie dane są wysyłane na serwer. Nie ma to nic wspólnego z typem treści odpowiedzi. Klient może poprosić o odpowiedź określonym typem za pomocą Acceptnagłówka, ale serwer może to zignorować z innych powodów.
temoto


Wiem, że to stara odpowiedź, ale dla kompletności chciałem odpowiedzieć na @SHEKHARSHETE: możesz użyć czegoś takiego jak doskonały NewtonSoft JSON.Net, który wykona pracę za Ciebie i polecam przeczytanie przydatnych poradników, jak to zrobić tutaj: newtonsoft.com/json
Tahir Khalid

73

Niektóre interfejsy API wymagają podania odpowiedniego nagłówka „Accept” w żądaniu, aby uzyskać żądany typ odpowiedzi.

Na przykład, jeśli interfejs API może zwracać dane w formacie XML i JSON, a chcesz otrzymać wynik w formacie JSON, musisz ustawić HttpWebRequest.Acceptwłaściwość na „application / json” .

HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(requestUri);
httpWebRequest.Method = WebRequestMethods.Http.Get;
httpWebRequest.Accept = "application/json";

1
Czy jest możliwe przekazanie tego parametru?
Jidheesh Rajan

Być może możesz spróbować dodać swoje parametry do, requestUritj. Localhost / api / product / 123
DmitryBoyko

@JidheeshRajan Zobacz to pytanie / odpowiedzi, jak dodać parametry do WebRequest stackoverflow.com/questions/3279888/ ...
Martin Buberl

1
Dodanie tylko request.ContentType = "application / json; nie było dla mnie wystarczające, więc myślę, że twoje rozwiązanie jest właściwe.
Campinho

Tę odpowiedź należy zaakceptować, ponieważ obecnie zaakceptowana odpowiedź jest nieprawidłowa. Inny przykład niestosowania „Akceptuj” w odpowiednich przypadkach ...
Arkaine55,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.