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.
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"));
}
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
.
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();
}
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();
}
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();
}