Wie bekomme ich eine json-Antwort mit system.net.webrequest in c #?

80

Ich muss JSON-Daten von einer externen Domain erhalten. Ich habe Webrequest verwendet, um die Antwort von einer Website zu erhalten. Hier ist der Code:

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

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

Weiß jemand, warum ich die JSON-Daten nicht bekommen kann?

h3n
quelle
Weiß jemand, warum ich die JSON-Daten nicht bekommen kann?
h3n
6
Du brauchst using (var response = request.GetResponse()){ ... }. Löst das Problem möglicherweise nicht, spart jedoch das Ressourcenleck.
John Saunders

Antworten:

67

Sie müssen explizit nach dem Inhaltstyp fragen.

Fügen Sie diese Zeile hinzu:

 request.ContentType = "application/json; charset=utf-8";
Am richtigen Ort

Oren A.
quelle
Ist es möglich, den Parameter mit dieser Anfrage zu übergeben?
Jidheesh Rajan
7
Anforderungsinhaltstyp beschreibt den Typ des Anforderungshauptteils. Es wird verwendet, um dem Server mitzuteilen, in welchem ​​Format die Daten an den Server gesendet werden. Es hat nichts mit der Art der Antwort zu tun. Der Client fordert Sie möglicherweise auf, mithilfe des AcceptHeaders mit bestimmten Typen zu antworten , der Server ignoriert dies jedoch möglicherweise aus anderen Gründen.
Temoto
Ja Jidheesh, siehe diese stackoverflow.com/questions/10263082/…
Zameer Ansari
Ich weiß, dass dies eine alte Antwort ist, wollte der Vollständigkeit halber jedoch auf @SHEKHARSHETE antworten: Sie können so etwas wie das ausgezeichnete NewtonSoft JSON.Net verwenden, das die Arbeit für Sie erledigt, und ich empfehle, die nützlichen Anleitungen zu lesen, um zu erfahren, wie dies hier zu tun ist: newtonsoft.com/json
Tahir Khalid
73

Einige APIs möchten, dass Sie den entsprechenden "Accept" -Header in der Anforderung angeben, um den gewünschten Antworttyp zu erhalten.

Wenn eine API beispielsweise Daten in XML und JSON zurückgeben kann und Sie das JSON-Ergebnis wünschen, müssen Sie die HttpWebRequest.AcceptEigenschaft auf "application / json" setzen .

HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(requestUri);
httpWebRequest.Method = WebRequestMethods.Http.Get;
httpWebRequest.Accept = "application/json";
Martin Buberl
quelle
1
Ist es möglich, den Parameter damit zu übergeben?
Jidheesh Rajan
Vielleicht können Sie versuchen, Ihre Parameter zu requestUriIe localhost / api / product / 123
DmitryBoyko
@JidheeshRajan In dieser Frage / Antwort finden Sie Informationen zum Hinzufügen von Parametern zu einem WebRequest stackoverflow.com/questions/3279888/…
Martin Buberl
1
Nur request.ContentType = "application / json; hinzuzufügen war nicht genug für mich, daher denke ich, dass Ihre Lösung die richtige ist.
Campinho
Diese Antwort sollte akzeptiert werden, da die aktuell akzeptierte Antwort nicht korrekt ist. Ein weiteres Beispiel für die
Nichtverwendung