HttpClient क्लास URL से HTTP रिक्वेस्ट/रिस्पॉन्स भेजने/प्राप्त करने के लिए एक बेस क्लास प्रदान करती है। यह .NET फ्रेमवर्क का एक समर्थित Async फीचर है। HttpClient मल्टीपल कॉन्करेंट रिक्वेस्ट्स प्रोसेस करने में सक्षम है। यह HttpWebRequest और HttpWebResponse के ऊपर एक लेयर है। HttpClient के सभी मेथड्स असिंक्रोनस हैं। HttpClient System.Net.Http नेमस्पेस में उपलब्ध है।
WebAPI एप्लिकेशन सेटअप (सर्वर-साइड)
Student मॉडल
namespace DemoWebApplication.Models
{
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
}
}
Student कंट्रोलर
using DemoWebApplication.Models;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
namespace DemoWebApplication.Controllers
{
public class StudentController : ApiController
{
List students = new List
{
new Student { Id = 1, Name = "Mark" },
new Student { Id = 2, Name = "John" }
};
public IEnumerable Get()
{
return students;
}
public Student Get(int id)
{
return students.FirstOrDefault(x => x.Id == id);
}
}
}
कंसोल एप्लिकेशन से कंज्यूम करना (क्लाइंट-साइड)
using System;
using System.Net.Http;
using System.Threading.Tasks;
namespace DemoApplication
{
public class Program
{
static async Task Main(string[] args)
{
using (var httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri("https://localhost:58174/api/");
httpClient.DefaultRequestHeaders.Accept.Add(
new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
Console.WriteLine("WebAPI से सभी छात्र प्राप्त कर रहे हैं...");
var allStudents = await GetResponseAsync(httpClient, "student");
Console.WriteLine($"सभी छात्र: {allStudents}");
Console.WriteLine("ID 2 के लिए छात्र प्राप्त कर रहे हैं...");
var studentForId = await GetResponseAsync(httpClient, "student/2");
Console.WriteLine($"ID 2 के लिए छात्र: {studentForId}");
Console.ReadLine();
}
}
private static async Task GetResponseAsync(HttpClient client, string url)
{
var response = await client.GetAsync(url);
response.EnsureSuccessStatusCode(); // एरर स्टेटस पर एक्सेप्शन फेंकता है
return await response.Content.ReadAsStringAsync();
}
}
}
आउटपुट
WebAPI से सभी छात्र प्राप्त कर रहे हैं...
सभी छात्र: [{"Id":1,"Name":"Mark"},{"Id":2,"Name":"John"}]
ID 2 के लिए छात्र प्राप्त कर रहे हैं...
ID 2 के लिए छात्र: {"Id":2,"Name":"John"}
HttpClient सर्वोत्तम अभ्यास
❌ गलत: हर रिक्वेस्ट के लिए नया HttpClient बनाना
// खराब - सॉकेट थकावट का कारण बनता है
using (var client = new HttpClient()) { ... }
using (var client = new HttpClient()) { ... }
✅ सही: HttpClient रीयूज करें (सिंगलटन/स्टैटिक)
// अच्छा - HttpClient को रीयूज करने के लिए डिज़ाइन किया गया है
private static readonly HttpClient _httpClient = new HttpClient();
// या .NET Core 2.1+ में IHttpClientFactory के साथ
services.AddHttpClient("MyApi", client =>
{
client.BaseAddress = new Uri("https://api.example.com/");
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
});
टाइप्ड क्लाइंट पैटर्न (अनुशंसित)
// 1. क्लाइंट इंटरफेस/क्लास परिभाषित करें
public interface IStudentApiClient
{
Task> GetAllAsync();
Task GetByIdAsync(int id);
Task CreateAsync(Student student);
Task UpdateAsync(int id, Student student);
Task DeleteAsync(int id);
}
public class StudentApiClient : IStudentApiClient
{
private readonly HttpClient _httpClient;
public StudentApiClient(HttpClient httpClient)
{
_httpClient = httpClient;
}
public async Task> GetAllAsync()
{
var response = await _httpClient.GetAsync("student");
response.EnsureSuccessStatusCode();
return await response.Content.ReadFromJsonAsync>();
}
public async Task GetByIdAsync(int id)
{
var response = await _httpClient.GetAsync($"student/{id}");
if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
return null;
response.EnsureSuccessStatusCode();
return await response.Content.ReadFromJsonAsync();
}
public async Task CreateAsync(Student student)
{
var response = await _httpClient.PostAsJsonAsync("student", student);
response.EnsureSuccessStatusCode();
return await response.Content.ReadFromJsonAsync();
}
// ... अन्य मेथड्स
}
// 2. Startup/Program.cs में रजिस्टर करें
builder.Services.AddHttpClient(client =>
{
client.BaseAddress = new Uri("https://localhost:58174/api/");
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
});
// 3. उपयोग करें (DI के माध्यम से)
public class StudentService
{
private readonly IStudentApiClient _apiClient;
public StudentService(IStudentApiClient apiClient)
{
_apiClient = apiClient;
}
public async Task ProcessStudents()
{
var students = await _apiClient.GetAllAsync();
// ...
}
}
एरर हैंडलिंग और रीट्राई पॉलिसी (Polly के साथ)
builder.Services.AddHttpClient()
.AddTransientHttpErrorPolicy(p => p.WaitAndRetryAsync(
3, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt))))
.AddTransientHttpErrorPolicy(p => p.CircuitBreakerAsync(
5, TimeSpan.FromSeconds(30)));
आम HTTP मेथड्स
| मेथड | HttpClient मेथड | उपयोग |
|---|---|---|
| GET | GetAsync, GetFromJsonAsync | डेटा प्राप्त करें |
| POST | PostAsJsonAsync, PostAsync | नया रिसोर्स बनाएं |
| PUT | PutAsJsonAsync, PutAsync | पूरा रिसोर्स अपडेट करें |
| PATCH | PatchAsJsonAsync | आंशिक अपडेट |
| DELETE | DeleteAsync | रिसोर्स हटाएं |
नोट: .NET 5+ में ReadFromJsonAsync, PostAsJsonAsync आदि एक्सटेंशन मेथड्स System.Net.Http.Json नेमस्पेस में उपलब्ध हैं।