본문 바로가기
소소한 C# 지식

[C#] POST 방식으로 Web API 호출하기

by 해뤼맘 2022. 5. 12.
728x90
반응형

안녕하세요

C#에서 Post 방식으로 Web API 호출 관련하여 포스팅하겠습니다.

Post 방식에서

ContentType에 따라 요청 스트림에 데이터 쓰는 방식이 조금 달라

각각의 방식을 보여드리겠습니다.

 

1. ContentType =  "application/json"

  • C# Newtonsoft.Json.Linq 에서 제공하는 Json Object를 사용
  • 요청 스트림에 데이터를 쓰면

      data : { "test1": "test1",
                 "test2": "test2"}

위와 같은 형태로 데이터를 전송하게 됩니다.

 var contents = (JObject)request.Body.Content;
                //전달해야할 값1
                var test1 = contents.GetValue("test1");
                //전달해야할 값2
                var test2 = contents.GetValue("test2");
                
                  string BasesUrl = "호출해야 하는 api 주소";

                //url을 요청 만들기
                HttpWebRequest requests = (HttpWebRequest)WebRequest.Create(BasesUrl);
                //요청의 Method 속성을 post로 설정
                requests.Method = "POST";
                //ContentType 속성 설정
                requests.ContentType = "application/json"; 
                requests.Accept = "application/json";

                JObject data = new JObject();
                data.Add("test1", test1);
                data.Add("test2", test2);
				
                //요청 스트림 가져오기
                StreamWriter reqStream = new StreamWriter(requests.GetRequestStream());
               
               //요청 스트림에 데이터 쓰기
               reqStream.Write(data);
                reqStream.Close();
				
                //응답받기
                HttpWebResponse response = (HttpWebResponse)requests.GetResponse();
                    StreamReader resqStream = new StreamReader(response.GetResponseStream());
                    string resp = resqStream.ReadToEnd();
                    resqStream.Close();

                    JObject ret = JObject.Parse(resp);
				
                //응답 코드
                    var result_code = $"{ret["status"]}";

 

2. ContentType = "application/x-www-form-urlencoded"

  • 바이트 배열로 변환하여 데이터 전송
  • 요청 스트림에 데이터를 쓸 경우 data : test1=test1&test2=test2&test3=test3 와 같은 형태로 전송됩니다.
  var contents = (JObject)request.Body.Content;
                var test1 = contents.GetValue("test1");
                var test2 = contents.GetValue("test2");
                var test3 = contents.GetValue("test3");
                
                string BasesUrl = "호출 api 주소";

                string Data;

                Data = String.Format(@"test1={0}&test2={1}&test3={2}"
                                  , test1, test2, test3);

                //url을 요청 만들기
                HttpWebRequest requests = (HttpWebRequest)WebRequest.Create(BasesUrl);
                //요청의 Method 속성을 post로 설정
                requests.Method = "POST";
                //POST 데이터 생성 및 바이트 배열로 변환
                byte[] byteArray = Encoding.GetEncoding(51949).GetBytes(Data);
                //ContentType 속성 설정
                requests.ContentType = "application/x-www-form-urlencoded";
                requests.Accept = "application/x-www-form-urlencoded";
                requests.ContentLength = byteArray.Length;

                //요청 스트림 가져오기
                Stream dataStream = requests.GetRequestStream();

                //요청스트림에 데이터 쓰기
                dataStream.Write(byteArray, 0, byteArray.Length);
                dataStream.Close();

                //응답받기
                WebResponse webResponse = requests.GetResponse();

                Stream webStream = webResponse.GetResponseStream();

                StreamReader responseReader = new StreamReader(webStream);

                string response = responseReader.ReadToEnd();
                    
                responseReader.Close();


                JObject result = JObject.Parse(response);
                string resultCode = result["result"].ToString();

 

이상 C#에서 Post 방식으로 Web API 호출하는 방법이었습니다.

728x90
반응형

댓글