web-dev-qa-db-fra.com

Comment envoyer des données json dans une demande POST à l'aide de C #

Je souhaite envoyer des données JSON dans la demande POST à l'aide de C #.

J'ai essayé peu de moyens mais j'ai fait face à beaucoup de problèmes. J'ai besoin de demander en utilisant le corps de la demande comme json brut à partir de chaîne et les données json à partir du fichier json.

Comment puis-je envoyer une demande en utilisant ces deux formulaires de données.

Ex: pour le corps de la demande d'authentification dans json -> {"Username":"myusername","Password":"pass"}

Pour les autres API, le corps de la demande doit être extrait du fichier JSON externe.

17
Rocky

Vous pouvez utiliser le HttpClient au lieu de WebClient et HttpWebRequest. C'est une nouvelle implémentation.

string myJson = "{'Username': 'myusername','Password':'pass'}";
using (var client = new HttpClient())
{
    var response = await client.PostAsync(
        "http://yourUrl", 
         new StringContent(myJson, Encoding.UTF8, "application/json"));
}

enter image description here

Lorsque vous avez besoin de votre HttpClient plus d'une fois, il est recommandé de ne créer qu'une instance et de la réutiliser ou d'utiliser le nouveau HttpClientFactory.

38
NtFreX

Vous pouvez le faire avec HttpWebRequest:

var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://yourUrl");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
    string json = new JavaScriptSerializer().Serialize(new
            {
                Username = "myusername",
                Password = "pass"
            });
    streamWriter.Write(json);
    streamWriter.Flush();
    streamWriter.Close();
}

var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
    var result = streamReader.ReadToEnd();
}
15
kkakkurt

Vous pouvez utiliser soit HttpClient ou RestSharp, puisque je ne connais pas le code ur, voici un exemple utilisant httpclient:

using (var client = new HttpClient())
        {
            //This would be the like http://www.uber.com
            client.BaseAddress = new Uri("Base Address/URL Address");
            //serialize your json using newtonsoft json serializer then add it to the StringContent
            var content = new StringContent(YourJson, Encoding.UTF8, "application/json") 
            //method address would be like api/callUber:SomePort for example
            var result = await client.PostAsync("Method Address", content);
            string resultContent = await result.Content.ReadAsStringAsync();

        }
4
Valkyrie

Cela fonctionne pour moi.

var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://url");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
using (var streamWriter = new 

StreamWriter(httpWebRequest.GetRequestStream()))
{
    string json = new JavaScriptSerializer().Serialize(new
                {
                    Username = "myusername",
                    Password = "password"
                });

    streamWriter.Write(json);
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
    var result = streamReader.ReadToEnd();
}
2
Rohan Das