C# 通过WebClient调用api接口

69 篇文章 13 订阅
15 篇文章 2 订阅
public class HttpHelper{
 
 
        /// <summary>
        /// get请求
        /// </summary>
        /// <param name="Url"></param> 
        /// <param name="AuthType">验证类型   这里示例两种  一种是cookie   一种是Bear </param>
        /// <param name="token"></param>
        /// <param name="httpClient">这里是注入的方式   也可以不用注入  直接new</param>
        /// <returns></returns>
public static async Task<dynamic> DoGetRequestAsync(string url,string AuthType,string token)
        { 
            try
            {
                using(HttpClient client = new HttpClient()) 非注入方式
                {
                    //使用注入的httpclientfactory获取client 
                    client.BaseAddress = new Uri(url);
                    if (!string.IsNullOrWhiteSpace(AuthType))
                    {
                        switch (AuthType)
                        {
                            //Bearer认证      如果接口未加密省略此行
                            case "Bearer": client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token); break;
                            case "Cookie": client.DefaultRequestHeaders.Add("Cookie", token); break;
 
                        }
                    } 
                    //设置请求体中的内容,并以gost的方式请求
                    var response = await client.GetAsync(url);
                    //获取请求到数据,并转化为字符串
                    var result = response.Content.ReadAsStringAsync().Result;
                    if (response.StatusCode == HttpStatusCode.OK)
                    { 
                        return result;
                    }
                    return new { ok = false, msg = "请求异常", data = "" };
                }
            }
            catch (Exception e)
            {
                return new { ok = false, msg = e.Message, data = "" };
            }
        }
        /// <summary>
        /// post请求
        /// </summary>
        /// <param name="Url"></param>
        /// <param name="parameter">序列化之后的json</param>
        /// <param name="ContentType">例如:"application/json"</param>
        /// <param name="Auth">验证类型   这里示例两种  一种是cookie   一种是Bear </param>
        /// <param name="token"></param>
        /// <param name="httpClient"></param>
        /// <returns></returns>
        public static async Task<dynamic> DoPostRequest(string Url,string parameter,string ContentType,string AuthType, string token)
        {
            try
            {
                using(HttpClient client = new HttpClient()) 非注入方式
                {
                    string responseBody = string.Empty;
                    client.DefaultRequestHeaders.Add("Method", "Post");
                    var content = new StringContent(parameter, Encoding.UTF8, ContentType);
                    if (!string.IsNullOrEmpty(AuthType))
                    {
                        switch (AuthType)
                        {
                            //Bearer认证      如果接口未加密省略此行
                            case "Bearer": client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token); break;
                            case "Cookie": client.DefaultRequestHeaders.Add("Cookie", token); break;
 
                        } 
 
                        //var authorizationBased64 = "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes($"{userName}:{password}"));//basic认证方式   用户名:密码 然后base64加密
                        //client.DefaultRequestHeaders.Add("Authorization", authorizationBased64);
                    }
                    HttpResponseMessage response = await client.PostAsync(Url, content);
                    //response.EnsureSuccessStatusCode();
                    if (response.StatusCode == HttpStatusCode.OK)
                    {
                        responseBody = response.Content.ReadAsStringAsync().Result;
                        dynamic res = JsonConvert.DeserializeObject<dynamic>(responseBody);
                        string CookieValue = "";
                        if (AuthType == "Cookie"&& Url.EndsWith("login")) {
                            //如果认证是cookie那么要从请求头获取cookie  调用其它接口时要在塞到cookie里
                            string[] Cookie = (string[])response.Headers.GetValues("Set-Cookie");
                            CookieValue = Cookie[0].Split(';')[0];
                        }
                        return new { ok = true, isTryException = false, cookie = CookieValue, data = res };
                    }
                    else
                    {
                        responseBody = response.Content.ReadAsStringAsync().Result;
                        
                        return new { ok = false, isTryException = false, cookie = "", data = responseBody };
                    }
                }
            }
            catch (Exception e)
            {
                return new { ok = false,isTryException=true, msg = e.Message, data = "" };
            }
        }
 
 
        /// <summary>
        /// post请求      ContentType", "application/x-www-form-urlencoded
        /// </summary>
        /// <param name="Url"></param>
        /// <param name="parameter"></param>
        /// <param name="ContentType"></param>
        /// <param name="token"></param>
        /// <param name="httpClient"></param>
        /// <returns></returns>
        public static async Task<dynamic> DoPostRequest(string Url,Dictionary<string,string> parameter, string token)
        {
            try
            {
                using(HttpClient client = new HttpClient()) 非注入方式 
                { 
                    string responseBody = string.Empty;
                     client.DefaultRequestHeaders.Add("Method", "Post"); 
                    var content = new FormUrlEncodedContent(parameter); 
                    if (!string.IsNullOrEmpty(token))
                    {
                        client.DefaultRequestHeaders.Add("Authorization", "Bearea " + token); //Bearea认证      如果接口未加密省略此行
                         
                        //var authorizationBased64 = "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes($"{userName}:{password}"));//basic认证方式   用户名:密码 然后base64加密
                        //client.DefaultRequestHeaders.Add("Authorization", authorizationBased64);
                    } 
                    content.Headers.Add("ContentType", "application/x-www-form-urlencoded");
                    HttpResponseMessage response = await client.PostAsync(Url, content);
                    response.EnsureSuccessStatusCode();
                    if (response.StatusCode==HttpStatusCode.OK)
                    {
                        responseBody =  response.Content.ReadAsStringAsync().Result;
                        dynamic res = JsonConvert.DeserializeObject<dynamic>(responseBody);
 
                        return new { ok = true, data = res }; 
                    }
                    return new { ok = false,msg= "请求异常", data ="" }; 
                }
            }
            catch (Exception e)
            {
                return new { ok = false, msg = e.Message, data = "" };
            }
        }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

香煎三文鱼

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值