C# 调用 WebApi 、 WebService


    public class PublicHttpUtil
    {
        //调用:HttpUtilHelper.HttpPost(item.FUrl, body);

        /// <summary>
        /// 调用WEBAPI方法
        /// </summary>
        /// <param name="url">地址</param>
        /// <param name="body">参数</param>
        /// <param name="method">get/post</param>
        /// <returns></returns>
        public static string HttpCallApi(string url, string body, string method = "POST")
        {
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = method;
                request.Accept = "text/html";
                request.ContentType = "application/json";

                if (method.ToUpper().Equals("POST"))
                {
                    Encoding encoding = Encoding.UTF8;
                    byte[] buffer = encoding.GetBytes(body);
                    request.ContentLength = buffer.Length;
                    request.GetRequestStream().Write(buffer, 0, buffer.Length);
                }
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                {
                    return reader.ReadToEnd();
                }
            }
            catch (WebException ex)
            {

                return ex.Message;

            }
        }

        public static string HttpPost(string url, string body)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "POST";
            request.Accept = "text/html, application/xhtml+xml, */*";
            request.ContentType = "application/json";

            Encoding encoding = Encoding.UTF8;
            byte[] buffer = encoding.GetBytes(body);
            request.ContentLength = buffer.Length;
            request.GetRequestStream().Write(buffer, 0, buffer.Length);

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
            {
                return reader.ReadToEnd();
            }
        }

        public static string HttpGet(string url)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "GET";
            request.Accept = "text/html, application/xhtml+xml, */*";
            request.ContentType = "application/json";

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
            {
                return reader.ReadToEnd();
            }
        }

        public static string HttpGetUtf8(string Url, string postDataStr)
        {
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url + (postDataStr == "" ? "" : "?") + postDataStr);
                request.Method = "GET";
                request.ContentType = "text/html;charset=UTF-8";
                //request.CookieContainer = Cookie;

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream myResponseStream = response.GetResponseStream();
                StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
                string retString = myStreamReader.ReadToEnd();
                myStreamReader.Close();
                myResponseStream.Close();

                return retString;
            }
            catch (Exception ex)
            {
                return ex.Message;
            }


        }

        public static string HttpGetUtf8(string Url)
        {
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
                request.Method = "GET";
                request.ContentType = "text/html;charset=UTF-8";
                //request.CookieContainer = Cookie;

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream myResponseStream = response.GetResponseStream();
                StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
                string retString = myStreamReader.ReadToEnd();
                myStreamReader.Close();
                myResponseStream.Close();

                return retString;
            }
            catch (Exception ex)
            {
                return ex.Message;
            }


        }

        public static string HttpPostData(string apiUrl, string postString)
        {
            try
            {
                byte[] postData = Encoding.UTF8.GetBytes(postString);
                WebClient webClient = new WebClient();
                webClient.Headers.Add("Content-Type", "application/json");
                //webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
                webClient.Headers.Add("ContentLength", postData.Length.ToString());
                byte[] responseData = webClient.UploadData(apiUrl, "POST", postData); //得到返回字符 
                StringBuilder resultBuilder = new StringBuilder();
                resultBuilder.Append(Encoding.Default.GetString(responseData));
                //string resultString = resultBuilder.ToString().Replace('\\', ' ');
                string resultString = resultBuilder.ToString();
                return resultString;
            }
            catch (Exception ex)
            {

                return ex.Message;
            }
        }

        /// <summary>
        /// http post 访问网页
        /// </summary>
        /// <param name="Url"></param>
        /// <param name="postDataStr"></param>
        /// <returns></returns>
        public static string HttpPostString(string Url, string postDataStr)
        {

            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";
                //request.ContentLength = Encoding.Unicode.GetByteCount(postDataStr);

                request.ContentLength = Encoding.Default.GetByteCount(postDataStr);

                //request.CookieContainer = Cookie;
                Stream myRequestStream = request.GetRequestStream();

                StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.Default);

                //StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.Unicode);

                myStreamWriter.Write(postDataStr);
                myStreamWriter.Close();

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                //response.Cookies = Cookie.GetCookies(response.ResponseUri);

                Stream myResponseStream = response.GetResponseStream();
                StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.Default);
                string retString = myStreamReader.ReadToEnd();
                myStreamReader.Close();
                myResponseStream.Close();

                return retString;
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }



        #region WebService

        public static DataTable ServiceWebClient(string uri, string sql)
        {
            DataTable repositories = null;
            try
            {
                //var url = "http://127.0.0.1:51013/Service1.asmx/GetData";
                var values = new System.Collections.Specialized.NameValueCollection();
                values.Add("sql", sql);
                var client = new WebClient();
                var data = client.UploadValues(uri, "POST", values);
                string strJson = System.Text.Encoding.UTF8.GetString(data);
                //字符串中间有内容才分解
                if (strJson.IndexOf(">[]<") <= 0)
                {
                    string s = strJson.Substring(strJson.IndexOf(">[{") + 1, strJson.IndexOf("}]<") - strJson.IndexOf(">[{") + 1);
                    repositories = JsonConvert.DeserializeObject<DataTable>(s);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return repositories;
        }


        #endregion

        #region WebAPI


        /// <summary>
        /// HttpClient  Post请求
        /// android项目的Properities 下的 AndroidManifest.xml 设置明文流量 :android:usesCleartextTraffic="true"
        /// android项目AndroidManifest.xml中的设置:<application android:label="测试应用" android:theme="@style/MainTheme" android:usesCleartextTraffic="true"></application>
        /// </summary>
        /// <param name="url"></param>
        /// <param name="json"> "{id:999,sql:\"select * from tb_student where no='"+ lbl.Text + "'\"}"</param>
        /// <returns></returns>
        public static string HttpClientPost(string url, string json)
        {
            string result = string.Empty;
            try
            {
                //设置Http的正文
                HttpContent httpContent = new StringContent(json);
                //设置Http的内容标头
                httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
                //设置Http的内容标头的字符
                httpContent.Headers.ContentType.CharSet = "utf-8";
                using (HttpClient httpClient = new HttpClient())
                {
                    //异步Post
                    HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;
                    //输出Http响应状态码
                    string statusCode = response.StatusCode.ToString();
                    //确保Http响应成功
                    if (response.IsSuccessStatusCode)
                    {
                        //异步读取json
                        result = response.Content.ReadAsStringAsync().Result;
                        result = ChangeJson(result);
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return result;
        }

        /// <summary>
        /// 泛型:Post请求
        /// where T : class, new() //表示T必须是引用类型(而不是int等值类型,或者ValueType的其他子类),
        ///                         new()表示这个类型T还必须至少具备一个无参的构造函数(还可以有其他有参数的构造函数)
        /// where T:class //表示T必须是引用类型
        /// where T:new() //表示这个类型T还必须至少具备一个无参的构造函数
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="url"></param>
        /// <param name="json"> "{id:999,sql:\"select * from tb_student where no='"+ lbl.Text + "'\"}"</param>
        /// <returns></returns>
        public static T HttpClientPost<T>(string url, string json) where T : class, new()
        {
            T result = default(T);
            try
            {
                HttpContent httpContent = new StringContent(json);
                httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
                httpContent.Headers.ContentType.CharSet = "utf-8";
                using (HttpClient httpClient = new HttpClient())
                {
                    HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;

                    if (response.IsSuccessStatusCode)
                    {
                        Task<string> t = response.Content.ReadAsStringAsync();
                        string s = t.Result;
                        //Newtonsoft.Json
                        //string json = JsonConvert.DeserializeObject(s).ToString();
                        result = JsonConvert.DeserializeObject<T>(s);
                        //s = ChangeJson(s);
                        //result = JsonConvert.DeserializeObject<T>(s);
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return result;
        }

        // Get请求
        public static string HttpClientGet(string url, out string statusCode)
        {
            string result = string.Empty;

            using (HttpClient httpClient = new HttpClient())
            {
                httpClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

                HttpResponseMessage response = httpClient.GetAsync(url).Result;
                statusCode = response.StatusCode.ToString();

                if (response.IsSuccessStatusCode)
                {
                    result = response.Content.ReadAsStringAsync().Result;
                    result = ChangeJson(result);
                }
            }
            return result;
        }


        // 泛型:Get请求
        public static T HttpClientGet<T>(string url, out string statusCode) where T : class, new()
        {
            T result = default(T);
            try
            {
                using (HttpClient httpClient = new HttpClient())
                {
                    httpClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
                    HttpResponseMessage response = httpClient.GetAsync(url).Result;
                    statusCode = response.StatusCode.ToString();
                    if (response.IsSuccessStatusCode)
                    {
                        Task<string> t = response.Content.ReadAsStringAsync();
                        string s = t.Result;
                        s = ChangeJson(s);
                        string json = JsonConvert.DeserializeObject(s).ToString();
                        result = JsonConvert.DeserializeObject<T>(json);
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return result;
        }

        private static string ChangeJson(string result)
        {
            result = result.Replace("\\", "");
            result = result.TrimStart(new char[] { '"' });
            result = result.TrimEnd(new char[] { '"' });
            return result;
        }


        #endregion


    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小小的技术员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值