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
반응형
'소소한 C# 지식' 카테고리의 다른 글
[C#]C#에서 메일 보내기 (25) | 2022.05.21 |
---|---|
[C#]C# 8 이상 "CS8618" 경고 해결 (13) | 2022.05.17 |
[C#] C#에서 비밀번호 검증(Password Validation) (22) | 2022.05.10 |
[C#]C#에서 컴퓨터 정보 조회 (18) | 2022.05.05 |
[C#]Local PC IP 조회 및 네트워크 상태 체크 (12) | 2022.05.03 |
댓글