WinFrom调用webapi接口方法及其应用实例
创始人
2024-11-14 16:33:50

1.WinFrom调用webapi接口方法

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

 #region WinFrom调用webapi接口通用方法         private async Task InvokeWebapi(string url, string api, string type, Dictionary 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 dics = new Dictionary();             Task 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(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(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 dics = new Dictionary();                       Task 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 dics = new Dictionary();             dics = new Dictionary             {                 { "sWo", sWo },                         };             Task task = InvokeWebapi(url, api, "post", dics);             string result = task.Result;

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

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

相关内容

热门资讯

裸辞做“一人公司”,我后悔了 去年这个时候,一位以色列程序员正在东南亚旅行。他顺手把一个在脑子里转了很久的想法做成了产品,一个让任...
南京建成国内首个Pre-6G试... 4月21日,2026全球6G技术与产业生态大会在南京开幕。全息互动技术展台前,一名远在北京的工作人员...
超梵求职受邀参加“2025抖音... 超梵求职受邀参加“2025抖音巨量引擎成人教育行业生态大会”,探讨分享优质内容传播,服务万千学员。 ...
摩托罗拉Razr 2026(R... IT之家 4 月 22 日消息,摩托罗拉宣布新一代 Razr 折叠手机将于 4 月 29 日在美国发...
库克卸任,特纳斯领航:苹果新纪... 苹果首席执行官蒂姆·库克将卸任,硬件工程主管约翰·特纳斯将接任,苹果公司今天宣布此事。 库克将在夏季...