■ HttpWebRequest 클래스를 사용해 POST 요청 열거 가능형을 구하는 방법을 보여준다.
▶ HttpWebRequest 클래스 : POST 요청 열거 가능형 구하기 예제 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using System; string token; ... var resultEnumerable = GetPOSTRequestEnumerable<APIModel> ( "https://localhost:44362/api/api/inquirylist", token, new APISearchConditionModel() ); int i = 0; foreach(APIModel api in resultEnumerable) { Console.WriteLine("{0} {1} {2}", i++, api.ID, api.NAME); } |
※ APIModel, APISearchConditionModel 타입은 모델 클래스로 명시하지 않았다.
▶ HttpWebRequest 클래스 : POST 요청 열거 가능형 구하기 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
using System.Collections.Generic; using System.IO; using System.Net; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; #region POST 요청 열거 가능형 구하기 - GetPOSTRequestEnumerable<TItem>(url, token, input) /// <summary> /// POST 요청 열거 가능형 구하기 /// </summary> /// <typeparam name="TItem">항목 타입</typeparam> /// <param name="url">URL</param> /// <param name="token">토큰</param> /// <param name="input">입력 객체</param> /// <returns>POST 열거 가능형</returns> public IEnumerable<TItem> GetPOSTRequestEnumerable<TItem>(string url, string token, object input) { using Stream stream = GetPOSTRequestStream(url, token, "application/json; charset=utf-8", Encoding.UTF8, input); using StreamReader streamReader = new(stream); using JsonTextReader jsonTextReader = new(streamReader); JsonSerializer serializer = new(); while(jsonTextReader.Read()) { if(jsonTextReader.TokenType != JsonToken.StartArray && jsonTextReader.TokenType != JsonToken.EndArray) { yield return serializer.Deserialize<TItem>(jsonTextReader); } } } #endregion #region POST 요청 스트림 구하기 - GetPOSTRequestStream(url, token, contentType, encoding, input, timeOut) /// <summary> /// POST 요청 스트림 구하기 /// </summary> /// <param name="url">URL</param> /// <param name="token">토큰</param> /// <param name="contentType">콘텐트 타입</param> /// <param name="encoding">인코딩</param> /// <param name="input">입력 객체</param> /// <param name="timeOut">타임 아웃 (단위 : 밀리초)</param> /// <returns>POST 요청 스트림</returns> private Stream GetPOSTRequestStream(string url, string token, string contentType, Encoding encoding, object input, int? timeOut = null) { HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; if(!string.IsNullOrWhiteSpace(token)) { request.Headers.Add("Authorization", $"Bearer {token}"); } if(timeOut.HasValue) { request.Timeout = timeOut.Value; } if(input != null) { string inputJSON = JsonConvert.SerializeObject(input); byte[] inputByteArray = encoding.GetBytes(inputJSON); request.ProtocolVersion = HttpVersion.Version11; request.AllowAutoRedirect = true; request.AllowWriteStreamBuffering = true; request.Method = WebRequestMethods.Http.Post; request.ContentType = contentType; request.ContentLength = inputByteArray.Length; request.PreAuthenticate = true; using(Stream requestStream = request.GetRequestStream()) { requestStream.Write(inputByteArray, 0, inputByteArray.Length); } } else { request.ProtocolVersion = HttpVersion.Version11; request.AllowAutoRedirect = true; request.AllowWriteStreamBuffering = true; request.Method = WebRequestMethods.Http.Post; request.PreAuthenticate = true; } HttpWebResponse response = request.GetResponse() as HttpWebResponse; Stream responseStream = response.GetResponseStream(); return responseStream; } #endregion |