.NET में C# पर HTTP POST अनुरोध कैसे भेजें: सरल से जटिल तक
\n\nकल्पना करें कि आपका C# एप्लिकेशन एक कूरियर है, जिसे एक निश्चित पते (URL) पर एक पार्सल (डेटा) पहुंचाना है और पुष्टि (प्रतिक्रिया) प्राप्त करनी है। HTTP POST अनुरोध बिल्कुल इसी कार्य को हल करता है। Stack Overflow पर यह प्रश्न हजारों बार देखा जाता है, और यह कोई आश्चर्य की बात नहीं है: बाहरी API के साथ काम करना, फॉर्म भेजना, सर्वर पर डेटा अपलोड करना - यह किसी भी .NET डेवलपर की दैनिक दिनचर्या है।
\n\nइस लेख में, हम .NET (C#) में POST अनुरोध भेजने के तीन मुख्य तरीकों पर चर्चा करेंगे, आधुनिक HttpClient से शुरू करके पुराने WebRequest तक। आप सीखेंगे कि JSON, URL-एन्कोडेड डेटा कैसे भेजें, त्रुटियों को कैसे संभालें और उन जालों से कैसे बचें जो शुरुआती लोगों के लिए होते हैं। चलिए शुरू करते हैं!
1. आधुनिक दृष्टिकोण: HttpClient (अनुशंसित)
\n\n.NET Framework 4.5 से शुरू होकर और .NET Core / .NET 5+ के सभी संस्करणों में, HttpClient क्लास डी-फैक्टो मानक है। इसे एसिंक्रोनस कार्य के लिए डिज़ाइन किया गया है, यह कनेक्शन के पुन: उपयोग का समर्थन करता है और आसानी से कॉन्फ़िगर किया जा सकता है।
1.1. JSON के साथ सरल POST (सबसे सामान्य परिदृश्य)
\n\nमान लीजिए कि हमें सर्वर पर उपयोगकर्ता डेटा JSON प्रारूप में भेजना है। वास्तविक कोड में यह इस प्रकार दिखता है:
\n\nusing System;\nusing System.Net.Http;\nusing System.Text;\nusing System.Text.Json;\nusing System.Threading.Tasks;\n\npublic class UserService\n{\n private readonly HttpClient _httpClient;\n\n public UserService(HttpClient httpClient)\n {\n _httpClient = httpClient;\n }\n\n public async Task<UserResponse> CreateUserAsync(UserDto newUser)\n {\n // 1. ऑब्जेक्ट को JSON में सीरियलाइज़ करें\n var json = JsonSerializer.Serialize(newUser);\n var content = new StringContent(json, Encoding.UTF8, "application/json");\n\n // 2. POST भेजें\n HttpResponseMessage response = await _httpClient.PostAsync("https://api.example.com/users", content);\n\n // 3. प्रतिक्रिया पढ़ें\n response.EnsureSuccessStatusCode(); // यदि स्थिति 2xx नहीं है तो अपवाद फेंकेगा\n\n var responseBody = await response.Content.ReadAsStringAsync();\n return JsonSerializer.Deserialize<UserResponse>(responseBody);\n }\n}\n\n// उपयोग का उदाहरण\npublic class Program\n{\n public static async Task Main()\n {\n var client = new HttpClient();\n var service = new UserService(client);\n \n var user = new UserDto { Name = "इवान", Email = "ivan@example.com" };\n var result = await service.CreateUserAsync(user);\n Console.WriteLine($"उपयोगकर्ता ID बनाया गया: {result.Id}");\n }\n}\n\npublic class UserDto\n{\n public string Name { get; set; }\n public string Email { get; set; }\n}\n\npublic class UserResponse\n{\n public int Id { get; set; }\n}\n\nमहत्वपूर्ण बिंदु:
\n- \n
- हमेशा
async/awaitका उपयोग करें - यह थ्रेड को ब्लॉक होने से रोकता है। \n EnsureSuccessStatusCode()त्वरित त्रुटि जांच के लिए आपका सबसे अच्छा दोस्त है। \n - प्रत्येक अनुरोध के लिए नया
HttpClientन बनाएं - इससे socket exhaustion (सॉकेट की कमी) होती है। ASP.NET Core मेंIHttpClientFactoryया एक स्थिर इंस्टेंस का उपयोग करें। \n
1.2. फॉर्म डेटा के साथ POST (application/x-www-form-urlencoded)
\n\nकभी-कभी API को सामान्य HTML फॉर्म जैसे प्रारूप में डेटा की आवश्यकता होती है। इसके लिए हम FormUrlEncodedContent का उपयोग करते हैं:
public async Task<string> PostFormDataAsync(string username, string password)\n{\n var formData = new Dictionary<string, string>\n {\n { "grant_type", "password" },\n { "username", username },\n { "password", password }\n };\n\n var content = new FormUrlEncodedContent(formData);\n\n using var client = new HttpClient();\n var response = awa