Внутренняя ошибка сервера при вызове метода POST - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь создать консольное приложение, которое может помещать данные в базу данных, вызывая определенный API.Я не контролирую ни базу данных, ни API.API работает нормально, так как я уже создал протестировал метод GET, но я думаю, что-то не так с моим POST.

Итак, сначала я создаю объект Product , содержащий значения, которые яхотите отправить в API.

Product product = new Product
{
     productId = "27795",
     amount = 1,
     customerid = 0,
     returnbasketid = true
};

И это метод, который должен вызывать метод API POST.

static async Task CreateProductAsync(HttpClient cons, Product product)
    {
        using (cons)
        {
            HttpResponseMessage res = cons.PostAsJsonAsync("", product).Result;
            res.EnsureSuccessStatusCode();
            Console.WriteLine(res.Content.ReadAsStringAsync().Result);
        }
    }

После запуска кода строка HttpResponseMessage res = cons.PostAsJsonAsync("", product).Result; имеетследующая ошибка:

System.AggregateException: 'Произошла одна или несколько ошибок.(Код состояния ответа не указывает на успех: 500 (Внутренняя ошибка сервера).) '

HttpRequestException: Код состояния ответа не указывает на успех: 500 (Внутренняя ошибка сервера).

Я предполагаю, что проблема в том, как я отправляю значения в API и что ожидает API.У меня есть пример ожидаемых данных:

    {
"":[{
 "productId":"27795",
 "amount":2,
 "customerid":0
},{
 "productId":"27796",
 "amount":1,
 "customerid":0
}],
 "returnbasketid":true
}

Я уже проверял это с помощью Postman, и он работает нормально, поэтому проблема должна быть с моим кодом.

https://pastebin.com/pZDehaaD Этоэто полный пример моего Program.cs.URL API был удален.

EDIT : Итак, это JSON, который отправляет мое консольное приложение:

enter image description here

Принимая во внимание, что JSON, который работает через Почтальон, таков:

enter image description here

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

1 Ответ

1 голос
/ 24 сентября 2019

Вы передаете Продукт в API (это первый снимок Fiddler выше).

Но если мы посмотрим на требуемый ввод (второй снимок Fiddlel выше), а также пример ожидаемых данных"(серый фон), мы видим объект, который содержит (неназванный) массив Products и поле с именем" returnbasketid ".

Что нам нужно сделать, если заново создать этот объект.Мы можем назвать этот класс «Оберткой», или «MyRequestObject», или любым другим именем.Имя не важно.Я бы попробовал код этой формы.

public class Wrapper
{

    [JsonProperty("")]  // rename json property to empty string - don't know if this will work
    public List<Product> Products { get; set; } = new List<Product>();

    public bool returnbasketid { get; set; }
}

Затем вы передаете экземпляр этого Wrapper вместо Product вызову cons.PostAsJsonAsync ().

Проблема сэто то, что массив Product нашего Wrapper имеет имя, а сервер хочет массив без имени.Я пытаюсь переименовать массив выше.Если это прекрасно работает.В противном случае я думаю, что вам придется создать JSON самостоятельно (легко с Newtonsoft), а затем публиковать в PostAsync HttpClient (Uri, HttpContent).

...