C#从WebApi获取并处理数据

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

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

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

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

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

691a222c07e5bda6f6e68fb64a1fd197.png

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

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

211153c1c44d60dc6fe8cb0d65770c04.png01be515387d72d716083ad6e919f0471.png

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

09d12b1cf142c03c35883a5caae21d64.png

630798e9787a77a0a1bd4b05b85fcb42.png

ceed51b80a582091870216b36ff04f86.png

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

ad7565d9ee701b3aaba127383a61aa03.png

2cce956a755b03c4a080dbd6980d4068.png

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

1b86eb759c34d4da043726af329dc60a.png

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数据。

1deda3e26bef281e1ad8c7f0b2b2be66.png

607841edccf42a0c78af336132986350.png

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

8f3bc23218143c3b51083fd095dd3b1e.png

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数据格式比较复杂,可以借助一些转换工具。

d506ea5d96fdfbc0f712bf84ec5171b1.png

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

eada7ec68e77c12abefb4164c47b605a.png

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

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;
        }




    }
}

005c2d18105bcf811750557c7ab89b1d.png

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

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));
            }


        }

最终结果如下:

a5691542258af4b64bda93add166799e.png

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

代码分享地址:

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

-

技术群:添加小编微信并备注进群

小编微信:mm1552923   

公众号:dotNet编程大全    

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值