C#调用外部Api并解析返回的json的参数

以下内容为原创内容,创作不易 转载请注明:https://www.cnblogs.com/ccgn/articles/16184779.html


 

作为一个初次使用WebApi的小白,我为了学会怎么调用并解析并展示到前台页面,花了整整一天的时间,说来惭愧

百度出来的答案全是面向大神编程,写成这样,能看懂的人就不需要看你的教程了,也许是人家是打算自己做个备忘录,没打算教学吧

而我不同,我觉得我三天不看,再看我还是看不懂,所以我会写一个无论什么时候看都能看懂的傻瓜式教程,也称为CC式教程(CC不是傻瓜)

由于我也是刚刚实现,就只能在这篇教程中写出我使用的方法以及遇到的问题,对于没有目标的初学者来说,可以增加一些对 C#调用api 的理解

首先对于小白来说,在哪调用别人的接口,代码写在哪就是一个问题,我使用的是Asp.Net,把代码写在aspx.cs文件下,aspx页面正好可以显示解析出来的内容,当然,你想写在哪个类都是可以的

本文以聚合数据的一个接口名为 “历史上的今天” 为例,它的返回内容是一个这样的json串,我们只提取他的日期和内容显示出来即可

 

 

 

然后我们现在前台写一个表格用来显示一会儿解析出来的内容

<table style="border-collapse:collapse">
                <tr>
                    <td>日期</td>
                    <td><asp:Label runat="server" ID="riqi"></asp:Label></td>
                </tr>
                <tr>
                    <td>新闻</td>
                    <td><asp:Label runat="server" ID="xinwen"></asp:Label></td>
                </tr>
            </table>

现在回到cs文件写关键代码了,由于我也是刚刚实现,所以我也不是特别理解,只是怕哪天忘了,所以记录一下,大家浅喷

我就不做太多的代码解释,然后看代码

//定义一个请求api并获取返回内容的方法,url作为参数方便测试不同url
        public static string QueryPostparamsService(string url)
        {
            //定义一个result用来存放接收到的json数据
            string result = "";
            //请求url
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            //请求方法为Get
            req.Method = "Get";
            //这里没有添加请求头,注释掉了
            //req.Headers.Add()
            //使用try-catch捕获异常情况
            try
            {
                HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
                Stream stream = resp.GetResponseStream();
                //获取内容
                using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                {
                    result = reader.ReadToEnd();
                }
            }
            catch (Exception ex)
            {
                result = ex.Message;
            }
            return result;
        }

这里这个方法就可以获取到返回的json串了,如果代码有报错,那就鼠标点击报错位置引用相关的文件,然后是解析json串

        protected void Page_Load(object sender, EventArgs e)
        {
            //历史上的今天
            string lishishangdejintian = "http://v.juhe.cn/todayOnhistory/queryEvent.php?key=这里替换成你申请的key&date=4/24";
            //调用QueryPostparamsService方法并传参(api地址)
            string jsonchuan = QueryPostparamsService(lishishangdejintian);
            //JObject jo = (JObject)JsonConvert.DeserializeObject(jsonchuan); //跟下方一行效果一样,两种写法,区别是什么我也不知道
            //把json转为这个JObject类型,并放在 jo 里
            JObject jo = JObject.Parse(jsonchuan);
            try
            {
                //看文章第一个图,这里是根据返回的json串写的,我们把reason、result、error_code看做第一层,那么具体数据就在第二层
                //有些api还有第三层,在后边再加一个[]就行了。jo 后跟第一层的名字[result],因为返回的是多条数据,并不是
                //图中示例的一条,所以加个索引,我们取第一条数据,下表为0,然后后跟第二层的名字
                //[date]就是取日期里的值,[title]就是取内容里的值,然后放到前台的单元格里
                riqi.Text = jo["result"][0]["date"].ToString();
                xinwen.Text = jo["result"][0]["title"].ToString();
            }
            catch
            {
                //出现异常会跳到这里
                ClientScript.RegisterStartupScript(this.GetType(), "alert", "<script>alert('出错了');</script>");
            }
        }

引入的命名空间是这些

using Newtonsoft.Json.Linq;
using System;
using System.IO;
using System.Net;
using System.Text;

接下来执行就ok了,效果是这样的

 

暂时我就理解这么多, 后续我会更新更详细的方法

成功麻烦点个赞

posted @ 2022-04-24 10:42  给自己个晚安  阅读(2573)  评论(0编辑  收藏  举报