Question

J'écris un petit outil en C # qui doit envoyer et recevoir des données vers / depuis un site Web à l'aide du formatage POST et json. Je n'ai jamais rien fait de pareil en C # (ni dans aucune autre langue), alors je me bats pour trouver des informations utiles qui me permettront de démarrer.

J'ai trouvé des informations sur la classe WebRequest en C # (plus précisément de ici. ) mais avant de me plonger dedans, je me suis demandé si c'était le bon outil pour le poste.

J'ai trouvé de nombreux outils pour convertir les données au format JSON, mais pas grand-chose d'autre, donc toute information serait vraiment utile ici au cas où je me retrouverais dans une impasse.

Était-ce utile?

La solution

WebRequest et plus particulièrement la classe HttpWebRequest est un bon point de départ pour ce que vous souhaitez réaliser. Pour créer la demande, utilisez WebRequest.Create et convertissez la demande créée en une requête HttpWebRequest afin de l'utiliser. Vous créerez ensuite vos données de publication et les enverrez au flux de la manière suivante:

HttpWebRequest req = (HttpWebRequest)
WebRequest.Create("http://mysite.com/index.php");
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
string postData = "var=value1&var2=value2";
req.ContentLength = postData.Length;

StreamWriter stOut = new
StreamWriter(req.GetRequestStream(),
System.Text.Encoding.ASCII);
stOut.Write(postData);
stOut.Close();

De même, vous pouvez relire la réponse en utilisant la méthode GetResponse, qui vous permettra de lire le flux de réponses obtenu et de faire tout ce que vous aurez à faire. Vous trouverez plus d’informations sur la classe à l’adresse suivante:

http://msdn.microsoft.com/en- us / library / system.net.httpwebrequest.aspx

Autres conseils

WebClient est parfois plus facile à utiliser que WebRequest . Vous voudrez peut-être y jeter un coup d'œil.

Pour la désérialisation JSON, vous souhaiterez consulter JavaScriptSerializer .

Exemple WebClient:

using (WebClient client = new WebClient ())
{
    //manipulate request headers (optional)
    client.Headers.Add (HttpRequestHeader.UserAgent, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");

    //execute request and read response as string to console
    using (StreamReader reader = new StreamReader(client.OpenRead(targetUri)))
    {
        string s = reader.ReadToEnd ();
        Console.WriteLine (s);
    }
}

Marqué comme wiki au cas où quelqu'un voudrait mettre à jour le code

Lorsqu'il s'agit de publier des données sur un site Web, System.Net.HttpWebRequest (l'implémentation de WebRequest spécifique à HTTP) est une solution parfaitement décente. Il prend en charge SSL, les requêtes asynchrones et de nombreux autres avantages. Il est bien documenté sur MSDN.

La charge utile peut être n'importe quoi: des données au format JSON ou autre - tant que vous définissez la propriété ContentType sur quelque chose que le serveur attend et comprend (très probablement application / json, text / json ou text / x-json), tout ira bien.

Un problème potentiel lors de l’utilisation de HttpWebRequest à partir d’un service système: étant donné qu’il utilise le proxy IE et les informations d’identité, le comportement par défaut peut être un peu étrange lorsqu’il est exécuté en tant qu’utilisateur LOCALSYSTEM (ou tout compte qui ne se connecte pas de manière interactive) une base régulière). Définir les propriétés Proxy et Authentification sur Nothing (ou, comme vous préférez l'appeler, null , je suppose) devrait éviter cela.

J'ai utilisé WebRequest pour interagir avec des sites Web. C'est le bon 'outil'

Je ne peux pas commenter l'aspect JSON de votre question.

La réponse la mieux notée actuellement est utile, mais elle n'envoie ni ne reçoit de JSON.

Voici un exemple utilisant JSON pour l'envoi et la réception:

comment publier un objet json dans le service Web

Et voici la question de StackOverflow qui m'a le plus aidé à résoudre ce problème:

problèmes envoi et réception de JSON entre le service Web ASP.net et le client Web ASP.Net

Et voici une autre question connexe:

appel json avec C #

Pour convertir un objet d'instance en chaîne au format json et inversement, essayez Json.NET: http://json.codeplex.com/

Je l'utilise actuellement pour un projet. Il est facile à apprendre et à utiliser. Il offre une certaine flexibilité en termes de sérialisation et de conversion de types personnalisés. Il prend également en charge la syntaxe LINQ pour interroger l’entrée json.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top