■ HttpWebRequest 클래스를 사용해 POST 요청 객체를 구하는 방법을 보여준다.
▶ HttpWebRequest 클래스 : POST 요청 객체 구하기 예제 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using System; string token; ... var result = GetPOSTRequestObject<APIModel> ( "https://localhost:44362/api/api/inquiryitem", token, new APIKeyModel { ID = "F835FE23-6AE4-4641-A09B-B9391D90D033" } ); Console.WriteLine(result.NAME); |
※ APIModel, APIKeyModel 타입은 모델 클래스로 명시하지 않았다.
▶ 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 103 104 105 106 107 108 109 110 111 112 113 114 115 |
using System.Collections.Generic; using System.IO; using System.Net; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; #region POST 요청 객체 구하기 - GetPOSTRequestObject<TObject>(url, token, input) /// <summary> /// POST 요청 객체 구하기 /// </summary> /// <typeparam name="TObject">객체 타입</typeparam> /// <param name="url">URL</param> /// <param name="token">토큰</param> /// <param name="input">입력 객체</param> /// <returns>POST 요청 객체</returns> public TObject GetPOSTRequestObject<TObject>(string url, string token, object input) { string resultString = POSTGetString(url, token, "application/json; charset=utf-8", Encoding.UTF8, input); TObject result = JsonConvert.DeserializeObject<TObject>(resultString); return result; } #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 #region POST 문자열 구하기 - POSTGetString(url, token, contentType, encoding, input) /// <summary> /// POST 문자열 구하기 /// </summary> /// <param name="url">URL</param> /// <param name="token">토큰</param> /// <param name="contentType">컨텐츠 타입</param> /// <param name="encoding">인코딩</param> /// <param name="input">입력 객체</param> /// <returns>POST 문자열</returns> private string POSTGetString(string url, string token, string contentType, Encoding encoding, object input) { using Stream stream = GetPOSTRequestStream(url, token, contentType, encoding, input); using StreamReader reader = new(stream); string result = reader.ReadToEnd(); return result; } #endregion |