我想在WinForm上执行HTTP请求和get
数据。如何使它像下面的图片一样?
我已经参考了一些相关信息。但是我很困惑如何开始(比如我应该在Form1.cs中编写代码或添加新类,如果我要创建模型……)
How to make HTTP POST web request
How to return async HttpClient responses back to WinForm?
我可以使用HttpClient方法吗?感谢您的回答和建议。
(新修改)
https://www.youtube.com/watch?v=PwH5sc-Q_Xk
我也从这段视频中学到了,但是我收到了错误消息。
没有MediaTypeFormatter可以从媒体类型为'text / html'的内容中读取类型为'IEnumerable`1的对象。
我的代码
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;
}
}
}
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; }
}
}
答案 0 :(得分:2)
在浏览器上,我可以获得这样的数据。(JSON格式)
这意味着您正在进行一个没有参数的HttpGet
调用,正如我从Url中看到的那样,无论如何都没有HttpBody。对于HttpPost之类的其他调用,您必须使用Postman,Fiddler之类的工具
以下是使用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服务地址的对象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应该只进行数据绑定,而没有处理代码
答案 1 :(得分:-2)
使用Json并使用模型序列化数据。并为模型分配表单字段。