C#HttpTest封装方法

先安装第三方: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;
}

子非鱼,安知鱼之乐

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值