Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

วิธีส่งข้อมูล POST ไปยัง URL เฉพาะด้วย WebClient ใน C#

การใช้ WebClient สำหรับส่งข้อมูลแบบ POST

WebClient (อยู่ใน System.Net) เป็นคลาสที่ใช้งานง่ายสำหรับส่งและรับข้อมูลจาก Web API รองรับทั้ง GET และ POST แม้ว่าใน .NET Core/5+ จะแนะนำให้ใช้ HttpClient แทน แต่ WebClient ยังคงใช้งานได้และเข้าใจง่าย

เมธอดสำคัญ: UploadString

UploadString(url, data) - ส่งสตริงไปยังทรัพยากรและคืนค่าตอบกลับเป็นสตริง

ตัวอย่างเต็ม: POST JSON ไปยัง JSONPlaceholder API

using System;
using System.Net;
using Newtonsoft.Json;

class Program
{
    public static void Main()
    {
        var user = new User
        {
            id = 1,
            title = "First Data",
            body = "First Body",
            userId = 222
        };

        try
        {
            using (WebClient webClient = new WebClient())
            {
                webClient.BaseAddress = "https://jsonplaceholder.typicode.com";
                var url = "/posts";
                
                // ตั้งค่า Header
                webClient.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
                webClient.Headers[HttpRequestHeader.ContentType] = "application/json";
                
                // Serialize object เป็น JSON
                string data = JsonConvert.SerializeObject(user);
                
                // ส่ง POST request
                var response = webClient.UploadString(url, data);
                
                // Deserialize response
                var result = JsonConvert.DeserializeObject<object>(response);
                Console.WriteLine(result);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
            // ใน production ควร log error แทนการ throw ใหม่
        }
    }
}

class User
{
    public int id { get; set; }
    public string title { get; set; }
    public string body { get; set; }
    public int userId { get; set; }
}

ผลลัพธ์:

{
  "id": 101,
  "title": "First Data",
  "body": "First Body",
  "userId": 222
}

เมธอด Upload อื่นๆ ของ WebClient

เมธอดคำอธิบาย
UploadDataส่ง byte array
UploadFileอัปโหลดไฟล์
UploadValuesส่ง NameValueCollection (form data)
UploadStringAsyncเวอร์ชัน async ของ UploadString

ข้อควรระวังและแนวทางปฏิบัติที่ดี

  • ใช้ using statement เพื่อให้ Dispose อัตโนมัติ
  • ตั้งค่า Content-Type header ให้ถูกต้อง (application/json, application/x-www-form-urlencoded, multipart/form-data)
  • จัดการ Exception เช่น WebException, TimeoutException
  • ใน .NET Core/5+ แนะนำ HttpClient ซึ่งมีประสิทธิภาพดีกว่า รองรับ DI และไม่มีปัญหา socket exhaustion

ตัวอย่างเปรียบเทียบกับ HttpClient (แนะนำสำหรับโปรเจกต์ใหม่)

using (var httpClient = new HttpClient())
{
    httpClient.BaseAddress = new Uri("https://jsonplaceholder.typicode.com/");
    httpClient.DefaultRequestHeaders.Add("User-Agent", "MyApp");
    
    var json = JsonConvert.SerializeObject(user);
    var content = new StringContent(json, Encoding.UTF8, "application/json");
    
    var response = await httpClient.PostAsync("posts", content);
    var result = await response.Content.ReadAsStringAsync();
}