C#에서는 WebClient 클래스를 사용하여 Web API에 데이터를 손쉽게 가져오거나 전송할 수 있습니다. WebClient는 서버와 데이터를 주고받기 위한 다양한 공용 메서드를 제공하며, Web API를 호출하는 가장 간단한 방법 중 하나입니다.
참고로 최신 .NET 환경에서는 HttpClient를 사용하는 것이 권장되지만, 간단한 요청 처리에는 여전히 WebClient가 유용하게 사용됩니다.
WebClient의 동작 원리
WebClient 클래스는 내부적으로 WebRequest 클래스를 기반으로 리소스에 접근합니다. 또한 WebRequest.RegisterPrefix 메서드로 등록된 모든 WebRequest 파생 클래스를 통해 다양한 프로토콜의 데이터에 접근할 수 있습니다.
네임스페이스: System.Net 어셈블리: System.Net.WebClient.dll
이번 예제에서 사용할 핵심 메서드는 UploadString입니다. 이 메서드는 문자열 데이터를 지정된 리소스로 전송하고, 서버의 응답을 문자열 형태로 반환합니다.
예제 코드
아래 예제는 JSON Placeholder 테스트 API(https://jsonplaceholder.typicode.com/posts)에 User 객체를 JSON으로 직렬화하여 POST 요청을 보내는 과정을 보여줍니다.
class Program{
public static void Main(){
User user = new User();
try{
using (WebClient webClient = new WebClient()){
webClient.BaseAddress = "https://jsonplaceholder.typicode.com";
var url = "/posts";
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";
string data = JsonConvert.SerializeObject(user);
var response = webClient.UploadString(url, data);
var result = JsonConvert.DeserializeObject<object>(response);
System.Console.WriteLine(result);
}
}
catch (Exception ex){
throw ex;
}
}
}
class User{
public int id { get; set; } = 1;
public string title { get; set; } = "First Data";
public string body { get; set; } = "First Body";
public int userId { get; set; } = 222;
}코드 핵심 포인트
- BaseAddress 설정: 반복 요청 시 공통으로 사용할 기본 URL을 지정합니다.
- User-Agent 헤더 추가: 일부 서버는 User-Agent가 없는 요청을 차단하므로 헤더를 명시하는 것이 안전합니다.
- ContentType 지정: JSON 데이터를 전송하므로
application/json으로 설정합니다. - JsonConvert 활용: 객체를 JSON 문자열로 직렬화하고, 응답을 다시 역직렬화하여 결과를 확인합니다.
- using 문 사용: WebClient가 IDisposable을 구현하므로 using 블록으로 리소스를 자동 해제합니다.
실행 결과
{
"id": 101,
"title": "First Data",
"body": "First Body",
"userId": 222
}서버는 새로 생성된 리소스의 id(101)를 포함한 JSON 응답을 반환합니다. 이처럼 WebClient의 UploadString 메서드를 활용하면 별도의 복잡한 설정 없이도 간단하게 HTTP POST 요청을 구현할 수 있습니다.