88 votes

Comment obtenir une réponse JSON en utilisant System.Net.WebRequest en C#?

J'ai besoin d'obtenir des données json à partir d'un domaine externe.
J'ai utilisé WebRequest pour obtenir la réponse d'un site web.
Voici le code:

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

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

Est-ce que quelqu'un sait pourquoi je n'arrive pas à obtenir les données json ?

0 votes

Quelqu'un sait pourquoi je ne peux pas obtenir les données JSON ?

7 votes

Tu as besoin de using (var response = request.GetResponse()){ ... }. Cela peut ne pas résoudre le problème mais cela évite les fuites de ressources.

75voto

Martin Buberl Points 14573

Certaines API demandent que vous fournissiez l'en-tête "Accept" approprié dans la requête pour obtenir le type de réponse souhaité.

Par exemple, si une API peut renvoyer des données au format XML et JSON et que vous souhaitez obtenir le résultat en JSON, vous devriez régler la propriété HttpWebRequest.Accept sur "application/json".

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

1 votes

Est-il possible de passer le paramètre avec ceci ??

0 votes

Peut-être que vous pouvez essayer d'ajouter vos paramètres à requestUri c'est-à-dire localhost/api/product/123

0 votes

@JidheeshRajan Consultez cette question/réponses pour savoir comment ajouter des paramètres à une WebRequest stackoverflow.com/questions/3279888/...

70voto

Oren A Points 3417

Vous devez demander explicitement le type de contenu.

Ajoutez cette ligne:

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

A l'endroit approprié

0 votes

Est-il possible de transmettre le paramètre avec cette requête??

7 votes

Le type de contenu de la requête décrit le type de corps de la requête. Il est utilisé pour indiquer au serveur dans quel format les données sont envoyées au serveur. Cela n'a rien à voir avec le type de contenu de la réponse. Le client peut demander une réponse avec des types spécifiques en utilisant l'en-tête Accept, mais le serveur peut l'ignorer pour d'autres raisons.

0 votes

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X