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

1.WinFrom调用webapi接口方法

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

cs 复制代码
 #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格式的数据从文件中读取出来。调用代码如下:

cs 复制代码
 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();

cs 复制代码
 public class DataInfo
    {
        public int statusCode { get; set; }
        public string message { get; set; }     
    }

Standard类

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

cs 复制代码
  public class Standard
    {
        public string line { get; set; }
        public string linePlace { get; set; }     
    }

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

using Newtonsoft.Json;

Standard.json文件

cs 复制代码
{
    "line": "B10",
    "linePlace": "CQ_1", 
 }

补充:

get的传参方式

cs 复制代码
            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的传参方式

cs 复制代码
            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接口方法及其应用实例,以上代码是本人亲测可用的,在此记录,方便查阅。

相关推荐
合作小小程序员小小店7 分钟前
桌面开发,在线%信息管理%系统,基于vs2022,c#,winform,sql server数据。
开发语言·数据库·sql·microsoft·c#
曹牧1 小时前
C#中的StartsWith
java·服务器·c#
时光追逐者1 小时前
分享5款.NET开源免费的Redis客户端组件库
数据库·redis·开源·c#·.net·.net core
小邓   ༽1 小时前
C语言课件(非常详细)
java·c语言·开发语言·python·eclipse·c#·c语言课件
睡前要喝豆奶粉1 小时前
EF Core动态sql
数据库·sql·c#·.netcore
故事不长丨2 小时前
C#委托的使用
c#·wpf·winfrom·委托·网站开发
未来之窗软件服务2 小时前
幽冥大陆(三十八)P50酒店门锁SDK C#仙盟插件——东方仙盟筑基期
开发语言·单片机·c#·东方仙盟·东方仙盟sdk·东方仙盟vos智能浏览器
wzm—2 小时前
C#获取每年节假日
开发语言·c#
合作小小程序员小小店2 小时前
桌面开发,食堂卡管理系统开发,基于C#,winform,mysql数据库
数据库·mysql·c#
合作小小程序员小小店2 小时前
桌面开发,物业管理系统开发,基于C#,winform,mysql数据库
开发语言·数据库·sql·mysql·microsoft·c#