欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#多線程TPL模式下使用HttpClient

 更新時間:2022年03月22日 10:22:08   作者:.NET開發(fā)菜鳥  
這篇文章介紹了C#多線程TPL模式下使用HttpClient的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、引言

我們有時侯需要在程序里面調(diào)用Http接口、請求http資源、編寫http爬蟲等的時候都需要在程序里面進行Http請求。很多人習(xí)慣的WebClient、HttpWebRequest在TPL下有很多用起來不方便的地方,TPL下推薦使用HttpClient(using System.Net.Http),而且在.NET Core下已經(jīng)不在支持WebClient等。

1、發(fā)送Get請求

HttpClient發(fā)出Get請求獲取文本響應(yīng),如下面的代碼:

// 實例化HttpClient對象
HttpClient hc = new HttpClient();
// 發(fā)送Get請求獲取
string strContent =await hc.GetStringAsync("http://www.baidu.com");

2、發(fā)送Post請求

HttpClient發(fā)送Post請求使用Task<HttpResponseMessage> PostAsync(string requestUri,HttpContent content)方法,方法的第一個參數(shù)是請求的地址,第二個參數(shù)用來設(shè)置請求內(nèi)容。HttpContent是抽象類,主要有下面的幾個子類:

  • FormUrlEncodedContent:表示用來發(fā)送表單格式的請求。
  • StringContent:表示用來發(fā)送字符串請求。
  • MultipartFormDataContent:Multipart發(fā)送表單請求,一般帶上傳文件信息。
  • StreamContent:發(fā)送流內(nèi)容。

二、實例

下面我們看一個使用HttpClient發(fā)送Post請求的實例。我們創(chuàng)建一個MVC項目,控制器里面有三個Post請求的方法,分別模擬三種不同內(nèi)容的Http請求,代碼如下:

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();
        }

        /// <summary>
        /// 發(fā)送表單請求
        /// </summary>
        /// <param name="userName"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        [HttpPost]
        public string Login(string userName, string password)
        {

            if (userName == "admin" && password == "123")
            {
                return "ok";
            }
            else
            {
                return "error";
            }
        }

        /// <summary>
        /// 發(fā)送Json格式的請求
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        [HttpPost]
        public string Login2(LoginRequest data)
        {
            string userName = data.userName;
            string password = data.password;
            if (userName == "admin" && password == "123")
            {
                return "ok";
            }
            else
            {
                return "error";
            }
        }

        /// <summary>
        /// 上傳文件
        /// </summary>
        /// <param name="file"></param>
        /// <returns></returns>
        [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)建一個Winform程序,用來發(fā)送Http請求。界面上有三個按鈕,分別發(fā)送三種不同內(nèi)容的Http請求。

1、發(fā)送表單內(nèi)容的請求

我們看下面發(fā)送表單請求的代碼:

/// <summary>
/// 模擬發(fā)送表單內(nèi)容的Http請求
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private async void btnForm_Click(object sender, EventArgs e)
{
    // 實例化對象
    HttpClient client = new HttpClient();
    Dictionary<string, string> dic = new Dictionary<string, string>();
    dic["userName"] = "admin";
    dic["password"] = "123";
    // 參數(shù)
    FormUrlEncodedContent content = new FormUrlEncodedContent(dic);
    // 發(fā)送post請求
    HttpResponseMessage responseMsg = await client.PostAsync("http://localhost:55179/HttpClientTest/login", content);
    // 返回報文體
    // 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}");
}

程序運行結(jié)果:

點擊“確定”,查看返回內(nèi)容:

2、發(fā)送json格式內(nèi)容的請求

下面是發(fā)送json內(nèi)容請求的代碼:

/// <summary>
/// 發(fā)送json
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private async void btnJson_Click(object sender, EventArgs e)
{
    // json格式的字符串
    string jsonData = "{userName:'admin',password:'123'}";
    // 實例化對象
    HttpClient client = new HttpClient();
    StringContent content = new StringContent(jsonData);
    // 設(shè)置contentType,必須要設(shè)置 設(shè)置為json格式,MVC會自動轉(zhuǎn)換成Model類型
    content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
    // 發(fā)送post請求
    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、上傳文件

看一下上傳文件的代碼:

/// <summary>
/// 上傳文件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private async void btnUpload_Click(object sender, EventArgs e)
{
    // 實例化對象
    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ù)庫.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}");
    }
}

點擊上傳文件按鈕以后,就能在服務(wù)器端看到我們上傳的文件了。

到此這篇關(guān)于C#多線程TPL模式下使用HttpClient的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C# 6.0 內(nèi)插字符串(Interpolated Strings )的使用方法

    C# 6.0 內(nèi)插字符串(Interpolated Strings )的使用方法

    這篇文章主要為大家詳細介紹了C# 6.0 內(nèi)插字符串的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • C#中實現(xiàn)可變參數(shù)實例

    C#中實現(xiàn)可變參數(shù)實例

    這篇文章主要介紹了C#中實現(xiàn)可變參數(shù)實例,本文演示使用params 實現(xiàn)可變數(shù)量的參數(shù),并且這些參數(shù)的類型可以不同,需要的朋友可以參考下
    2015-01-01
  • 詳解c# 強制轉(zhuǎn)換和類型轉(zhuǎn)換

    詳解c# 強制轉(zhuǎn)換和類型轉(zhuǎn)換

    這篇文章主要介紹了c# 強制轉(zhuǎn)換和類型轉(zhuǎn)換的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2020-10-10
  • Unity UGUI教程之實現(xiàn)滑頁效果

    Unity UGUI教程之實現(xiàn)滑頁效果

    使用UGUI提供的ScrollRect和ScrollBar組件實現(xiàn)基本滑動以及自己控制每次移動一頁來達到滑頁的效果。具體實現(xiàn)思路請參考下本教程
    2016-04-04
  • C#實現(xiàn)字符串倒序遍歷的方法小結(jié)

    C#實現(xiàn)字符串倒序遍歷的方法小結(jié)

    這篇文章主要為大家詳細介紹了C#中實現(xiàn)字符串倒序遍歷的常見方法,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考下
    2024-02-02
  • 基于C#實現(xiàn)Word加蓋的騎縫章效果

    基于C#實現(xiàn)Word加蓋的騎縫章效果

    這篇文章主要為大家詳細介紹了如何使用C#實現(xiàn)Word加蓋的騎縫章效果,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考下
    2024-01-01
  • Unity的IPreprocessBuildWithReport實用案例深入解析

    Unity的IPreprocessBuildWithReport實用案例深入解析

    這篇文章主要為大家介紹了Unity的IPreprocessBuildWithReport實用案例深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • C#通過熱鍵控制顯示器開關(guān)的方法

    C#通過熱鍵控制顯示器開關(guān)的方法

    這篇文章主要介紹了C#通過熱鍵控制顯示器開關(guān)的方法,涉及C#針對熱鍵的操作技巧,非常具有實用價值,需要的朋友可以參考下
    2014-12-12
  • C#實現(xiàn)注冊碼的方法

    C#實現(xiàn)注冊碼的方法

    這篇文章主要介紹了C#實現(xiàn)注冊碼的方法,可實現(xiàn)C#生成軟件注冊碼的相關(guān)功能,涉及C#硬件操作及隨機數(shù)操作的相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下
    2015-08-08
  • C#實現(xiàn)文章添加內(nèi)鏈的方法

    C#實現(xiàn)文章添加內(nèi)鏈的方法

    文章添加內(nèi)鏈有利于提高讀者閱讀體驗,有利于搜索引擎優(yōu)化,提升頁面瀏覽量,下面小編通過兩種方法說下用c#實現(xiàn)文章添加內(nèi)鏈的方法,一起看看吧
    2018-08-08

最新評論