परिचय: C# में सही HTTP-क्लाइंट क्यों महत्वपूर्ण है
C# (.NET) में आधुनिक विकास में, HTTP-अनुरोधों के साथ काम करना एक बुनियादी आवश्यकता है। चाहे वह REST API तक पहुँचना हो, वेब सर्वर से डेटा डाउनलोड करना हो, या क्लाउड सेवाओं के साथ एकीकरण करना हो - एक विश्वसनीय HTTP-क्लाइंट के बिना काम नहीं चल सकता। हालाँकि, कई डेवलपर्स, विशेष रूप से शुरुआती, सामान्य गलतियाँ करते हैं: कनेक्शन का गलत प्रबंधन, टाइमआउट को अनदेखा करना, या प्रतिक्रियाओं का अकुशल प्रसंस्करण। इस लेख में, हम C# में HTTP-क्लाइंट बनाने को बुनियादी से लेकर उन्नत तकनीकों तक समझेंगे।
हम HttpClient क्लास पर चर्चा करेंगे - .NET में HTTP के साथ काम करने का मुख्य उपकरण, साथ ही वैकल्पिक दृष्टिकोण भी। आप सीखेंगे कि GET और POST अनुरोधों को सही तरीके से कैसे भेजें, JSON को कैसे संभालें, हेडर को कैसे प्रबंधित करें और प्रदर्शन की सामान्य समस्याओं से कैसे बचें।
मूल बातें: HttpClient बनाना और कॉन्फ़िगर करना
HttpClient का सही आरंभीकरण
HttpClient क्लास को पुन: उपयोग के लिए डिज़ाइन किया गया है। प्रत्येक अनुरोध के लिए एक नया इंस्टेंस बनाना एक एंटी-पैटर्न है जो सॉकेट की कमी का कारण बन सकता है। इसके बजाय, पूरे एप्लिकेशन के लिए एक इंस्टेंस या IHttpClientFactory के माध्यम से डिपेंडेंसी इंजेक्शन (DI) का उपयोग करें।
// गलत: प्रत्येक अनुरोध पर नया बनानाpublic async Task<string> BadRequest(string url){ using (var client = new HttpClient()) { return await client.GetStringAsync(url); }}
// सही: स्थैतिक इंस्टेंसpublic static readonly HttpClient SharedClient = new HttpClient();
// या IHttpClientFactory के माध्यम से (ASP.NET Core के लिए अनुशंसित)services.AddHttpClient("MyClient", client =>{ client.BaseAddress = new Uri("https://api.example.com"); client.DefaultRequestHeaders.Add("Accept", "application/json");});टाइमआउट और बेस एड्रेस सेट करना
टाइमआउट सर्वर के अनुपलब्ध होने पर एप्लिकेशन को हैंग होने से बचाते हैं। HttpClient का अपना टाइमआउट होता है, लेकिन इसे ओवरराइड किया जा सकता है।
HttpClient client = new HttpClient{ BaseAddress = new Uri("https://jsonplaceholder.typicode.com"), Timeout = TimeSpan.FromSeconds(10) // पूरे अनुरोध के लिए 10 सेकंड};प्राप्त डेटा के आकार को सीमित करने के लिए MaxResponseContentBufferSize सेट करना भी उपयोगी है।
अनुरोध भेजना: GET, POST, PUT और DELETE
GET-अनुरोध: डेटा प्राप्त करना
डेटा प्राप्त करने का सबसे सरल तरीका GetStringAsync या मैन्युअल प्रोसेसिंग के साथ GetAsync है।
public async Task<string> GetUsersAsync(){ HttpResponseMessage response = await SharedClient.GetAsync("/users"); response.EnsureSuccessStatusCode(); // त्रुटि होने पर अपवाद फेंकता है return await response.Content.ReadAsStringAsync();}
// या और भी सरल:string json = await SharedClient.GetStringAsync("/users");POST-अनुरोध: डेटा भेजना
JSON भेजने के लिए PostAsJsonAsync का उपयोग करें (पैकेज System.Net.Http.Json आवश्यक है)।
var newUser = new { name = "इवान", email = "ivan@example.com" };HttpResponseMessage response = await SharedClient.PostAsJsonAsync("/users", newUser);if (response.IsSuccessStatusCode){ var createdUser = await response.Content.ReadFromJsonAsync<User>();}फॉर्म भेजने के लिए FormUrlEncodedContent का उपयोग करें।
var formData = new Dictionary<string, string>{ { "username", "admin" }, { "password", "secret" }};var content = new FormUrlEncodedContent(formData);HttpResponseMessage response = await SharedClient.PostAsync("/login", content);PUT और DELETE अनुरोध
अपडेट और डिलीट समान रूप से किए जाते हैं:
// PUTvar updateData = new { id = 1, name = "अपडेट किया गया नाम" };HttpResponseMessage putR