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