C#--調用WebApi--(Get,Post,Put,Delete請求總結)


以下是學習筆記:

一,HttpWebRequest方式

1,WebRequest方式 Get請求

  

        #region 方法3 .WebRequest方式 Get請求
        public static string HttpWebRequest_Get(string url)
        {
            //ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
            Encoding encoding = Encoding.UTF8;

            //構造一個Web請求的對象
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "GET";
            request.Accept = "text/html, application/xhtml+xml, */*";
            request.ContentType = "application/json";

            //獲取web請求的響應的內容
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
            {
                return reader.ReadToEnd();
            }
        }
        private void button3_Click(object sender, EventArgs e)
        {
            //string ss = HttpWebRequest_Get("http://localhost:55837/api/product");
            string ss = HttpWebRequest_Get(txt_get_url.Text);
            this.textBox3.Text += ss;
        }

        #endregion

  

 

 

2,WebRequest方式 Get帶參數請求

        #region WebRequest方式 Get帶參數請求

        private void button6_Click(object sender, EventArgs e)
        {
            string id = this.txt_get_parameter.Text;
            string ss = HttpWebRequest_Get(txt_get_url.Text+ "?"+id.Trim());//帶參數
            this.textBox6.Text += ss;
        }


        #endregion

  

 

 

 

 

3,WebRequest方式 Post請求

        #region 方法3 WebRequest方式 Post請求

        public static string HttpWebRequest_Post(string url, string body)
        {
            //ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
            Encoding encoding = Encoding.UTF8;
            HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url);
            request.Method = "POST"; //Post請求方式
            request.Accept = "text/html, application/xhtml+xml, */*";
            // 內容類型
            //request.ContentType = "application/json";//參數格式:  {username:"admin",password:"123} 如果參數不是json類型會報錯
            request.ContentType =
                "application/x-www-form-urlencoded"; //參數:username=admin&password=123 如果參數是json格式或者參數寫錯不會報錯的

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

            //HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            //上面的代碼會有異常出現,更改如下:

            HttpWebResponse response;
            try
            {
                response = (HttpWebResponse)request.GetResponse();
            }
            catch (WebException ex)
            {
                response = (HttpWebResponse)ex.Response;
            }


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

        private void button4_Click(object sender, EventArgs e)
        {
            string url = this.txt_post_url.Text;
            string body = this.txt_post_parameter.Text;
            string ss = HttpWebRequest_Post(url, body);
            this.textBox4.Text += ss;
        }

        #endregion

  

 

 

  

4,HttpWebRequest方式 Delete請求:

 #region WebRequest方式 Delete請求
        /// <summary>
        ///  API發送DELETE請求,返回狀態:200成功,201失敗
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public static string HttpWebRequest_Delete(string url)
        {
            //Web訪問對象64
            //string serviceUrl = string.Format("{0}/{1}", this.BaseUri, uri);
            string serviceUrl = url;
            HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(serviceUrl);
            myRequest.Method = "DELETE";
            // 獲得接口返回值68
            HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
            StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
            //string ReturnXml = HttpUtility.UrlDecode(reader.ReadToEnd());
            string ReturnXml = reader.ReadToEnd();
            reader.Close();
            myResponse.Close();
            return ReturnXml;
        }

        private void button7_Click(object sender, EventArgs e)
        {
            if (txt_delete_parameter.Text.Trim().Length > 0)
            {
                HttpWebRequest_Delete(txt_delete_rul.Text+"?"+txt_delete_parameter.Text);//帶參數刪除
            }
            else
            {
                HttpWebRequest_Delete(txt_delete_rul.Text);//全部刪除
            }
            
        }

  

 

 5,HttpWebRequest方式 Put請求:

       見下面的通用方法

二,HttpClient 方式

1,HttpClient 方式 Get請求

  #region 方法4 HttpClient 方式 Get請求

        public static string HttpClienGet(string url)
        {
            HttpClient hc = new HttpClient();
            string html= hc.GetStringAsync(url).Result;
            return html;
        }

        private void btn_HttpClentGet_Click(object sender, EventArgs e)
        {
            string url = this.txt_get_url.Text;
            string html = HttpClienGet(url);
            txt_HttpClentGet_Result.Text += html;
        }

        #endregion

  

2,HttpClient 方式 Post請求

        #region 方法4 HttpClient 方式 Post請求

        public static async void HttpClientPost(string url)
        {
            var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.None };

            using (var httpclient = new HttpClient(handler))
            {
                httpclient.BaseAddress = new Uri(url);
                var content = new FormUrlEncodedContent(new Dictionary<string, string>()
                {
                    {"name", "杜宗英"},
                    {"age", "18"},
                    {"gender","false" }
                });

                var  response = await httpclient.PostAsync(url, content);

                string responseString = await response.Content.ReadAsStringAsync();
                MessageBox.Show(responseString);
            }
        }

       

        private void button5_Click(object sender, EventArgs e)
        {
            string url = this.txt_post_url.Text;
            HttpClientPost(url);

        }
        #endregion

 

三,WebClient 方式

1,WebClient方式 Post請求

        #region WebClient方式 Post請求
        /// <summary>
        /// 
        /// </summary>
        /// <param name="url"></param>
        /// <param name="body">傳遞的參數</param>
        /// <returns></returns>
        public static string WebClientPost(string url,string body)
        {
            byte[] postData = Encoding.UTF8.GetBytes(body);//編碼,尤其是漢字,事先要看下抓取網頁的編碼方式
            WebClient webClient=new WebClient();
            webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");//采取POST方式必須加的header,如果改為GET方式的話就去掉這句話即可
            byte[] responseData = webClient.UploadData(url, "POST", postData);//得到返回字符流  
            string srcString = Encoding.UTF8.GetString(responseData);//解碼 
            return srcString;
        }

        private void btn_WebClient_Post_Click(object sender, EventArgs e)
        {
            string url = this.txt_post_url.Text;
            string body = this.txt_post_parameter.Text;
            string srcString = WebClientPost(url, body);
            this.txt_WebClient_Post.Text += srcString;
        }

        #endregion

 

四,HttpWebRequest通用方法

        public string CommonHttpWebRequest(string data, string uri, string type)
        {
            //Web訪問對象,構造請求的url地址
            //string serviceUrl = string.Format("{0}/{1}", this.BaseUri, uri);
            string serviceUrl = uri;

            //構造http請求的對象
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceUrl);
            //轉成網絡流
            byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data);
            //設置
            request.Method = type;
            request.ContentLength = buf.Length;
            //myRequest.ContentType = "application/json";//如果參數不是json格式會報錯
            request.ContentType ="application/x-www-form-urlencoded";
            request.MaximumAutomaticRedirections = 1;
            request.AllowAutoRedirect = true;
            // 發送請求
            Stream newStream = request.GetRequestStream();
            newStream.Write(buf, 0, buf.Length);
            newStream.Close();
            // 獲得接口返回值
            //HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
            //上面的代碼會有異常出現,更改如下:

            HttpWebResponse response;
            try
            {
                response = (HttpWebResponse)request.GetResponse();
            }
            catch (WebException ex)
            {
                response = (HttpWebResponse)ex.Response;
            }
            StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
            string ReturnXml = reader.ReadToEnd();
            reader.Close();
            response.Close();
            return ReturnXml;
        }

  1,Delete請求代碼:

        private void btn_webapi_delete_Click(object sender, EventArgs e)
        {
            string url = txt_delete_rul.Text;
            string data = txt_delete_parameter.Text;

            if (data.Trim().Length > 0)
            {
                CommonHttpWebRequest(data, url + "?" + data, "DELETE");//帶參數刪除
            }
            else
            {
                CommonHttpWebRequest(data, url, "DELETE"); ;//全部刪除
            }
            
        }

  2,Post請求代碼:

        private void btn_webapi_post_Click(object sender, EventArgs e)
        {
            string url = txt_post_url.Text;
            string data = txt_post_parameter.Text;

            string res = CommonHttpWebRequest(data, url, "POST");
            this.txt_webapi_get_data.Text += res;
        }

  3,Put 請求代碼:

        private void btn_webapi_put_Click(object sender, EventArgs e)
        {
            string url = txt_put_url.Text;
            string data = txt_put_parameter.Text;

            string res = CommonHttpWebRequest(data, url, "PUT");
            this.txt_webapi_get_data.Text += res;
        }

  

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM