這里使用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 } }
