網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
一、引言
我們有時(shí)侯需要在程序里面調(diào)用Http接口、請(qǐng)求http資源、編寫(xiě)http爬蟲(chóng)等的時(shí)候都需要在程序里面進(jìn)行Http請(qǐng)求。很多人習(xí)慣的WebClient、HttpWebRequest在TPL下有很多用起來(lái)不方便的地方,TPL下推薦使用HttpClient(using System.Net.Http),而且在.NET Core下已經(jīng)不在支持WebClient等。
1、發(fā)送Get請(qǐng)求
HttpClient發(fā)出Get請(qǐng)求獲取文本響應(yīng),如下面的代碼:
// 實(shí)例化HttpClient對(duì)象 HttpClient hc = new HttpClient(); // 發(fā)送Get請(qǐng)求獲取 string strContent =await hc.GetStringAsync("http://www.baidu.com");
2、發(fā)送Post請(qǐng)求
HttpClient發(fā)送Post請(qǐng)求使用Task
- FormUrlEncodedContent:表示用來(lái)發(fā)送表單格式的請(qǐng)求。
- StringContent:表示用來(lái)發(fā)送字符串請(qǐng)求。
- MultipartFormDataContent:Multipart發(fā)送表單請(qǐng)求,一般帶上傳文件信息。
- StreamContent:發(fā)送流內(nèi)容。
二、實(shí)例
下面我們看一個(gè)使用HttpClient發(fā)送Post請(qǐng)求的實(shí)例。我們創(chuàng)建一個(gè)MVC項(xiàng)目,控制器里面有三個(gè)Post請(qǐng)求的方法,分別模擬三種不同內(nèi)容的Http請(qǐng)求,代碼如下:
using System.Web; using System.Web.Mvc; namespace HttpClientMVCTestDemo.Controllers { public class LoginRequest { public string userName { get; set; } public string password { get; set; } } public class HttpClientTestController : Controller { // GET: HttpClientTest public ActionResult Index() { return View(); } ////// 發(fā)送表單請(qǐng)求 /// /// /// ///[HttpPost] public string Login(string userName, string password) { if (userName == "admin" && password == "123") { return "ok"; } else { return "error"; } } /// /// 發(fā)送Json格式的請(qǐng)求 /// /// ///[HttpPost] public string Login2(LoginRequest data) { string userName = data.userName; string password = data.password; if (userName == "admin" && password == "123") { return "ok"; } else { return "error"; } } /// /// 上傳文件 /// /// ///[HttpPost] public string Upload(HttpPostedFileBase file) { string userName = Request.Headers["UserName"]; string password = Request.Headers["Password"]; if (userName == "admin" && password == "123") { // 保存文件 file.SaveAs(Server.MapPath("~/" + file.FileName)); return "ok"; } else { return "error"; } } } }
然后創(chuàng)建一個(gè)Winform程序,用來(lái)發(fā)送Http請(qǐng)求。界面上有三個(gè)按鈕,分別發(fā)送三種不同內(nèi)容的Http請(qǐng)求。
1、發(fā)送表單內(nèi)容的請(qǐng)求
我們看下面發(fā)送表單請(qǐng)求的代碼:
////// 模擬發(fā)送表單內(nèi)容的Http請(qǐng)求 /// /// /// private async void btnForm_Click(object sender, EventArgs e) { // 實(shí)例化對(duì)象 HttpClient client = new HttpClient(); Dictionarydic = new Dictionary (); dic["userName"] = "admin"; dic["password"] = "123"; // 參數(shù) FormUrlEncodedContent content = new FormUrlEncodedContent(dic); // 發(fā)送post請(qǐng)求 HttpResponseMessage responseMsg = await client.PostAsync("http://localhost:55179/HttpClientTest/login", content); // 返回報(bào)文體 // responseMsg.Content // 返回響應(yīng)頭 // responseMsg.Headers // 返回響應(yīng)碼 // responseMsg.StatusCode // 獲取返回值 這里確定返回的是字符串,調(diào)用string string msg =await responseMsg.Content.ReadAsStringAsync(); MessageBox.Show($"響應(yīng)碼:{responseMsg.StatusCode.ToString()}"); MessageBox.Show($"返回內(nèi)容:{msg}"); }
程序運(yùn)行結(jié)果:
點(diǎn)擊“確定”,查看返回內(nèi)容:
2、發(fā)送json格式內(nèi)容的請(qǐng)求
下面是發(fā)送json內(nèi)容請(qǐng)求的代碼:
////// 發(fā)送json /// /// /// private async void btnJson_Click(object sender, EventArgs e) { // json格式的字符串 string jsonData = "{userName:'admin',password:'123'}"; // 實(shí)例化對(duì)象 HttpClient client = new HttpClient(); StringContent content = new StringContent(jsonData); // 設(shè)置contentType,必須要設(shè)置 設(shè)置為json格式,MVC會(huì)自動(dòng)轉(zhuǎn)換成Model類型 content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json"); // 發(fā)送post請(qǐng)求 HttpResponseMessage responseMsg = await client.PostAsync("http://localhost:55179/HttpClientTest/login2", content); // 獲取返回值 string msg = await responseMsg.Content.ReadAsStringAsync(); MessageBox.Show($"響應(yīng)碼:{responseMsg.StatusCode.ToString()}"); MessageBox.Show($"返回內(nèi)容:{msg}"); }
3、上傳文件
看一下上傳文件的代碼:
////// 上傳文件 /// /// /// private async void btnUpload_Click(object sender, EventArgs e) { // 實(shí)例化對(duì)象 HttpClient client = new HttpClient(); MultipartFormDataContent content = new MultipartFormDataContent(); content.Headers.Add("UserName", "admin"); content.Headers.Add("Password", "123"); using (Stream stream = File.OpenRead(@"F:\數(shù)據(jù)庫(kù).txt")) { content.Add(new StreamContent(stream), "file", "test.txt"); HttpResponseMessage responseMsg = await client.PostAsync("http://localhost:55179/HttpClientTest/Upload", content); // 返回值 string msg = await responseMsg.Content.ReadAsStringAsync(); MessageBox.Show($"響應(yīng)碼:{responseMsg.StatusCode.ToString()}"); MessageBox.Show($"返回內(nèi)容:{msg}"); } }
點(diǎn)擊上傳文件按鈕以后,就能在服務(wù)器端看到我們上傳的文件了。
原文鏈接:https://www.cnblogs.com/dotnet261010/p/12342296.html
相關(guān)推薦
- 2022-12-04 Python中Yield的基本用法及Yield與return的區(qū)別解析_python
- 2021-12-15 git_stats?web代碼圖形統(tǒng)計(jì)工具詳解_其它綜合
- 2023-05-21 使用react完成點(diǎn)擊返回頂部操作_React
- 2022-09-20 C#利用TreeView控件實(shí)現(xiàn)目錄跳轉(zhuǎn)_C#教程
- 2022-05-20 ElasticSearch 7.X系列之:Centos7中常見(jiàn)啟動(dòng)報(bào)錯(cuò)以及解決方法
- 2023-04-11 Golang使用協(xié)程實(shí)現(xiàn)批量獲取數(shù)據(jù)_Golang
- 2022-12-02 React函數(shù)式組件Hook中的useEffect函數(shù)的詳細(xì)解析_React
- 2022-08-05 Python?如何給圖像分類(圖像識(shí)別模型構(gòu)建)_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支