c# 的網絡請求相關類

c# 的請求類主要包括 HttpWebRequest;WebClient;HttpClient,RestSharp,其中 RestSharp是社區的網絡請求方案,這裏主要是討論各自的特定

HttpWebRequest

這個類是 .net 比較早 出的網絡請求類,可以自己控制 超時時間,cookie等比較常用的,對http協議進行了完整的封裝,對協議中的header,content等做了屬性或者方法的支持
優點:功能強大,支持的.net版本最多 缺點:使用麻煩,需要自己設置各種配置,被官方拋棄了 2333

代碼

			HttpWebRequest requst = (HttpWebRequest)WebRequest.Create("https://www.baidu.com");
            requst.Headers.Add("xxx");
            requst.Headers.Add("xxx");
            requst.CookieContainer.Add(new Cookie("xx","xxx"));
            requst.Timeout = 30000;
            var response = requst.GetResponse();

WebClient

這個類是一種更高几倍的抽象,也就是對httpWebRequest的進一步封裝,簡化了一些步驟
優點:使用簡單,下載文件使用方便,相對而已支持net版本也比較多 缺點:功能上有些缺失,沒有timeout等的設置,官方不更新功能,只做些修復

	   	 	using (var webClinet = new WebClient())
            {
                webClinet.DownloadFile("address_xxx..","fileName_xxx");
            }

HttpClient

這個是比較後面出的請求類,支持異步模型編程,更適合現代的網絡編程,官方主推這個,功能強大,支持單個實例發送請求,連接重複利用,佔用資源少。
優點:異步編程模型適合現代的網絡請求 缺點:請求速度上還是稍慢,越上層的封裝,越是有些損耗,但是總體問題不大,支持的net版本相對比較少,後面主要是net core方向的支持

 			using (var client = new HttpClient())
            {
                var data = client.GetStringAsync("xxxx").Result;
            }

RestSharp

這個社區的貢獻,功能也是比較強大 適合rest 風格的編程,api請求友好,以下是官方的 請求案例

優點:適合api的請求風格,非常的靈活,不依賴第三方,支持net版本多 缺點:使用上還是相對比較麻煩,非微軟官方維護,依賴社區,遇到問題可能沒有相關的文檔查詢

var client = new RestClient("http://example.com");
// client.Authenticator = new HttpBasicAuthenticator(username, password);

var request = new RestRequest("resource/{id}", Method.POST);
request.AddParameter("name", "value"); // adds to POST or URL querystring based on Method
request.AddUrlSegment("id", "123"); // replaces matching token in request.Resource

// easily add HTTP Headers
request.AddHeader("header", "value");

// add files to upload (works with compatible verbs)
request.AddFile(path);

// execute the request
IRestResponse response = client.Execute(request);
var content = response.Content; // raw content as string

// or automatically deserialize result
// return content type is sniffed but can be explicitly set via RestClient.AddHandler();
RestResponse<Person> response2 = client.Execute<Person>(request);
var name = response2.Data.Name;

// easy async support
client.ExecuteAsync(request, response => {
    Console.WriteLine(response.Content);
});

// async with deserialization
var asyncHandle = client.ExecuteAsync<Person>(request, response => {
    Console.WriteLine(response.Data.Name);
});

// abort the request on demand
asyncHandle.Abort();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章