zoukankan      html  css  js  c++  java
  • 使用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:	est.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
        }
    }
  • 相关阅读:
    混淆
    【虚拟DOM】√
    fn
    notebook
    sourceMappingURL
    十进制转换为十六进制
    关于this和super的区别
    类中访问级别
    Java中字符串解析
    IWorkspace操作
  • 原文地址:https://www.cnblogs.com/dotnet261010/p/12328007.html
Copyright © 2011-2022 走看看