web-dev-qa-db-de.com

C # Web API Senden von Körperdaten in HTTP Post REST Klient

Ich muss diesen HTTP-Post-Request senden:

 POST https://webapi.com/baseurl/login
 Content-Type: application/json

 {"Password":"password",
 "AppVersion":"1",
 "AppComments":"",
 "UserName":"username",
 "AppKey":"dakey" 
  }

Es funktioniert in RestClient und PostMan genauso wie oben.

Ich muss das programmatisch haben und bin nicht sicher, ob ich es verwenden soll 

WebClient, HTTPRequest oder WebRequest, um dies zu erreichen.

Das Problem ist, wie Sie den Hauptinhalt formatieren und ihn oben mit der Anfrage senden.

Hier bin ich mit Beispielcode für 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;
    }

Das funktioniert jetzt und antwortet mit einem (200) OK-Server und einer Antwort

4
CraigJSte

Warum generierst du deinen eigenen Json? 

Verwenden Sie JSONConvert von JsonNewtonsoft. 

Ihre json-Objektzeichenfolgenwerte benötigen " " Anführungszeichen und ,

Ich würde den http-Client für das Posting verwenden, nicht den Webclient. 

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());
   }
}   
2
Ya Wang

Sie serialisieren Ihre Werte vor dem Senden nicht ordnungsgemäß in JSON. Anstatt den String selbst zu erstellen, sollten Sie eine Bibliothek wie JSON.Net verwenden.

Sie könnten die richtige Zeichenfolge so erhalten:

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"}
0
Jonathon Chase