Как получить данные по API, используя форму Windows - PullRequest
0 голосов
/ 03 декабря 2018

В браузере я могу получить такие данные (в формате JSON) enter image description here

Я хочу выполнить HTTP-запросы и get данные в WinForm.Как я могу сделать это, как показано на картинке ниже?

enter image description here

Я сослался на некоторую соответствующую информацию.Но я запутался, как начать (как я должен написать код в Form1.cs или добавить новый класс, если я создам модель ...)

Как сделать веб-запрос HTTP POST

Как вернуть асинхронные ответы HttpClient обратно в WinForm?

Можно ли использовать метод HttpClient?Спасибо за ответ и предложение.


(Новое редактирование)

https://www.youtube.com/watch?v=PwH5sc-Q_Xk

Я также узнал из этого видео, но я получил сообщение об ошибке.

Нет MediaTypeFormatter для чтения объекта типа 'IEnumerable`1' из содержимого с типом носителя 'text / html'.

Мой код

Form1.cs

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Net.Http;
using System.Net.Http.Formatting;

namespace _123
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            HttpClient clint = new HttpClient();
            clint.BaseAddress = new Uri("http://localhost:8888/");
            HttpResponseMessage response = clint.GetAsync("PersonList").Result;

            var emp = response.Content.ReadAsAsync<IEnumerable<ImgList>>().Result;
            dataGridView1.DataSource = emp;
        }
    }
}

ImgList.cs (это модель?)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;

namespace _123
{
    class ImgList
    {
        public int id { get; set; }
        public string name { get; set; }
        public int age { get; set; }
    }
}

enter image description here

enter image description here

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

В браузере я могу получить такие данные (в формате JSON)

Это означает, что вы делаете вызов HttpGet без параметров, как я вижу изURL и в любом случае нет HttpBody.Для любого другого вызова, такого как HttpPost, вы должны использовать такой инструмент, как Postman, Fiddler

Ниже приведен простой код для вызова Http Get с использованием C #:

// Create HttpClient
var client = new HttpClient { BaseAddress = new Uri("http://localhost:8888/") };

// Assign default header (Json Serialization)
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(ApiConstant.JsonHeader));    

// Make an API call and receive HttpResponseMessage
var responseMessage = await client.GetAsync("PersonList", HttpCompletionOption.ResponseContentRead);

// Convert the HttpResponseMessage to string
var resultArray = await result.Content.ReadAsStringAsync();

// Deserialize the Json string into type using JsonConvert
var personList = JsonConvert.DeserializeObject<List<Person>>(resultArray);

Как это работает

  • HttpClient - это объект, который охватывает адрес службы API
  • Мы гарантируем, что назначенный заголовок имеет тип Json для сериализации / связи
  • Выполнение асинхронного вызова по протоколу Http
  • HttpResponseMessage используется для извлечения строки, десериализованной в List<Person> с помощью NewtonSoft Json

Обратите внимание Async вызов означает, что охватывающий метод должен быть Async

Ожидаемая схема для Person класса для заполнения List<Person> с использованием десериализации:

public class Person
{
  public int id {get;set;}
  public string Name {get;set;}
  public int age {get;set;}
}

Где вызвать код - Winform / Добавить новый класс

Стандартным механизмом будет создание универсальной вспомогательной библиотеки / класса, из которого будут выполнены все вызовы API, получены результаты,winform просто выполняет привязку данных, а не процессКод

0 голосов
/ 03 декабря 2018

Используйте Json и сериализуйте свои данные с моделью.И назначьте поля формы с моделью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...