إرسال HTTP POST في .NET: من المبتدئ إلى المحترف بلغة C#

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

كيفية إرسال طلب HTTP POST في .NET بلغة C#: من البسيط إلى المعقد

\n\n

تخيل أن تطبيقك بلغة C# هو ساعي بريد يحتاج إلى توصيل طرد (بيانات) إلى عنوان معين (URL) والحصول على تأكيد (استجابة). هذه هي بالضبط المهمة التي يحلها طلب HTTP POST. على موقع Stack Overflow، يجمع هذا السؤال آلاف المشاهدات، وليس من دون سبب: العمل مع واجهات برمجة التطبيقات الخارجية، إرسال النماذج، تحميل البيانات إلى الخادم - كلها مهام يومية لأي مطور .NET.

\n\n

في هذه المقالة، سنستعرض ثلاث طرق رئيسية لإرسال طلب POST في .NET (C#)، بدءًا من HttpClient الحديث وانتهاءً بـ WebRequest القديم. ستتعلم كيفية إرسال JSON، البيانات المشفرة بعنوان URL، معالجة الأخطاء، وتجنب الفخاخ التي تتربص بالمبتدئين. هيا بنا!

\n\n

1. النهج الحديث: HttpClient (موصى به)

\n\n

بدءًا من .NET Framework 4.5 وفي جميع إصدارات .NET Core / .NET 5+، أصبحت فئة HttpClient هي المعيار الفعلي. تم تصميمها للعمل غير المتزامن، وتدعم إعادة استخدام الاتصالات، ويسهل تخصيصها.

\n\n

1.1. POST بسيط مع JSON (السيناريو الأكثر شيوعًا)

\n\n

لنفترض أننا بحاجة إلى إرسال بيانات مستخدم إلى الخادم بتنسيق JSON. إليك كيف يبدو ذلك في الكود الفعلي:

\n\n
using 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($"تم إنشاء المستخدم بالمعرف: {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). استخدم IHttpClientFactory في ASP.NET Core أو مثيلًا ثابتًا واحدًا.
  • \n
\n\n

1.2. POST مع بيانات النموذج (application/x-www-form-urlencoded)

\n\n

أحيانًا تتطلب واجهة برمجة التطبيقات بيانات بتنسيق مشابه لنموذج HTML عادي. لهذا نستخدم FormUrlEncodedContent:

\n\n
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                

المدونات

توصيات الكتب