先安装第三方:Json解析第三方(Newtonsoft.Json)
下载和上传进度条第三方(Microsoft.AspNet.WebApi,Client)
下载这两个后有附加下载第三方的不用管
①对象结构转成使用&字符拼接格式
1{name:zs,psw:123,age:10}转成name=zs&psw=123&age=10
public static string GetURLEncodeingString(object o)
{
List<string> list = new List<string>();
Type type = o.GetType(); // 获取参数对象类型。通过反射技术,获取对象的属性和特性 字段等
PropertyInfo[] infos = type.GetProperties();//获取对象中所有的属性
foreach (PropertyInfo info in infos)
{
list.Add($"{info.Name}={info.GetValue(o)}"); //[name=zs,psw=123,age=10] name=zs
}
return string.Join("&", list);
}
注意:list.Add里面不能有空格不然会报错!
②封装转成一个json字符的方法
public static string GetJsonString(object o)
{
return JsonConvert.SerializeObject(o);
}
③封装异步get请求
参数1是url 参数2是传递到数据,数据可能是传字符串连接拼接格式,也有可能对象结构
GetAsyncWithURLEncodingString("http://127.0.0.1:3000/login","name=zs&psw=123&age=10")
public static async Task<string> GetAsyncWithURLEncodingString(string url,string data=null)
{
if (data != null)
{
url += "?" + data;
}
HttpClient client = new HttpClient();
var res = await client.GetAsync(url);
string data1 = await res.Content.ReadAsStringAsync();
return data1;
}
④ 封装get异步请求 请求参数是对象类型
GetAsyncWithObject("http://127.0.0.1:3000/login",{name:zs,psw=123})
public static async Task<string> GetAsyncWithObject(string url, object data = null)
{
if (data != null)
{
string d1 = GetURLEncodeingString(data);
url += "?" + d1;
}
HttpClient client = new HttpClient();
var res = await client.GetAsync(url);
string data1 = await res.Content.ReadAsStringAsync();
return data1;
}
⑤发一个异步get请求 需要设置请求头的
参数1是url, 参数2 是字典.请求头,参数3 是请求数据
public static async Task<string> GetAsyncWithHeader( string url,Dictionary<string,string> dic, object data = null)
{
if (data != null)
{
string d1 = GetURLEncodeingString(data);
url += "?" + d1;
}
// 设置请求头
HttpClient client = new HttpClient();
if (dic != null)
{
foreach (string item in dic.Keys) // 遍历所有的键
{ // TryAddWithoutValidation 添加不需要验证
client.DefaultRequestHeaders.TryAddWithoutValidation(item, dic[item]); //添加请求头
}
}
var res = await client.GetAsync(url);
string data1 = await res.Content.ReadAsStringAsync();
return data1;
}
⑥ 发送异步请求 请求是post请求
参数1 url,参数2 请求参数字符串格式 urlencode这种编码的字符串,name=zs&psw=123&age=10
public static async Task<string> PostAsyncWithURLString(string url,string data = null)
{
StringContent con = null;
if (data != null)
{
con = new StringContent(data,Encoding.UTF8,"application/x-www-form-urlencoded");
}
HttpClient client = new HttpClient();
var res = await client.PostAsync(url, con);
string data1 = await res.Content.ReadAsStringAsync();
return data1;
}
⑦ 发送post异步请求 请求数据类型是:name=zs&psw=123&age=10
参数1 url,参数2 请求参数 对象格式{name:zs,psw:123}
public static async Task<string> PostAsyncWithObject(string url, object data = null)
{
StringContent con = null;
if (data != null)
{
con = new StringContent(GetURLEncodeingString(data), Encoding.UTF8, "application/x-www-form-urlencoded");
}
HttpClient client = new HttpClient();
var res = await client.PostAsync(url, con);
string data1 = await res.Content.ReadAsStringAsync();
return data1;
}
⑧发送post请求 设置请求头
public static async Task<string> PostAsyncWithHeader(string url,Dictionary<string,string> dic, object data = null)
{
StringContent con = null;
if (data != null)
{
string value = null;
//判断请求数据是什么格式application/x-www-form-urlencoded还是其他application/json
//TryGetValue 获取Content-Type值
bool ct = dic.TryGetValue("Content-Type", out value);
if (ct&&value=="application/json")
{
//请求数据类型是json字符串
con = new StringContent(GetJsonString(data), Encoding.UTF8, "application/json");
}
else
{
//其他类型application/x-www-form-urlencoded
con = new StringContent(GetURLEncodeingString(data), Encoding.UTF8, "application/x-www-form-urlencoded");
}
}
HttpClient client = new HttpClient();
//对请求头数据的添加
if (dic != null)
{
foreach (string item in dic.Keys)
{
client.DefaultRequestHeaders.TryAddWithoutValidation(item, dic[item]);
}
}
var res = await client.PostAsync(url, con);
string data1 = await res.Content.ReadAsStringAsync();
return data1;
}
子非鱼,安知鱼之乐