Невозможно вызвать веб-API из Winform (ошибка запроса)

Здесь много правильных ответов, но я хотел добавить это (для полноты):

Если вы в нижней части файла cpp реализации выполняете явное инстанцирование всех типов, которые будут использоваться шаблоном с, компоновщик сможет найти их как обычно.

Изменить: добавление примера явного создания экземпляра шаблона. Используется после того, как шаблон определен, и определены все функции-члены.

template class vector<int>;

Это создаст экземпляр (и, следовательно, сделает доступным для компоновщика) класс и все его функции-члены (только). Подобный синтаксис работает для функций шаблона, поэтому, если у вас есть перегрузки операторов, не являющихся членами, вам может понадобиться сделать то же самое для них.

Вышеприведенный пример бесполезен, поскольку вектор полностью определен в заголовках, за исключением случаев, когда common include file (precompiled header?) использует extern template class vector<int>, чтобы не создавать его из всех других (1000?) файлов, которые используют вектор.

0
задан Hafiz Siddiq 5 March 2019 в 11:11
поделиться

1 ответ

Используя HttpClient, вам не нужно сериализовать свой объект в Json перед отправкой его в Web Api. HttpClient позаботится о сериализации для вас.

Редактировать (убран предыдущий код, который явно не работал)

Вместо отправки Json в PostAsJsonAsync, просто отправьте объект.

driverDayLogModel driverDayLog = new driverDayLogModel
{
    driverId = Convert.ToInt32(txtId.Text),
    dayStartTime = DateTime.Now,
};
using (var client = new HttpClient())
{
    client.BaseAddress = new Uri("http://127.0.0.1:54314/");
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    // simply put the object as the second parameter instead of a Json string
    var response = client.PostAsJsonAsync("api/driverdaylogs", driverDayLog).Result;
    if (response.IsSuccessStatusCode)
    {
        // Some Stuff
    }
    else
    {
        MessageBox.Show("Error Code" +
        response.StatusCode + " : Message - " + response.ReasonPhrase);
    }
}

В качестве примечания: использование .Result заблокирует ваш код, поэтому рекомендуемый способ - использовать await и async, но это выходит за рамки этого вопроса / ответа.

0
ответ дан Florian Lim 5 March 2019 в 11:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: