ASP.NET MVC Web API 學習筆記----HttpClient簡介

来源:http://www.cnblogs.com/liuhui12/archive/2017/02/24/6440071.html
-Advertisement-
Play Games

1. HttpClient簡單介紹 依稀還記得那個時候用WebClient,HttpWebRequest來發送一個請求,現在ASP.NET MVC4中自帶了一個類HttpClient,用於接收HttpResponseMessage和發送HttpRequestMesssage。 問題在於既然WebCl ...


 

 

1. HttpClient簡單介紹 

依稀還記得那個時候用WebClient,HttpWebRequest來發送一個請求,現在ASP.NET MVC4中自帶了一個類HttpClient,用於接收HttpResponseMessage和發送HttpRequestMesssage。

問題在於既然WebClient,HttpWebRequest可以完成相應的功能,為什麼還要使用HttpClient類,.NET Framework中既然提出了這樣一個類肯定是有其特別之處的,這裡羅列幾個不同之處:

(1) 可以在HttpClient實例上配置擴展,設置預設的頭部,取消未完成的的請求和設置

(2) HttpClient有自己的連接池

(3) HttpClient 不與特定的伺服器綁定,可以訪問任何Http請求

(4) HttpClient採用非同步請求處理

 

 

2. HttpClient備註說明

HttpClient包含在System.net.Http.dll 程式集中,用戶接受和發送http請求,該類適用於.NET4.0以上版本。

預設情況下,HttpWebRequest 將用於向伺服器發送請求。此行為可指定一個不同的通道修改在獲取 HttpMessageHandler 實例的構造函數重載之一中作為參數。如果需要與身份驗證的功能或緩存,WebRequestHandler 可用於配置設置,而實例可傳遞給構造函數。返回的處理程式傳遞到採用 HttpMessageHandler 參數的構造函數重載之一
 更多說明可以參考微軟官方網站:

http://msdn.microsoft.com/zh-cn/library/system.net.http.httpclient.aspx

 

3. HttpClient基本操作

static  void BasicMethod()
{
             string url =  " http://www.baidu.com ";
            HttpClient client =  new HttpClient();
             string content = client.GetStringAsync(url).Result;
            Console.WriteLine(content);  

}

以上是使用HttpClient請求百度主頁,貌似操作起來也挺方便的,運行輸出請求得到的結果如下圖:

 

 控制台輸出的為請求URL的內容。

HttpClient除了上面提到的GetStringAsync()方法之外,還提供瞭如下Get方法,詳細可以參考MSDN:

 

 

4. 自定義請求頭

如果要自定義請求頭,我們需要繼承一個類:HttpClientHandler 

     public class GitHttpClientHandler:HttpClientHandler

    {
         protected  override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            request.Headers.Referrer =  new Uri( " http://www.google.com/ ");
            request.Headers.Add( " UserAgent "" Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727) ");
            
            Task<HttpResponseMessage> task =  base.SendAsync(request, cancellationToken);
            HttpResponseMessage response = task.Result;
            MediaTypeHeaderValue contentType = response.Content.Headers.ContentType;
             if ( string.IsNullOrEmpty(contentType.CharSet))
            {
                contentType.CharSet =  " GBK ";
            }
             return task;
        }
    }

 HttpClientHandler就是常見的代理模式,在HttpClient.GetStringAsync()加了一層封裝,攔截了HttpClient的輸入和輸出,從而實現一些自定義的操作,這種方式我們在MVC 中非常常見,就是MVC中的過濾器。

 

5. 請求內容過長

HttpClient有一個屬性MaxResponseContentBufferSize,它表示讀取相應內容是最大的位元組緩存數,預設值是64K,當頁面內容很多的時候,超過64K則會拋出異常HttpRequestException,導致Get失敗。

我們可以人工設置這個屬性的大小:

HttpClient client = new HttpClient() { MaxResponseContentBufferSize = 1024 * 1024 }; 

 使用如上方式處理即可。

 

6. 中文問題 

 中文問題總是令人頭疼,很多時候會出現亂碼。上面提到的自定義請求頭也可以處理,這裡貼出一段代碼作參考,中文問題有點複雜需要根據具體情況處理:

HttpResponseMessage response = task.Result;
MediaTypeHeaderValue contentType = response.Content.Headers.ContentType;
if( string.IsNullOrEmpty(contentType.CharSet))
{
   contentType.CharSet =  " GBK ";

 

7. 友情鏈接 

 ASP.NET MVC Web API 學習筆記---第一個Web API程式

ASP.NET MVC Web API 學習筆記---聯繫人增刪改查

ASP.NET MVC Web API 學習筆記----HttpClient簡介

 

 

參考頁面:http://qingqingquege.cnblogs.com/p/5933752.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • OSS最新進度,包括OSS.Social,OSS.Http,新增微信支付項目OSS.PayCenter。 ...
  • 簡介 RabbitMQ:一個消息系統,基於 AMQP 系統協議,由 erlang 語言開發。 優點:健壯、使用簡單、開源和支持各種流行的語言等。 MQ(Message Queue):消息隊列的簡稱,是一種應用程式之間的通信機制。 作用:將部分無需立即回調獲取結果,並且耗時的操作,使用非同步處理的方式提 ...
  • 在開發商城系統的時候,大家會遇到這樣的需求,商城系統里支持多種商品類型,比如衣服,手機,首飾等,每一種產品類型都有自己獨有的參數信息,比如衣服有顏色,首飾有材質等,大家可以上淘寶看一下就明白了。現在的問題是,如果我程式發佈後,要想增加一種新的商品類型怎麼辦,如果不在程式設計時考慮這個問題的話,可能每 ...
  • 1..NET Core基本介紹 a 作為一個.NET的開發者,在以前的開發中,我們開發的項目基本都是部署在windows伺服器上,但是在windows伺服器上的話某些比較流行的解決訪問量的方案基本都是先出現在linux上,而後才能遷移出現windows上,而且效率處理方面也不再一個級別。曾經讓.NE ...
  • 一. 場景介紹: 如題如何有效的,最少量的現有代碼侵入從而實現客戶端與伺服器之間的數據交換加密呢? 二. 探究: 1.需求分析 webapi服務端 有如下介面: public class ApiTestController : ApiController { // GET api/<controll ...
  • 1.瀏覽器和伺服器的交互原理 答案是套接字:Socket。至於Socket的具體用法和原理,篇幅問題不在此文中寫了,先預留位置在這,下次補上《基於多線程和套接字的簡易WebServer軟體-沒有控制項的ASP.NET》。 瀏覽器和伺服器軟體通過套接字來發送和接收對方的信息,但現在的關鍵問題是,他們發送 ...
  • 例子: 1.關鍵字 class ,這個關鍵字的用途是聲明類,是C#程式最小單元,比如上面例子中,類名叫做Program。 2.關鍵字 namespace ,這個關鍵字的用途是聲明“命名空間”。比如上面例子中,命名空間叫做MyApp1。 3.關鍵字 using ,這個關鍵字的用途是導入命名空間。比如這 ...
  • 今天沒事,就下了個vs2015 preview,前段時間園子裡面也在熱炒這些新的語法糖,這裡我們就來看看到底都會生成些什麼樣的IL? 一:自動初始化屬性 確實這個比之前的版本簡化了一下,不過你肯定很好奇,到底編譯器給我們做了哪些東西呢? 從這張圖中可以看到,在ctor中<Name>k__backin ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...