使用HttpClient和HttpWebRequest調用WebAPI接口


這里使用ASP.NET Core創建一個WebApi項目,代碼如下:

using System.IO;
using Microsoft.AspNetCore.Mvc;

namespace AspNetCoreDemo.Controllers
{
    [Route("api/TestHttp")]
    [ApiController]
    public class TestHttpController : ControllerBase
    {
        [HttpGet]
        public ActionResult<string> Get()
        {
            return "這是無參的Get方法";
        }

       
        [HttpGet("{name}")]
        public ActionResult<string> Get(string name)
        {
            return $"這是有參的Get方法,參數{name}";
        }

        [HttpPost]
        public void Post([FromBody] string para)
        {
            // 模擬記錄日志
            using (StreamWriter sw = new StreamWriter(@"E:\test.txt", true))
            {
                sw.WriteLine(para);
                sw.Close();
            }
        }
    }
}

然后分別使用HttpClient和HttpWebRequest調用提供的WebApi接口,代碼如下:

using Newtonsoft.Json;
using System;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Text;

namespace ConsoleApp1
{
    class Program
    {
        static  void Main(string[] args)
        {

            string result1 = HttpGet();
            string result2 = HttpGetWithPara("有參方法");
            string result3 = HttpPost("post");
            PostClient();

            GetClient();

            GetParaClient("2333");
            Console.WriteLine(result1);
            Console.WriteLine(result2);

            Console.ReadKey();

        }

        #region HttpWebRequest調用API接口
        /// <summary>
        /// 通過HttpWebRequest調用無參的Get方法
        /// </summary>
        static string HttpGet()
        {
            string retStr = "";
            HttpWebRequest request = null;
            try
            {
                string fullUrl = "http://localhost:38149/api/TestHttp";
                request = (HttpWebRequest)HttpWebRequest.Create(fullUrl);
                request.Method = "GET";
                request.ContentType = "application/x-www-form-urlencoded";
                request.Credentials = CredentialCache.DefaultCredentials;
                request.Timeout = 3600;
                request.ReadWriteTimeout = 3600;
                retStr = ReadStringResponse(request.GetResponse());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return retStr;
        }

        /// <summary>
        /// 通過HttpWebRequest調用有參數的Get方法
        /// </summary>
        /// <param name="para"></param>
        /// <returns></returns>
        static string HttpGetWithPara(string para)
        {
            string retStr = "";
            HttpWebRequest request = null;
            try
            {
                string fullUrl = $"http://localhost:38149/api/TestHttp/{para}";
                request = (HttpWebRequest)HttpWebRequest.Create(fullUrl);
                request.Method = "GET";
                request.ContentType = "application/x-www-form-urlencoded";
                request.Credentials = CredentialCache.DefaultCredentials;
                request.Timeout = 3600;
                request.ReadWriteTimeout = 3600;
                retStr = ReadStringResponse(request.GetResponse());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return retStr;
        }

        /// <summary>
        /// 解析web響應,以string形式返回
        /// </summary>
        /// <param name="response">web響應</param>
        /// <returns>返回string形式的web響應</returns>
        private static String ReadStringResponse(WebResponse response)
        {
            string returnStr = "";
            StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
            returnStr = sr.ReadToEnd();
            sr.Close();
            return returnStr;
        }

        /// <summary>
        /// 通過HttpWebRequest調用Post方法
        /// </summary>
        /// <param name="body"></param>
        /// <returns></returns>
        static string HttpPost(string body)
        {
            string url = "http://localhost:38149/api/TestHttp";
            Encoding encoding = Encoding.UTF8;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "POST";
            request.ContentType = "application/json;charset=utf-8";

            byte[] buffer = encoding.GetBytes(body);

            request.ContentLength = buffer.Length;


            Stream stream = request.GetRequestStream();
            stream.Write(buffer, 0, buffer.Length);
            stream.Close();

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding))
            {
                return reader.ReadToEnd();
            }
        } 
        #endregion

        #region HttpClient調用API接口
        /// <summary>
        /// 通過HttpClient調用Get方法
        /// </summary>
        static async void GetClient()
        {
            string url = "http://localhost:38149/api/TestHttp";

            try
            {
                var str = JsonConvert.SerializeObject("213123");

                HttpContent content = new StringContent(str);
                content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");

                using (var client = new HttpClient())
                {
                    HttpResponseMessage response = await client.GetAsync(url);//改成自己的
                    response.EnsureSuccessStatusCode();//用來拋異常的
                    string responseBody = await response.Content.ReadAsStringAsync();
                }

            }
            catch (Exception ex)
            {

            }
        }

        /// <summary>
        /// 通過HttpClient調用有參的Get方法
        /// </summary>
        /// <param name="para"></param>
        static async void GetParaClient(string para)
        {
            string strReturn = "";
            string url = $"http://localhost:38149/api/TestHttp/{para}";

            try
            {
                var str = JsonConvert.SerializeObject("213123");

                HttpContent content = new StringContent(str);
                content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");

                using (var client = new HttpClient())
                {
                    HttpResponseMessage response = await client.GetAsync(url);
                    response.EnsureSuccessStatusCode();//用來拋異常的
                    strReturn = await response.Content.ReadAsStringAsync();
                }

            }
            catch (Exception ex)
            {
                strReturn = ex.Message;
            }
        }

        /// <summary>
        /// 通過HttpClient調用Post方法
        /// </summary>
        static async void PostClient()
        {
            string url = "http://localhost:38149/api/TestHttp";

            try
            {
                var str = JsonConvert.SerializeObject("213123");

                HttpContent content = new StringContent(str);
                content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");

                using (var client = new HttpClient())
                {
                    HttpResponseMessage response = await client.PostAsync(url, content);//改成自己的
                    response.EnsureSuccessStatusCode();//用來拋異常的
                    string responseBody = await response.Content.ReadAsStringAsync();
                }

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        } 
        #endregion
    }
}

 


免責聲明!

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



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