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

susan花雨 2024-10-04 10:33:03 阅读 88

1.WinFrom调用webapi接口方法

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

<code> #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 + "";code>

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



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。