Lập trình mạng với HttpClient trong C# – Phần 12
1. HttpClient trong C# là gì?
HttpClient là một lớp trong C# giúp thực hiện các yêu cầu HTTP như GET, POST, PUT, DELETE để giao tiếp với API hoặc tải dữ liệu từ internet.
📌 Ưu điểm của HttpClient:
✅ Dễ sử dụng, mạnh mẽ và hỗ trợ lập trình bất đồng bộ.
✅ Có thể gửi và nhận dữ liệu dưới dạng JSON, XML, text.
✅ Hỗ trợ cấu hình header, timeout, cookie,…
2. Cách sử dụng HttpClient để gửi yêu cầu GET
💡 Ví dụ: Lấy dữ liệu từ API công khai.
using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using HttpClient client = new HttpClient();
string url = "https://jsonplaceholder.typicode.com/posts/1"; // API giả lập
HttpResponseMessage response = await client.GetAsync(url);
if (response.IsSuccessStatusCode)
{
string data = await response.Content.ReadAsStringAsync();
Console.WriteLine($"✅ Dữ liệu nhận được: \n{data}");
}
else
{
Console.WriteLine($"❌ Lỗi: {response.StatusCode}");
}
}
}
⏳ Kết quả:
✅ Dữ liệu nhận được:
{
"userId": 1,
"id": 1,
"title": "Lorem Ipsum",
"body": "Nội dung bài viết..."
}
📌 Giải thích:
client.GetAsync(url): Gửi yêu cầu GET đến URL.response.Content.ReadAsStringAsync(): Đọc nội dung phản hồi dưới dạng chuỗi.
3. Gửi dữ liệu với yêu cầu POST
💡 Ví dụ: Gửi dữ liệu JSON đến API.
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using HttpClient client = new HttpClient();
string url = "https://jsonplaceholder.typicode.com/posts"; // API giả lập
string jsonData = "{ \"title\": \"Hello\", \"body\": \"Nội dung bài viết\", \"userId\": 1 }";
HttpContent content = new StringContent(jsonData, Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync(url, content);
string result = await response.Content.ReadAsStringAsync();
Console.WriteLine($"✅ Phản hồi từ server: \n{result}");
}
}
⏳ Kết quả:
✅ Phản hồi từ server:
{
"title": "Hello",
"body": "Nội dung bài viết",
"userId": 1,
"id": 101
}
📌 Giải thích:
PostAsync(url, content): Gửi dữ liệu JSON đến API.StringContent(jsonData, Encoding.UTF8, "application/json"): Định dạng dữ liệu gửi đi.
4. Gửi yêu cầu PUT để cập nhật dữ liệu
💡 Ví dụ: Cập nhật bài viết có ID = 1.
static async Task UpdatePostAsync()
{
using HttpClient client = new HttpClient();
string url = "https://jsonplaceholder.typicode.com/posts/1";
string jsonData = "{ \"id\": 1, \"title\": \"Cập nhật\", \"body\": \"Nội dung mới\", \"userId\": 1 }";
HttpContent content = new StringContent(jsonData, Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PutAsync(url, content);
string result = await response.Content.ReadAsStringAsync();
Console.WriteLine($"✅ Phản hồi từ server: \n{result}");
}
📌 Lưu ý:
PutAsync(url, content): Cập nhật dữ liệu.- API giả lập sẽ không thực sự thay đổi dữ liệu, nhưng ta có thể thấy phản hồi JSON.
5. Gửi yêu cầu DELETE để xóa dữ liệu
💡 Ví dụ: Xóa bài viết có ID = 1.
static async Task DeletePostAsync()
{
using HttpClient client = new HttpClient();
string url = "https://jsonplaceholder.typicode.com/posts/1";
HttpResponseMessage response = await client.DeleteAsync(url);
if (response.IsSuccessStatusCode)
{
Console.WriteLine("✅ Xóa thành công!");
}
else
{
Console.WriteLine($"❌ Lỗi: {response.StatusCode}");
}
}
📌 Lưu ý:
DeleteAsync(url): Gửi yêu cầu DELETE.
6. Cấu hình HttpClient (Timeout, Headers,…)
Bạn có thể cấu hình HttpClient để kiểm soát yêu cầu.
using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using HttpClient client = new HttpClient
{
Timeout = TimeSpan.FromSeconds(10) // Thiết lập timeout 10 giây
};
client.DefaultRequestHeaders.Add("User-Agent", "CSharp-HttpClient"); // Thêm header
string url = "https://jsonplaceholder.typicode.com/posts/1";
HttpResponseMessage response = await client.GetAsync(url);
string data = await response.Content.ReadAsStringAsync();
Console.WriteLine($"✅ Kết quả: \n{data}");
}
}
📌 Tính năng hữu ích:
Timeout: Giới hạn thời gian chờ phản hồi.DefaultRequestHeaders.Add(): Thêm headers tùy chỉnh.
7. Sử dụng HttpClientFactory (tốt hơn cho ứng dụng lớn)
Trong ứng dụng lớn, không nên tạo new HttpClient() mỗi lần vì có thể gây rò rỉ kết nối. Thay vào đó, dùng HttpClientFactory.
using System;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
class Program
{
static async Task Main()
{
var services = new ServiceCollection();
services.AddHttpClient();
var provider = services.BuildServiceProvider();
var clientFactory = provider.GetRequiredService<IHttpClientFactory>();
HttpClient client = clientFactory.CreateClient();
string url = "https://jsonplaceholder.typicode.com/posts/1";
string data = await client.GetStringAsync(url);
Console.WriteLine($"✅ Dữ liệu nhận được: \n{data}");
}
}
📌 Lợi ích của HttpClientFactory:
✅ Tái sử dụng HttpClient → Giảm tải kết nối mạng.
✅ Dễ dàng quản lý HttpClient với Dependency Injection.
8. Tóm tắt bài học
✅ HttpClient giúp gửi/nhận dữ liệu qua HTTP trong C#.
✅ GET, POST, PUT, DELETE là các phương thức phổ biến khi làm việc với API.
✅ Có thể cấu hình HttpClient để kiểm soát timeout, headers,…
✅ Nên dùng HttpClientFactory trong ứng dụng lớn để tối ưu hiệu suất.
💡 Bài tiếp theo:
👉 Gửi email với SMTP trong C# – Phần 13 🚀