web-dev-qa-db-fra.com

Comment créer une publication JSON sur une API à l'aide de C #

Je suis en train de créer une application console C # qui lit le texte d'un fichier texte, le transforme en une chaîne au format JSON (contenue dans une variable de chaîne) et doit POST le JSON demande à une API Web. J'utilise .NET Framework 4.

Ma difficulté est de créer la demande et d'obtenir la réponse, en utilisant C #. Quel est le code de base nécessaire? Les commentaires dans le code seraient utiles. Ce que j'ai jusqu'à présent est le suivant, mais je ne sais pas si je suis sur la bonne voie.

//POST JSON REQUEST TO API
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("POST URL GOES HERE?");

request.Method = "POST";
request.ContentType = "application/json";

System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
byte[] bytes = encoding.GetBytes(jsonPOSTString);

request.ContentLength = bytes.Length;

using (Stream requestStream = request.GetRequestStream())
{
    // Send the data.
    requestStream.Write(bytes, 0, bytes.Length);
}

//RESPONSE HERE
15
kyle_13

Avez-vous essayé d'utiliser la classe WebClient?

vous devriez pouvoir utiliser

string result = "";
using (var client = new WebClient())
{
    client.Headers[HttpRequestHeader.ContentType] = "application/json"; 
    result = client.UploadString(url, "POST", json);
}
Console.WriteLine(result);

Documentation à

http://msdn.Microsoft.com/en-us/library/system.net.webclient%28v=vs.110%29.aspx

http://msdn.Microsoft.com/en-us/library/d0d3595k%28v=vs.110%29.aspx

49
wegrata

Essayez d'utiliser l'API Web HttpClient

    static async Task RunAsync()
    {
        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri("http://domain.com/");
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));


            // HTTP POST
            var obj = new MyObject() { Str = "MyString"};
            response = await client.PostAsJsonAsync("POST URL GOES HERE?", obj );
            if (response.IsSuccessStatusCode)
            {
                response.//.. Contains the returned content.
            }
        }
    }

Vous pouvez trouver plus de détails ici Clients API Web

3
Amir Katz

De MSDN pour vous;

        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        Console.WriteLine ("Content length is {0}", response.ContentLength);
        Console.WriteLine ("Content type is {0}", response.ContentType);

        // Get the stream associated with the response.
        Stream receiveStream = response.GetResponseStream ();

        // Pipes the stream to a higher level stream reader with the required encoding format. 
        StreamReader readStream = new StreamReader (receiveStream, Encoding.UTF8);

        Console.WriteLine ("Response stream received.");
        Console.WriteLine (readStream.ReadToEnd ());
        response.Close ();
        readStream.Close ();

Source: http://msdn.Microsoft.com/en-us/library/system.net.httpwebrequest.getresponse (v = vs.110) .aspx

0
Coops