J'ai besoin d'envoyer cette demande de publication HTTP:
POST https://webapi.com/baseurl/login
Content-Type: application/json
{"Password":"password",
"AppVersion":"1",
"AppComments":"",
"UserName":"username",
"AppKey":"dakey"
}
Cela fonctionne très bien dans RestClient et PostMan, comme ci-dessus.
J'ai besoin de cela de manière pro-grammaticale et je ne suis pas sûr d'utiliser
WebClient, HTTPRequest ou WebRequest pour accomplir cela.
Le problème est de savoir comment formater le contenu du corps et l’envoyer ci-dessus avec la demande.
Voici où je suis avec exemple de code pour WebClient ...
private static void Main(string[] args)
{
RunPostAsync();
}
static HttpClient client = new HttpClient();
private static void RunPostAsync(){
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
Inputs inputs = new Inputs();
inputs.Password = "pw";
inputs.AppVersion = "apv";
inputs.AppComments = "apc";
inputs.UserName = "user";
inputs.AppKey = "apk";
var res = client.PostAsync("https://baseuriplus", new StringContent(JsonConvert.SerializeObject(inputs)));
try
{
res.Result.EnsureSuccessStatusCode();
Console.WriteLine("Response " + res.Result.Content.ReadAsStringAsync().Result + Environment.NewLine);
}
catch (Exception ex)
{
Console.WriteLine("Error " + res + " Error " +
ex.ToString());
}
Console.WriteLine("Response: {0}", result);
}
public class Inputs
{
public string Password;
public string AppVersion;
public string AppComments;
public string UserName;
public string AppKey;
}
Cela fonctionne maintenant et les réponses avec un (200) serveur et réponse OK
Pourquoi générez-vous votre propre JSON?
Utilisez JSONConvert
de JsonNewtonsoft.
Les valeurs de votre chaîne d’objet json nécessitent " "
quotes and ,
J'utiliserais le client HTTP pour la publication, pas le client Web.
using (var client = new HttpClient())
{
var res = client.PostAsync("YOUR URL",
new StringContent(JSONConvert.serializeObject(
new { OBJECT DEF HERE },
Encoding.UTF8, "application/json")
);
try
{
res.Result.EnsureSuccessStatusCode();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
Vous ne sérialisez pas correctement vos valeurs en JSON avant l'envoi. Au lieu d'essayer de construire la chaîne vous-même, vous devez utiliser une bibliothèque telle que JSON.Net.
Vous pourriez obtenir la bonne chaîne en faisant quelque chose comme ceci:
var message = JsonConvert.SerializeObject(new {Password = pw, AppVersion = apv, AppComments = acm, UserName = user, AppKey = apk});
Console.WriteLine(message); //Output: {"Password":"password","AppVersion":"10","AppComments":"","UserName":"username","AppKey":"dakey"}