当前位置:首页 » 《我的小黑屋》 » 正文

WinFrom调用webapi接口方法及其应用实例

8 人参与  2024年09月20日 13:21  分类 : 《我的小黑屋》  评论

点击全文阅读


1.WinFrom调用webapi接口方法

最近项目要在winfrom项目中调用webAPI,故在网上查找资料,找到了一个WinFrom调用webapi接口的通用方法,关键代码:

 #region WinFrom调用webapi接口通用方法        private async Task<string> InvokeWebapi(string url, string api, string type, Dictionary<string, string> dics)        {            string result = string.Empty;            HttpClient client = new HttpClient();            client.DefaultRequestHeaders.Add("authorization", "Basic YWRtaW46cGFzc3dvcmRAcmljZW50LmNvbQ==");//basic编码后授权码            client.BaseAddress = new Uri(url);            client.Timeout = TimeSpan.FromSeconds(510);            if (type.ToLower() == "put")            {                HttpResponseMessage response;                //包含复杂类型                if (dics.Keys.Contains("input"))                {                    if (dics != null)                    {                        foreach (var item in dics.Keys)                        {                            api = api.Replace(item, dics[item]).Replace("{", "").Replace("}", "");                        }                    }                    var contents = new StringContent(dics["input"], Encoding.UTF8, "application/json");                    response = client.PutAsync(api, contents).Result;                    if (response.IsSuccessStatusCode)                    {                        result = await response.Content.ReadAsStringAsync();                        return result;                    }                    return result;                }                var content = new FormUrlEncodedContent(dics);                response = client.PutAsync(api, content).Result;                if (response.IsSuccessStatusCode)                {                    result = await response.Content.ReadAsStringAsync();                    return result;                }            }            else if (type.ToLower() == "post")            {                var content = new FormUrlEncodedContent(dics);                HttpResponseMessage response = client.PostAsync(api, content).Result;                if (response.IsSuccessStatusCode)                {                    result = await response.Content.ReadAsStringAsync();                    return result;                }            }            else if (type.ToLower() == "get")            {                HttpResponseMessage response = client.GetAsync(api).Result;                if (response.IsSuccessStatusCode)                {                    result = await response.Content.ReadAsStringAsync();                    return result;                }            }            else            {                return result;            }            return result;        }        #endregion   

2.应用实例

创建一个名为callWebAPI的窗体项目,在窗体加两个textBox。下面实例主要是调用webAPI的方法获取数据存为json格式,然后将json格式的数据从文件中读取出来。调用代码如下:

 private async void callWebAPI_Load(object sender, EventArgs e)        {            #region 调用webapi并存为json格式文件            string api = "";            string url = "http://10.3.11.2/SimploWebApi/api/LASER_System/LASER_GetLineShowConfig?typeString=2";            Dictionary<string, string> dics = new Dictionary<string, string>();            Task<string> task = InvokeWebapi(url, api, "post", dics);            string result = task.Result;            //textBox1.Text = result;            if (result != null)            {                JObject jsonObj = null;                jsonObj = JObject.Parse(result);                DataInfo info = new DataInfo();                info.statusCode = Convert.ToInt32(jsonObj["statusCode"]);                //info.message = jsonObj["message"].ToString();                if (info.statusCode == 0)                {                    JArray jlist = JArray.Parse(jsonObj["Data"].ToString());                    string json = JsonConvert.SerializeObject(jlist, Formatting.Indented);                    //File.WriteAllText("Standard.json", json);//将数据存为json格式                    for (int i = 0; i < jlist.Count; ++i)  //遍历JArray                      {                                             JObject tempo = JObject.Parse(jlist[i].ToString());                        textBox1.Text += tempo["line"].ToString();                                        }                }            }            #endregion            #region  获取json文件数据            // 读取JSON文件内容            string jsonFilePath = "Standard.json";            string jsons = File.ReadAllText(jsonFilePath);            // 反序列化JSON到对象            Standard standard = JsonConvert.DeserializeObject<Standard>(jsons);            textBox2.Text = standard.line + "," + standard.linePlace;            #endregion        }

以上实例还需建立DataInfo类和Standard类

DataInfo类

DataInfo info = new DataInfo();

 public class DataInfo    {        public int statusCode { get; set; }        public string message { get; set; }         }

Standard类

 Standard standard = JsonConvert.DeserializeObject<Standard>(jsons);

  public class Standard    {        public string line { get; set; }        public string linePlace { get; set; }         }

以上实例用了json,所以需要引用Newtonsoft.Json.dll(具体引用方法见以前文章)

using Newtonsoft.Json;

Standard.json文件

{    "line": "B10",    "linePlace": "CQ_1",  }

补充:

get的传参方式

            string api = "";            string sWo = "1025";                      string url = "http://10.1.1.1/api/MES/API_GetLaserAOIParm?sWo=" + sWo + "";            Dictionary<string, string> dics = new Dictionary<string, string>();                      Task<string> task = InvokeWebapi(url, api, "post", dics);            string result = task.Result;

post的传参方式

            string api = "";            string sWo = "1025";                      string url = "http://10.1.1.1/api/MES/API_GetLaserAOIParm";            Dictionary<string, string> dics = new Dictionary<string, string>();            dics = new Dictionary<string, string>            {                { "sWo", sWo },                        };            Task<string> task = InvokeWebapi(url, api, "post", dics);            string result = task.Result;

参考文献:WinForm如何调用WebApi接口_c# weiapi winform-CSDN博客

结语:本文主要记录WinFrom调用webapi接口方法及其应用实例,以上代码是本人亲测可用的,在此记录,方便查阅。


点击全文阅读


本文链接:http://zhangshiyu.com/post/162190.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1