winforms 如何使用Windows窗体通过api获取数据

mpbci0fu  于 2022-11-25  发布在  Windows
关注(0)|答案(2)|浏览(186)

在浏览器上,我可以得到这样的数据。(JSON格式)x1c 0d1x
我想在WinForm上执行HTTP请求和get数据。我怎样才能使它像下面的图片一样?

我已经参考了一些相关的信息。但是我对如何开始感到困惑(比如我应该在Form 1. cs中编写代码还是添加新类,我应该创建模型...)
How to make HTTP POST web request
How to return async HttpClient responses back to WinForm?
我可以使用HttpClient方法吗?谢谢您的回答和建议。
(New编辑)
https://www.youtube.com/watch?v=PwH5sc-Q_Xk
我也从这个视频中学习,但我得到了错误消息.
没有MediaTypeFormatter可用于从媒体类型为'text/html'的内容中读取类型为'IEnumerable“1'的对象。

我的代码

表单1.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; }
    }
}

bvjxkvbb

bvjxkvbb1#

在浏览器上,我可以得到这样的数据。(JSON格式)
这意味着您正在进行一个HttpGet调用,没有参数,正如我从Url中看到的那样,并且在任何情况下都没有HttpBody。
下面是使用C#进行Http Get调用的简单代码:

// 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 Get调用
  • HttpResponseMessage用于提取字符串,使用NewtonSoft Json将其反序列化为List<Person>

请注意,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应该只进行数据绑定,而不是处理代码

edqdpe6u

edqdpe6u2#

使用Json和序列化模型中的数据,以及分配模型中的表单字段。

相关问题