logo

  • Hỏi Đáp
  • Kiến Thức
  • Sức Khỏe
  • Tử Vi
  • Công Nghệ
No Result
View All Result
logo
No Result
View All Result
Trang chủ thiết kế restful api + gọi api bằng httpclient trong asp

THIẾT KẾ RESTFUL API + GỌI API BẰNG HTTPCLIENT TRONG ASP

by Admin _ May 19, 2022

Sử dụng lớp HttpClient để triển khai các truy vấn HTTP, thực hiện phương thức GET và POST với cách tiến hành SendAsync, tùy chỉnh các loại content trong HTTP Request như FormUrlEncodedContent, StringContent, MultipartFormDataContent


Giới thiệu HttpClient

Lớp HttpClient được áp dụng để gởi truy vấn HTTP (Http Request Message - Request) với nhận ý kiến Response (Http Response Message) từ những truy vấn đó. Lớp này nằm trong namespace System.Net.Http, namespace này chứa những lớp giúp tạo ra sự liên lạc thân client cùng server. Để làm việc với HttpClient dùng các namespace sau:

using System;using System.Linq;using System.Net;using System.Net.Http;using System.Net.Http.Headers;using System.Threading;using System.Threading.Tasks;using System.IO;using System.Text; Phần này thực hiện thao tác với giao thức HTTP đề nghị trước tiên cần nắm rõ về giao thức này, hãy tham khảo kỹ phần Giao thức HTTP và add Uri, Url ở phần kết cấu Uri, Url, Lớp Uri vào C#


Tạo tầm nã vấn GET bất đồng điệu với HttpClient

Để tạo ra truy vấn GET cho tới một add URL, tiến hành phương thức GetAsync(url), đấy là phương thức async khi hoàn thành nó trả về đối tượng HttpResponseMessage. Từ đối tượng người sử dụng này ta đã biết hiệu quả truy vấn, và ta rất có thể đọc được tài liệu tải về.

Bạn đang xem: Thiết kế restful api + gọi api bằng httpclient trong asp

// Khởi tạo http clientusing var httpClient = new HttpClient();// tùy chỉnh cấu hình các Header trường hợp cầnhttpClient.DefaultRequestHeaders.Add("Accept", "text/html,application/xhtml+xml+json");// triển khai truy vấn GETHttpResponseMessage response = await httpClient.GetAsync(url); khi có đối tượng lớp HttpResponseMessage có thể thực hiện những tác vụ gọi dữ liệu, tham khảo một số thuộc tính cùng phương thức:

một trong những phương thức, ở trong tính lớp HttpResponseMessage HttpResponseHeaders
EnsureSuccessStatusCode() Phát sinh Exception giả dụ truy vấn có mã trả về không thành công xuất sắc (khi ở trong tính IsSuccessStatusCode là false)
IsSuccessStatusCode Nhận true lúc mã trả về thành công, ví dụ mã tinh thần StatusCode nhận quý hiếm 200
StatusCode Thuộc tính tất cả kiểu enum HttpStatusCode cho biết thêm mã tinh thần của tác dụng (Như 301 - MovedPermanently, 200 - OK, 404 - NotFound ...), để đưa sang số nguyên (int)HttpStatusCode
ReasonPhrase Đoạn text, mô tả thông tin cho mã trạng thái như OK, MovedPermanently ...
Headers

Ví dụ kiến tạo phương thực để hiện thị toàn bộ các header

/// In ra thông tin các Header của HTTP Responsepublic static void ShowHeaders(HttpHeaders headers) Console.WriteLine("CÁC HEADER:"); foreach (var header in headers) foreach (var value in header.Value) Console.WriteLine($"header.Key,25 : value"); Console.WriteLine();
Ngoài ra nó còn tồn tại một số nằm trong tính là các header thịnh hành HTTP Respone như Age, Etag, hệ thống ... Mà nó đã phân tích những chuỗi header trả về thành các đối tượng người tiêu dùng tương ứng như TimeSpan, EntityTagHeaderValue, HttpHeaderValueCollection ... Xem cụ thể các ở trong tính này tại những header response

Content Thuộc tính đẳng cấp HttpContent, trong các số đó chứa văn bản (content) và những header tương quan đến nội dung nếu gồm (Headers như Content-Type, Content-Length ...), một vài phương thức để lấy content: ReadAsStringAsync đọc ngôn từ (content) HTTP trả về chuỗi (có encoding). Đối với cách tiến hành này, một vài server trả về mã CharSet nhưng .NET vi xử lý core không phân biệt sẽ khiến lỗi, để encoding được mang đến trường phù hợp này thì trước lúc thi hành tùy chỉnh cấu hình cho nó:

Content.Headers.ContentType.CharSet =
"utf-8"; //ISO-8859-1 ReadAsByteArrayAsync hiểu trả về mảng byte, trường đoản cú mảng byte này có thể lưu nó ra file. Hoặc encoding nó thành chuỗi, lấy ví dụ encoding utf-8 string nội dung = System.Text.Encoding.UTF8.GetString(byteArray);

Ví dụ, chế tác truy vấn GET, mua về trang web - hiện thị các header cùng trả về content kết quả

/// In ra thông tin các Header của HTTP Responsepublic static void ShowHeaders(HttpHeaders headers) Console.WriteLine("CÁC HEADER:"); foreach (var header in headers) foreach (var value in header.Value) Console.WriteLine($"header.Key,25 : value"); Console.WriteLine(); // thiết lập về trang web và trả về chuỗi nội dungpublic static async Task GetWebContent(string url) // Khởi sản xuất http client using var httpClient = new HttpClient(); // tùy chỉnh các Header nếu cần httpClient.DefaultRequestHeaders.Add("Accept", "text/html,application/xhtml+xml+json"); try // tiến hành truy vấn GET HttpResponseMessage response = await httpClient.GetAsync(url); // hiện nay thị tin tức header trả về ShowHeaders(response.Headers); // tạo nên Exception ví như mã trạng thái trả về là lỗi response.EnsureSuccessStatusCode(); Console.WriteLine($"Tải thành công xuất sắc - statusCode (int)response.StatusCode response.ReasonPhrase"); Console.WriteLine("Starting read data"); // Đọc nội dung nội dung trả về - ĐỌC CHUỖI NỘI DUNG string htmltext = await response.Content.ReadAsStringAsync(); Console.WriteLine($"Nhận được htmltext.Length ký kết tự"); Console.WriteLine(); return htmltext; catch (Exception ex) Console.WriteLine(ex.Message); return null; Khi sử dụng, như trong cách làm Main (chú ý gửi sang sự không tương đồng bộ)

static async Task Main(string<> args) var c = await GetWebContent("https://www.google.com/search?q=darkedeneurope.com"); Console.WriteLine(c);

*
Mã nguồn xem thêm tại HttpClientExample hoặc download về tại ex029-httpclient

ReadAsStreamAsync và ReadAsByteArrayAsync gọi nội dung

Ở lấy ví dụ như trên, đã dùng ReadAsStringAsync để đọc content convert thành chuỗi (string). Quanh đó ra, cũng có thể sử dụng ReadAsStreamAsync để chế tạo ra stream nhằm đọc kết quả và thực hiện ReadAsByteArrayAsync nhằm đọc hết những byte (mảng các byte) trong content.

Xem thêm: Sự Khác Biệt Giữa Não Phải Não Trái Và Phải, 2 Bán Cầu Não

Ví dụ sử dụng ReadAsByteArrayAsync

Xây dựng cách thức đọc tài nguyên xuất phát từ một url cùng trả về mảng byte là content

var url = "https://raw.githubusercontent.com/darkedeneurope.comnet/jekyll-example/master/images/jekyll-01.png";byte<> bytes = await DownloadDataBytes(url);string filepath = "anh1.png";using (var stream = new FileStream (filepath, FileMode.Create, FileAccess.Write, FileShare.None)) stream.Write (bytes, 0, bytes.Length); Console.WriteLine("save " + filepath);Khi sủ dụng, rất có thể lưu tổng thể dữ liệu mảng byte ra file. Ví dụ mua một file ảnh về:

static async Task Main(string<> args) var url = "https://raw.githubusercontent.com/darkedeneurope.comnet/jekyll-example/master/images/jekyll-01.png"; byte<> bytes = await DownloadDataBytes(url); string filepath = "anh1.png"; using (var stream = new FileStream (filepath, FileMode.Create, FileAccess.Write, FileShare.None)) stream.Write (bytes, 0, bytes.Length); Console.WriteLine("save " + filepath);

Ví dụ sử dụng DownloadDataStream

DownloadDataStream trả về một Stream nhằm đọc Content, lấy ví dụ xây dựng cách làm tải một tệp tin ảnhtừ url mang đến trước.

// sở hữu từ url, trả về stream nhằm đọc dữ liệu (xem bài xích về stream)public static async Task DownloadDataStream (string url, string filename) var httpClient = new HttpClient(); Console.WriteLine ($"Starting connect url"); try HttpResponseMessage response = await httpClient.GetAsync (url); response.EnsureSuccessStatusCode (); // mang Stream nhằm đọc content using var stream = await response.Content.ReadAsStreamAsync(); // THỰC HIỆN ĐỌC nội dung int SIZEBUFFER = 500; using var streamwrite = File.OpenWrite (filename); // Mở stream để lưu file byte<> buffer = new byte; // tạo bộ nhớ lưu trữ đệm lưu dữ liệu khi gọi stream bool endread = false; vị // tiến hành đọc những byte từ bỏ stream với lưu ra streamwrite int numberRead = await stream.ReadAsync(buffer, 0, SIZEBUFFER); Console.WriteLine(numberRead); if (numberRead == 0) endread = true; else await streamwrite.WriteAsync(buffer, 0, numberRead); while (!endread); Console.WriteLine ("Download success"); catch (Exception e) Console.WriteLine (e.Message); throw e; Khi áp dụng

static async Task Main(string<> args) var url = "https://raw.githubusercontent.com/darkedeneurope.comnet/linux-centos/master/docs/samba1.png"; await DownloadDataStream(url, "anh2.png"); xem thêm mã mối cung cấp HttpClientExampleRead (git) hoặc cài đặt về ex029-2

Tạo request với SendAsync

Ngoài cách làm GetAsync giữ hộ Request với cách tiến hành GET ngơi nghỉ trên ra, có thể dùng cách làm SendAsync (hoặc Send nếu sử dụng code đồng hóa synchronous).

var httpRequestMessage = new HttpRequestMessage();httpRequestMessage.Method = HttpMethod.Post;httpRequestMessage.RequestUri = new Uri("https://darkedeneurope.com");/... Sau khoản thời gian tạo được HttpRequestMessage gồm thể tùy chỉnh thiết lập nhiều thông tin như, tùy chỉnh thiết lập method với thuộc tính Method (giá trị GET, POST, DELETE ...), thiết lập add truy vấn với thuộc tính RequestUri, thiết lập cấu hình Content của tầm nã vấn với content ...

Sau đó hoàn toàn có thể thực hiện tại truy vấn để trả về HttpResponseMessage

var response = await httpClient.SendAsync(request);

Sử dụng FormUrlEncodedContent

Để tùy chỉnh cấu hình Content trong HttpRequestMessage nhằm gửi cho server thì cấu hình thiết lập thuộc tínhContent bằng các đối tượng thuộc những lớp như: FormUrlEncodedContent,StringContent,

Với FormUrlEncodedContent chúng ta có thể tạo nội dung tương ứng như một size HTML,nó chứa những giá trị (key/value) vẫn Post đến Server. Lấy một ví dụ sau, nó post cho server hai giá bán trịtương ứng key với value là key1/value1 (có thể hiểu tương ứng với bộ phận HTML Input có name là key1 với value là value1) với key2/value2 (trường hòa hợp này chứa nhiều giá trị, khớp ứng với HTML Multi Select)

static async Task Main(string<> args) var httpClient = new HttpClient(); var httpRequestMessage = new HttpRequestMessage(); httpRequestMessage.Method = HttpMethod.Post; httpRequestMessage.RequestUri = new Uri("https://postman-echo.com/post"); var parameters = new List>(); parameters.Add(new KeyValuePair("key1","value1")); parameters.Add(new KeyValuePair("key2","value2-1")); parameters.Add(new KeyValuePair("key2","value2-2")); // thiết lập cấu hình Content var nội dung = new FormUrlEncodedContent(parameters); httpRequestMessage.Content = content; // thực hiện Post var response = await httpClient.SendAsync(httpRequestMessage); var responseContent = await response.Content.ReadAsStringAsync(); Console.WriteLine(responseContent);// khi chạy hiệu quả trả về cho biết thêm Server đã nhận được dữ liệu Post đến

Sử dụng StringContent

rất có thể gán nội dung bằng đối tượng người dùng kiểu StringContent đựng chuỗi câu chữ (sử dụng bí quyết này để tạo thành truy vấn Webservice API với content là JSON)

static async Task Main(string<> args) var httpClient = new HttpClient(); var httpRequestMessage = new HttpRequestMessage(); httpRequestMessage.Method = HttpMethod.Post; httpRequestMessage.RequestUri = new Uri("https://postman-echo.com/post"); // tạo ra StringContent string jsoncontent = ""value1": "giatri1", "value2": "giatri2""; var httpContent = new StringContent(jsoncontent, Encoding.UTF8, "application/json"); httpRequestMessage.Content = httpContent; var response = await httpClient.SendAsync(httpRequestMessage); var responseContent = await response.Content.ReadAsStringAsync(); Console.WriteLine(responseContent);

Sử dụng MultipartFormDataContent

chúng ta cũng có thể gán nội dung bằng đối tượng người dùng kiểu MultipartFormDataContent, nhằm post tài liệu nhiều thành phần (multipart/form-data), vừa có tài liệu như các phần tử của HTML size vừa hoàn toàn có thể kèm file.

Ví dụ, tạo thành truy vấn tương tự như form HTML post những dữ liệu: tất cả file đính thêm kèm, có hai phần tử

var httpClient = new HttpClient();var httpRequestMessage = new HttpRequestMessage();httpRequestMessage.Method = HttpMethod.Post;httpRequestMessage.RequestUri = new Uri("https://postman-echo.com/post");// Tạo đối tượng người sử dụng MultipartFormDataContentvar content = new MultipartFormDataContent();// chế tạo ra StreamContent đựng nội dung file upload, kế tiếp đưa vào contentStream fileStream = System.IO.File.OpenRead("Program.cs");content.Add(new StreamContent(fileStream), "fileupload", "abc.xyz");// phân phối MultipartFormDataContent một StringContentcontent.Add(new StringContent("value1"), "key1");// Thêm phần tử chứa mạng quý giá (HTML Multi Select)content.Add(new StringContent("value2-1"), "key2<>");content.Add(new StringContent("value2-2"), "key2<>");httpRequestMessage.Content = content;var response = await httpClient.SendAsync(httpRequestMessage);var responseContent = await response.Content.ReadAsStringAsync();Console.WriteLine(responseContent); xem thêm mã mối cung cấp HttpClientExampleSendAsync (git) hoặc sở hữu về ex031

Share Tweet Linkedin Pinterest
Previous Post

Vans customer service

Next Post

Tạo menu ngang dùng thẻ li

CÙNG CHUYÊN MỤC

cách lấy code html facebook

Cách lấy code html facebook

26/03/2021
căn chỉnh form trong html

Căn chỉnh form trong html

28/04/2021
code html trang cá nhân

Code html trang cá nhân

29/04/2021
form đăng ký html css

Form đăng ký html css

28/04/2021
frameborder trong html là gì

Frameborder trong html là gì

01/07/2022
khoảng cách dòng trong html

Khoảng cách dòng trong html

30/06/2022
inspect and edit html live for android

Inspect and edit html live for android

21/06/2022
admin panel templates free download

Admin panel templates free download

20/06/2022

Newsletter

The most important automotive news and events of the day

We won't spam you. Pinky swear.

Chuyên Mục

  • Hỏi Đáp
  • Kiến Thức
  • Sức Khỏe
  • Tử Vi
  • Công Nghệ

News Post

  • Phần mềm xiaomi pc

About

Chúng tôi tạo ra trang web nhằm mục đích mang lại kiến thức bổ ích cho cộng đồng, các bài viết được sưu tầm từ nhiều nguồn trên internet giúp mang lại kiến thức khách quan dành cho bạn

©2022 darkedeneurope.com - Website WordPress vì mục đích cộng đồng

Liên Hệ - Giới Thiệu - Nội Quy - Bảo Mật

No Result
View All Result
  • Trang chủ
  • Chuyên mục
    • Hỏi Đáp
    • Kiến Thức
    • Sức Khỏe
    • Tử Vi
    • Công Nghệ
  • Lưu trữ
  • Liên hệ

© 2022 darkedeneurope.com - Website WordPress vì mục đích cộng đồng.