C#--调用WebApi--(Get,Post,Put,Delete请求总结)
以下是学习笔记:
一,HttpWebRequest方式
1,WebRequest方式 Get请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #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带参数请求
1 2 3 4 5 6 7 8 9 10 11 | #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请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #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请求:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #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请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #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请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #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请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #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通用方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | 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请求代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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请求代码:
1 2 3 4 5 6 7 8 | 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 请求代码:
1 2 3 4 5 6 7 8 | 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; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构