C # Web API, отправляющий данные тела в HTTP Post REST Client - PullRequest
0 голосов
/ 22 мая 2018

Мне нужно отправить этот HTTP-запрос:

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

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

Он отлично работает в RestClient и PostMan, как и выше.

Мне нужно это запрограммировать, и я не уверенесли использовать для этого

WebClient, HTTPRequest или WebRequest.

Проблема заключается в том, как отформатировать основной текст и отправить его выше с запросом.

Вот гдеЯ с примером кода для 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 Сервер и Ответ

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Вы неправильно сериализуете свои значения в 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 голосов
/ 22 мая 2018

Почему вы создаете свой собственный JSON?

Используйте JSONConvert от JsonNewtonsoft.

Ваши строковые значения объекта json требуют " " кавычек и ,

Я бы использовал 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());
   }
}   
...