C# WebApi 调用

//HttpClient调用帮助类
  public static class HttpRequestHelper
    {
        #region Get调用
        /// <summary>
        /// 使用get方法异步请求
        /// </summary>
        /// <param name="url">目标链接</param>
        /// <returns>返回的字符串</returns>
        private async static Task<HttpResponseMessage> GetResponseAsync(string url, Dictionary<string, string> header = null, Dictionary<string, string> parame = null)
        {
            try
            {
                HttpClient client = new HttpClient(new HttpClientHandler() { UseCookies = false });
                StringBuilder builder = new StringBuilder();
                builder.Append(url);
                if (header != null)
                {
                    client.DefaultRequestHeaders.Clear();
                    foreach (var item in header)
                    {
                        client.DefaultRequestHeaders.Add(item.Key, item.Value);
                    }
                }
                if (parame != null && parame.Count > 0)
                {
                    builder.Append("?");
                    int i = 0;
                    foreach (var item in parame)
                    {
                        if (i > 0)
                            builder.Append("&");
                        builder.AppendFormat("{0}={1}", item.Key, item.Value);
                        i++;
                    }
                }
                HttpResponseMessage response = await client.GetAsync(builder.ToString());
                response.EnsureSuccessStatusCode();//用来抛异常的

                return response;
            }
            catch (Exception e)
            {
                //在webapi中要想抛出异常必须这样抛出,否则之抛出一个默认500的异常
                var resp = new HttpResponseMessage(HttpStatusCode.InternalServerError)
                {
                    Content = new StringContent(e.ToString()),
                    ReasonPhrase = "error"
                };
                throw new HttpResponseException(resp);
            }
        }

        public static async Task<string> GetStringAsync(string url, Dictionary<string, string> header = null, Dictionary<string, string> parame = null)
        {
            var response = await GetResponseAsync(url, header, parame);
            return await response.Content.ReadAsStringAsync();
        }

        /// <summary>
        /// 使用Get返回异步请求返回List集合
        /// </summary>
        /// <typeparam name="T"></typeparam> 
        /// <returns></returns>
        public static async Task<List<T>> GetListAsync<T>(string url, Dictionary<string, string> header = null, Dictionary<string, string> parame = null)
        {
            var response = await GetResponseAsync(url, header, parame);
            return response.Content.ReadAsAsync<List<T>>().Result;
        }

        #endregion

        #region Post调用
        /// <summary>
        /// 使用post方法异步请求
        /// </summary>
        /// <param name="url">目标链接</param>
        /// <param name="json">发送的参数字符串-json</param>
        /// <returns>返回的字符串</returns>
        public static async Task<string> PostAsync(string url, string json, Dictionary<string, string> header = null, bool Gzip = false)
        {
            HttpClient client = new HttpClient(new HttpClientHandler() { UseCookies = false });
            HttpContent content = new StringContent(json);
            content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
            if (header != null)
            {
                client.DefaultRequestHeaders.Clear();
                foreach (var item in header)
                {
                    client.DefaultRequestHeaders.Add(item.Key, item.Value);
                }
            }
            HttpResponseMessage response = await client.PostAsync(url, content);
            response.EnsureSuccessStatusCode();
            string responseBody;
            if (Gzip)
            {
                GZipInputStream inputStream = new GZipInputStream(await response.Content.ReadAsStreamAsync());
                responseBody = new StreamReader(inputStream).ReadToEnd();
            }
            else
            {
                responseBody = await response.Content.ReadAsStringAsync();

            }
            return responseBody;
        }
        #endregion

        //Put、Delete方式相同 
    }
View Code

 

 同一控制器包含多个API接口,通过指定路由实现,如图:

 

 

 效果:

 

 

 

 

相关文章链接 :                                                                                                                                                                                                                                                                                                                                                                                                                                             

https://www.cnblogs.com/liuqiyun/p/9144816.html

相关文章链接 :    

https://blog.csdn.net/u011127019/article/details/53021164

相关文章链接 :    (简单API接口创建教程)

https://www.jianshu.com/p/364f1842cae5

相关文章链接 :    

https://www.cnblogs.com/guohu/p/12982850.html     

posted @ 2021-04-15 11:32  哈哈哈嗝  阅读(228)  评论(2编辑  收藏