HttpRequestMessage POST - PullRequest
       11

HttpRequestMessage POST

0 голосов
/ 12 октября 2018

Я пытаюсь отправить json «стилизованную» строку через HttpResponseMessage .

Я создал следующий метод ниже в надежде отправить ответное сообщениеуспешно.

class Foo
{
    /// <summary>
    /// Vendors
    /// </summary>
    public enum Vendor
    {
        [Description("https://someSite.com")]
        FOO = 0x001
    }

    /// <summary>
    /// Send a POST response
    /// </summary>
    /// <param name="vendor"></param>
    /// <param name="data"></param>
    public static async void SendResponseAsync(Vendor vendor, string data)
    {
        Task task = Task.Run(async () =>
        {
            using (var httpClient = new HttpClient())
            using (var httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, vendor.EnumDescriptionToString()))
            {
                var json = Newtonsoft.Json.JsonConvert.DeserializeObject(data);
                httpRequestMessage.Content = new StringContent(json.ToString(), Encoding.UTF8, "application/json");
                var result = await httpClient.SendAsync(httpRequestMessage);
                Console.WriteLine(result.ReasonPhrase);
            }
        });
        await task;
    }
}

И я звоню со следующим:

static void Main()
{
    string jsonText = "{\"apikey\": \"someAPIkey\",\"type\": \"ItemRegistered\",   \"order\": \"999999\",   \"item\": \"99999\",    \"datetime\": \"2018-10-12 01:27:11 GMT\"}";
    Foo.SendResponseAsync(Foo.Vendor.FOO, jsonText);
    Console.ReadKey();
}

Я получаю ошибку: 400 Теперь вы можете сказать, что этомоя проблема здесь, и вы действительно правы, однако,

Мне интересно, почему, когда я использую PostMan , я получаю сообщение об ошибке, которое говорит, что номер заказа непризнал?в формате json,

Итак, я понимаю, что номер заказа неверен, однако, почему он не отображается в моем консольном приложении?Является ли мой метод POSTING правильным?

1 Ответ

0 голосов
/ 12 октября 2018

Вы должны передать сериализованное представление json в StringContent.Ваша json переменная имеет тип object вместо этого, и когда вы вызываете ToString(), она дает вам что-то вроде класса.Если ваш data уже сериализован в json, просто передайте его.

Или, если у вас есть объект, передайте его так:

var content = new StringContent(JsonConvert.SerializeObject(obj), Encoding.UTF8, "application/json");
...