web-dev-qa-db-ja.com

HTTP Postでボディデータを送信するC#Web API REST Client

このHTTP Postリクエストを送信する必要があります。

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

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

上記のようにRestClientとPostManでうまく機能します。

私はこれをプログラム的に持っている必要があり、使用するかどうかわからない

これを実現するWebClient、HTTPRequestまたはWebRequest。

問題は、Body Contentをフォーマットし、リクエストとともに上記に送信する方法です。

ここに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;
    }

これはすぐに動作し、(200)OKサーバーと応答で応答します

7
CraigJSte

なぜあなたは自分のJSONを生成するのですか?

JsonNewtonsoftのJSONConvertを使用します。

JSONオブジェクトの文字列値には、" "引用符と,が必要です

Webクライアントではなく、httpクライアントを投稿に使用します。

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

送信する前に値をJSONに適切にシリアル化していない。自分で文字列を作成しようとする代わりに、JSON.Netのようなライブラリを使用する必要があります。

次のようなことを行う正しい文字列を取得できます。

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