//HttpClient调用帮助类

C#  WebApi 调用_WebApiC#  WebApi 调用_WebApi_02

  public static class HttpRequestHelper
    {        #region Get调用        /// 
        /// 使用get方法异步请求        /// 
        /// 目标链接
        /// 返回的字符串
        private async static TaskGetResponseAsync(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();
        }        /// 
        /// 使用Get返回异步请求返回List集合        /// 
        ///  
        /// 
        public static async Task<List> GetListAsync(string url, Dictionary<string, string> header = null, Dictionary<string, string> parame = null)
        {            var response = await GetResponseAsync(url, header, parame);            return response.Content.ReadAsAsync<List>().Result;
        }        #endregion

        #region Post调用        /// 
        /// 使用post方法异步请求        /// 
        /// 目标链接
        /// 发送的参数字符串-json
        /// 返回的字符串
        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接口,通过指定路由实现,如图:

C#  WebApi 调用_WebApi_03

 

 

 效果:

C#  WebApi 调用_WebApi_04