日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

c#进阶(6)—— 网络通信基础知识

發布時間:2023/12/10 C# 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c#进阶(6)—— 网络通信基础知识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、HttpClient 類

(1)、HttpClient 類 用于發送HTTP 請求,接收請求的響應。

(2)、HttpClient 類 派生于 HttpMessageInvoker類,此基類負責執行 SendAsync(),SendAsync() 方法調用是異步的,可以編寫一個完全異步的系統來調用Web服務。

2、實例

(1)、發出異步的Get 請求。

namespace InternetCommunicate {class Program{private const string baiduUrl = "http://www.baidu.com.cn";private const string googleUrl = "http://www.google.com";static void Main(string[] args){}/// <summary>/// 異步調用Get方法/// </summary>/// <returns></returns>public async Task GetDataSimpleAsync(){//實例化一個httpClient 對象,該對象是線程安全的,//client 對象可以處理多個請求,HttpClient 每個實例都維護自己的線程池,//HttpClient 實例之間的請求被隔離,調用Dispose方法釋放資源。using (var client = new HttpClient()){//調用 GetAsync(),給他傳遞要調用的方法地址,把HTTP GET 請求發送給服務器,//GetAsync() 返回一個 HttpResponseMessage對象,包含//(1)、標題//(2)、狀態//(3)、內容HttpResponseMessage response = await client.GetAsync(baiduUrl);//如果請求成功if(response.IsSuccessStatusCode){Console.WriteLine($"Response Status Code:{(int)response.StatusCode}" +$"{response.ReasonPhrase}");//通過ReadAsStringAsync方法,把返回的內容檢索為一個字符串。string responseBodyAsText = await response.Content.ReadAsStringAsync();Console.WriteLine($"Received payLoad of {responseBodyAsText.Length} characters");Console.WriteLine(responseBodyAsText);Console.ReadLine();}}}} }

?(3)、傳遞httpheader(標題)

發出請求時,沒有設置或改變任何標題,但HttpClient 的DefaultRequestHeaders 屬性允許設置或改變標題,使用Add 方法可以給集合添加標題,設置標題和標題值后,會與HttpClient 實例發送的每個請求一起發送。

在本示例中,添加以json作為格式的標題值。代碼如下:

/// <summary>/// 展示http 標題/// </summary>/// <param name="title"></param>/// <param name="httpHeaders"></param>public static void ShowHeaders(string title,HttpHeaders httpHeaders){foreach (var header in httpHeaders){string value = string.Join(" ", header.Value);Console.WriteLine($"Header:{header.Key} Value:{value}");}}/// <summary>/// 設置httpHeader 傳遞標題的信息/// </summary>/// <returns></returns>public async Task GetDataWithHeadersAsync(){try{using(var client = new HttpClient()){//添加作為json數據格式的標題值client.DefaultRequestHeaders.Add("Accept", "application/json;odata=verbose");//DefaultRequestHeaders 獲取與每個請求一起發送的值ShowHeaders("Request Headers:", client.DefaultRequestHeaders);//獲取http 響應頭的值HttpResponseMessage response = await client.GetAsync(googleUrl);ShowHeaders("Response Headers:", response.Headers);}}catch (Exception ex){throw ex;}}

(4)、用HttpMessageHandler自定義請求

創建一個派生于HttpClientHandler的類,重寫SendAsync()方法,該方法需要返回一個Task,對于錯誤的情況,不需要調用異步方法,只用Task.FromResult返回即可。

public class SampleMessageHandler:HttpClientHandler{private string _message;public SampleMessageHandler(string message){_message = message;}protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,CancellationToken cancellationToken){if(_message == "error"){var response = new HttpResponseMessage(HttpStatusCode.BadRequest);return Task.FromResult<HttpResponseMessage>(response); }return base.SendAsync(request, cancellationToken);}}/// <summary>/// 用HttpMessageHandler自定義請求/// </summary>/// <returns></returns>public static async Task GetDataWithMessageHandlerAsync(){//如果消息是error,把響應的狀態碼設置為bad requestvar client = new HttpClient(new SampleMessageHandler("error"));HttpResponseMessage responseMessage = await client.GetAsync(googleUrl);//etc}

(5)、使用SendAsync 創建HttpRequestMessage

使用SendAsync,可以對定義請求有更多的控制,重載HttpRequestMessage類的構造函數,傳遞HttpMethod的一個值,GetAsync方法用Get方式創建一個HTTP請求。

使用HttpMethod 不僅可以發送GET、POST、PUT和DELETE 請求,還可以發送HEAD、OPTIONS和Trace。

具體代碼如下:

/// <summary>/// 使用SendAsync 創建HttpRequestMessage/// </summary>/// <returns></returns>private async Task GetDataAdvanceAsync(){using(var client = new HttpClient()){var request = new HttpRequestMessage(HttpMethod.Get, googleUrl);HttpResponseMessage response = await client.SendAsync(request);}}

總結

以上是生活随笔為你收集整理的c#进阶(6)—— 网络通信基础知识的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。