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

.Net?HttpClient?使用請(qǐng)求數(shù)據(jù)的處理方法

 更新時(shí)間:2025年05月12日 10:50:59   作者:bicijinlian  
這篇文章主要介紹了.Net?HttpClient?使用請(qǐng)求數(shù)據(jù)的處理方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

HttpClient 使用請(qǐng)求數(shù)據(jù)

0、初始化及全局設(shè)置

//初始化:必須先執(zhí)行一次
#!import ./ini.ipynb

1、使用url 傳參

參數(shù)放在Url里,形如:http://www.baidu.com?name=zhangsan&age=18, GET、Head請(qǐng)求用的比較多。優(yōu)點(diǎn)是簡單、方便,能被瀏覽器緩存;缺點(diǎn)是參數(shù)長度等限制較多,數(shù)據(jù)暴露url中,可能比較長。

/**
    URL傳參:適合簡單數(shù)據(jù)類型
*/
{
    //獲取響應(yīng)字符串
    {
        var response = await SharedClient.GetAsync("api/Normal/GetAccount?id=1");
        response.EnsureSuccessStatusCode();
        var content = await response.Content.ReadAsStringAsync();
        Console.WriteLine(content);
    }
    //獲取響應(yīng)對(duì)象
    {
        var response = await SharedClient.GetAsync("api/Normal/GetAccount?id=1");
        response.EnsureSuccessStatusCode();
        var result = await response.Content.ReadFromJsonAsync<BaseResult<Account>>();
        result.Display();
    }
    //直接獲取響應(yīng)對(duì)象
    {
        var result = await SharedClient.GetFromJsonAsync<BaseResult<Account>>("api/Normal/GetAccount?id=1");
        result.Display();
    }
}

2、使用路由傳參

路由參數(shù),指參數(shù)使為URL的一部分,一般由后端API設(shè)定好,前端按規(guī)定使用即可。例如:后端指定/user/:id,前端使用/user/1,此時(shí)id為路由參數(shù)。

/*
** 路由參數(shù):參數(shù)是URL的一部分,由后端指定
*/
{//大括號(hào):方便折疊、開成單獨(dú)的作用域
    var response = await SharedClient.GetAsync("api/Normal/GetAccount/管理員01");
    //確定是成功的響應(yīng)
    response.EnsureSuccessStatusCode();
    //獲取響應(yīng)內(nèi)容
    var content = await response.Content.ReadAsStringAsync();
    //輸出 
    Console.WriteLine(content);
}

3、使用請(qǐng)求頭

把請(qǐng)求數(shù)據(jù)放入請(qǐng)求頭中,傳給后端。當(dāng)然也可以傳多個(gè)數(shù)據(jù)。不過,請(qǐng)求頭中傳數(shù)據(jù)限制比較多,一般只傳簡單的數(shù)據(jù):比如jwt token 。

/*
* 請(qǐng)求頭: 值必須是字符串,如果有中文等需進(jìn)行編碼
*/
{
    //設(shè)置請(qǐng)求頭
    //中文先編碼,服務(wù)端接收后要解碼
    var codedName = System.Net.WebUtility.UrlEncode("管理員01");
    //SharedClient是共用的,所以不能多次添加,先移除舊值
    if (SharedClient.DefaultRequestHeaders.Contains("name"))
    {
        SharedClient.DefaultRequestHeaders.Remove("name");
    }
    //添加請(qǐng)求頭
    SharedClient.DefaultRequestHeaders.Add("name", codedName);
    var response = await SharedClient.GetAsync("api/Normal/GetAccountFromHeader");
    //確定是成功的響應(yīng)
    response.EnsureSuccessStatusCode();
    //獲取響應(yīng)內(nèi)容
    var content = await response.Content.ReadAsStringAsync();
    //輸出 
    Console.WriteLine(content);
}

4、使用請(qǐng)求體

把數(shù)據(jù)放在請(qǐng)求體中,發(fā)送到服務(wù)端??梢允呛唵蔚淖址部梢允嵌M(jìn)制數(shù)據(jù)(上傳文件)、form表單項(xiàng)、編碼過的form表單項(xiàng)、json、流式數(shù)據(jù)等形式,甚至是這個(gè)類型的組合。

說下個(gè)人的幾點(diǎn)理解:
1、不管哪種請(qǐng)求體數(shù)據(jù),都是放在請(qǐng)求體中,以二進(jìn)制形式通過網(wǎng)絡(luò)發(fā)往服務(wù)器,由服務(wù)器接收使用??蛻舳税l(fā)送請(qǐng)求數(shù)據(jù)需要與服務(wù)端接收相配合;
2、客戶端通過Content-Typey請(qǐng)求頭設(shè)置,告訴服務(wù)端請(qǐng)求發(fā)送的是哪種類型的數(shù)據(jù);服務(wù)端根據(jù)Content-Type來識(shí)別、解析請(qǐng)求數(shù)據(jù)。常見的類型有:multipart/form-data、application/x-www-form-urlencoded、application/json、text/plain等;
3、ASP.NET Core中,默認(rèn)的請(qǐng)求體類型是FormUrlEncodedContent,所以默認(rèn)情況下,客戶端發(fā)送的請(qǐng)求數(shù)據(jù)是form表單項(xiàng); asp.net 框架對(duì)json格式數(shù)據(jù)和表單數(shù)據(jù)進(jìn)行了特殊處理,支持參數(shù)綁定等,可以使用[FromBody]特性,將請(qǐng)求數(shù)據(jù)綁定到對(duì)應(yīng)的模型上。但普通的文本類型等不支持綁定等功能,需要從請(qǐng)求體中獲取原始數(shù)據(jù),自行處理。
4、一次可發(fā)送多種格式數(shù)據(jù),由統(tǒng)一的分隔符分隔。服務(wù)端可以從請(qǐng)求頭[] Content-Type: multipart/mixed; boundary=“d2e38916-df08-4fec-a40e-3e5179736f32”]拿到分隔符,然后根據(jù)分隔符將數(shù)據(jù)拆分出來。

HttpClient 中,請(qǐng)求體也分為這幾種(常見的)類型:

  • MultipartFormDataContent
  • FormUrlEncodedContent
  • JsonContent
  • StringContent
  • ByteArrayContent
  • StreamContent
  • MultipartContent

MultipartFormDataContent :Form表單

Form表單,提交數(shù)據(jù)方式之一。

/*
*   Form表單,提交數(shù)據(jù)。一般為Put或Post提交。
*/
{
    // 創(chuàng)建一個(gè) MultipartFormDataContent 對(duì)象, 用來存入 Form表單 各項(xiàng)及值
    var formContent = new MultipartFormDataContent();
    // 添加表單字段
    formContent.Add(new StringContent("1"), "id");
    formContent.Add(new StringContent("管理員01"), "name");
    // 發(fā)送POST請(qǐng)求
    var response = await SharedClient.PostAsync("api/AdvancedGet/PostFormData", formContent);
    // 讀取響應(yīng)內(nèi)容
    string responseString = await response.Content.ReadAsStringAsync();
    Console.WriteLine(responseString);
}

FormUrlEncodedContent :Form表單 asp.net core 默認(rèn)接收方式

/*
    FormUrlEncoded 提交數(shù)據(jù) 
*/
{
    //設(shè)置數(shù)據(jù)項(xiàng)
    var urlEncodedData = new List<KeyValuePair<string,string>>()
    {
        new KeyValuePair<string,string>(key:"id",value:"1"),
        new KeyValuePair<string,string>(key:"name",value:"管理員01"),
    };
    //FormUrlEncodedContent對(duì)象
    var formContent = new FormUrlEncodedContent(urlEncodedData);
    // 發(fā)送POST請(qǐng)求
    var response = await SharedClient.PostAsync("api/AdvancedGet/PostFormData", formContent);
    // 讀取響應(yīng)內(nèi)容
    string responseString = await response.Content.ReadAsStringAsync();
    Console.WriteLine(responseString);
}

StringContent 普通文本(也包括很多格式,甚至是自定義格式。要和服務(wù)器配合)

/*
    普通文本方式提交數(shù)據(jù)
*/
{
    var requestContent = new StringContent("我是請(qǐng)求體第一段內(nèi)容", Encoding.UTF8, "text/plain");
    var response = await SharedClient.PostAsync("/api/AdvancedPost/TextData", requestContent);
    var content = await response.Content.ReadAsStringAsync();
    Console.WriteLine(content);
}

到此這篇關(guān)于.Net HttpClient 使用請(qǐng)求數(shù)據(jù)的文章就介紹到這了,更多相關(guān).Net HttpClient請(qǐng)求數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • .NET客戶端實(shí)現(xiàn)Redis中的管道(PipeLine)與事物(Transactions)

    .NET客戶端實(shí)現(xiàn)Redis中的管道(PipeLine)與事物(Transactions)

    本文主要介紹了.NET客戶端實(shí)現(xiàn)Redis中的管道(PipeLine)與事物(Transactions)的相關(guān)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-03-03
  • net core webapi多版本控制與swagger(nswag)配置教程

    net core webapi多版本控制與swagger(nswag)配置教程

    這篇文章主要介紹了net core webapi多版本控制與swagger(nswag)配置,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • linq中的串聯(lián)操作符

    linq中的串聯(lián)操作符

    這篇文章介紹了linq中的串聯(lián)操作符,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • asp.net 文件下載實(shí)現(xiàn)代碼

    asp.net 文件下載實(shí)現(xiàn)代碼

    文件下載代碼,Copy 別人的.需要的朋友可以參考下。
    2010-03-03
  • .NET8實(shí)現(xiàn)PDF合并的示例代碼

    .NET8實(shí)現(xiàn)PDF合并的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何使用.NET8實(shí)現(xiàn)PDF合并的效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • vs2012創(chuàng)建的ado.net模型無法實(shí)例化的解決方案

    vs2012創(chuàng)建的ado.net模型無法實(shí)例化的解決方案

    本文給大家分享的是升級(jí)vs2012后,發(fā)現(xiàn)創(chuàng)建數(shù)據(jù)模型無法實(shí)例化使用,嘗試了很多種方法,最后在度娘的幫助下,才解決了這個(gè)問題,這里記錄下來,分享給大家。
    2015-03-03
  • .Net Core項(xiàng)目如何添加日志功能詳解

    .Net Core項(xiàng)目如何添加日志功能詳解

    這篇文章主要給大家介紹了關(guān)于.Net Core項(xiàng)目如何添加日志功能的相關(guān)資料,日志功能是我們開發(fā)中經(jīng)常需要用到的一個(gè)功能,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • .Net?Core?使用?TagProvider?與?Enricher?豐富日志的操作代碼

    .Net?Core?使用?TagProvider?與?Enricher?豐富日志的操作代碼

    這篇文章主要介紹了.Net?Core?使用?TagProvider?與?Enricher?豐富日志的操作,本文通過示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • .NET讀取Excel文件的三種方法的區(qū)別

    .NET讀取Excel文件的三種方法的區(qū)別

    最近研究了如何使得ASP.NET讀取Excel文件更加高效呢,現(xiàn)總結(jié)如下:
    2013-03-03
  • 創(chuàng)建一個(gè)完整的ASP.NET Web API項(xiàng)目

    創(chuàng)建一個(gè)完整的ASP.NET Web API項(xiàng)目

    ASP.NET Web API具有與ASP.NET MVC類似的編程方式,ASP.NET Web API不僅僅具有一個(gè)完全獨(dú)立的消息處理管道,而且這個(gè)管道比為ASP.NET MVC設(shè)計(jì)的管道更為復(fù)雜,功能也更為強(qiáng)大。下面創(chuàng)建一個(gè)簡單的Web API項(xiàng)目,需要的朋友可以參考下
    2015-10-10

最新評(píng)論