C#从WebApi获取并处理数据

明天开始就是五一小长假了,祝大家假期愉快,玩得开心。

今天的内容不难,常用。讲一讲C#如何从WebApi获取并处理数据。

演示环境:windows 11,VS 2022,.NET 6

需要使用两个库:NewtonSoft.json,RestSharp。

到本文写作时,RestSharp最新稳定版本110.2.0,如果是.Net FrameWork,需要4.7.1以上。不同版本的RestSharp使用方法可能会略有差异。.

C#从WebApi获取并处理数据

首先我们需要一个WebApi,才能从中获取数据。(关于如何创建一个WebApi,可以看之前的文章:WebAPI入门学习,这会是一个系列的文章,陆续更新内容)。这次我会建好并直接开始获取数据。

我们借用之前的一个例子:WPF中的DataGrid,一文全都告诉你

C#从WebApi获取并处理数据C#从WebApi获取并处理数据

这个里面DataGrid的数据,我们是直接使用SqlSugar(ORM)从SqlServer获取的。这一次,我们改为WebApi获取数据,客户端程序去调用WebApi。

C#从WebApi获取并处理数据

C#从WebApi获取并处理数据

C#从WebApi获取并处理数据

现在我已经创建好了WebApi,除了Swagger文档形式,我们可以使用Postman,或者Apifox进行接口测试。

C#从WebApi获取并处理数据

C#从WebApi获取并处理数据

接口测试工具一个非常好用的点在于,可以自动生成接口代码或者业务代码,修改一下拿来用。如开头所说,提供的模块是RestSharp,版本之间略有差异。

C#从WebApi获取并处理数据

var client = new RestClient("https://localhost:44374/DouPoStudents/GetStudentInfo?className=斗破一班");client.Timeout = -1;var request = new RestRequest(Method.POST);client.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)";IRestResponse response = client.Execute(request);Console.WriteLine(response.Content);

Post方法如果参数较多,也可以修改代码,接受传json数据。

C#从WebApi获取并处理数据

C#从WebApi获取并处理数据

接口请求代码,也需要做出对应调整

C#从WebApi获取并处理数据

var client = new RestClient("https://localhost:44374/DouPoStudents/GetStudentInfo");client.Timeout = -1;var request = new RestRequest(Method.POST);client.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)";request.AddHeader("Content-Type", "application/json");var body = @"{" + "\n" +@"  ""className"": ""斗破一班""" + "\n" +@"}";request.AddParameter("application/json", body,  ParameterType.RequestBody);IRestResponse response = client.Execute(request);Console.WriteLine(response.Content);

WebApi测试获取数据功能OK,下面就开始修改程序。

两个接口获取的数据大致如下,返回的都是json格式的字符串。

{    "code": "0",    "message": "数据请求成功",    "data": "斗破一班,"}
{    "code": "0",    "message": "数据请求成功",    "data": [        {            "Name": "萧炎",            "Gender": "男",            "Class": "斗破一班",            "Grade": "斗帝"        },        {            "Name": "熏儿",            "Gender": "女",            "Class": "斗破一班",            "Grade": "斗帝"        },        {            "Name": "彩铃",            "Gender": "女",            "Class": "斗破一班",            "Grade": "斗帝"        },        {            "Name": "药老",            "Gender": "男",            "Class": "斗破一班",            "Grade": "斗帝"        }    ]}

Json数据的处理,我常用的方法,一种是解析成Json格式,然后使用Json[key]的方式获取值。

还有就是转化为C#实体,key就是属性,value对应属性值。如果Json数据格式比较复杂,可以借助一些转换工具。

C#从WebApi获取并处理数据

屏蔽掉之前从数据库获取数据的代码。新建WebApi类,把APifox生成的代码复制过来,然后就发现提示错误了。因为使用的Restsharp是最新版本,有变更。

C#从WebApi获取并处理数据

要用起来,修改一下代码。

namespace DataGridDemo.DAL{    public static class WebApi    {        public static string GetClassInfo()        {            var client = new RestClient("https://localhost:44374/DouPoStudents/GetClassInfo");            var request = new RestRequest("",Method.Get);            RestResponse response = client.Execute(request);            return response.Content;        }

        public static string GetStudentInfo(string className)        {            var client = new RestClient("https://localhost:44374/DouPoStudents/GetStudentInfo");            var request = new RestRequest("",Method.Post);            request.AddHeader("Content-Type", "application/json");            var body = new { className= className };            request.AddParameter("application/json", JsonConvert.SerializeObject(body), ParameterType.RequestBody);            RestResponse response = client.Execute(request);            return response.Content;        }

    }}

C#从WebApi获取并处理数据

这样,我们就可以使用这两个方法获取数据了。

public MainView()        {            InitializeComponent();            this.DataContext = new MainViewModel();
            //string ConnectionStr = "Server=localhost;Database=master;Trusted_Connection=True;";            //DataGridDemo.DAL.SqlConnection conn = new DataGridDemo.DAL.SqlConnection();            //var classes = conn.QueryClass();            var classeInfo = WebApi.GetClassInfo();
            var jsonBack = JObject.Parse(JsonConvert.DeserializeObject(classeInfo).ToString());
            List<string> classes = jsonBack["data"].ToString().Split(',').ToList();
            foreach (var c in classes)            {                if (c == "") return;                string js = WebApi.GetStudentInfo(c);                Data da = JsonConvert.DeserializeObject<Data>(js);                wrapPanel.Children.Add(new StudentControl(da.data, c));            }
        }

最终结果如下:

C#从WebApi获取并处理数据

PS:以上内容仅作为演示,用于实际生产环境,需要修正完善的点还很多。

代码分享地址:

https://www.aliyundrive.com/s/wwmPYgdvqap提取码: ky83

C#从WebApi获取并处理数据