첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
본 블로그는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 블로그 콘텐츠 향상을 위해 쓰여집니다.

728x90
반응형
728x170

▶ HttpRequestMessage 클래스 : POST 요청 열거 가능형 구하기 예제

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 타입은 모델 클래스로 명시하지 않았다.

 

 

728x90

 

▶ HttpRequestMessage 클래스 : POST 요청 열거 가능형 구하기

using System;
using System.Collections.Generic;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;

using Newtonsoft.Json;

#region POST 요청 열거 가능형 구하기 - GetPOSTRequestEnumerable<TItem>(url, tokenSechema, token, input)

/// <summary>
/// POST 요청 열거 가능형 구하기
/// </summary>
/// <typeparam name="TItem">항목 타입</typeparam>
/// <param name="url">URL</param>
/// <param name="tokenSechema">토큰 스키마</param>
/// <param name="token">토큰</param>
/// <param name="input">입력 객체</param>
/// <returns>POST 요청 열거 가능형</returns>
public IEnumerable<TItem> GetPOSTRequestEnumerable<TItem>(string url, string tokenSechema, string token, object input)
{
    HttpRequestMessage request = new(HttpMethod.Post, url);

    if(input != null)            
    {
        string inputJSON = JsonConvert.SerializeObject(input);

        byte[] inputByteArray = Encoding.UTF8.GetBytes(inputJSON);

        ByteArrayContent content = new(inputByteArray);

        content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

        request.Content = content;
    }

    HttpClient client = new();

    if(!string.IsNullOrWhiteSpace(token))
    {
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(tokenSechema, token);
    }

    HttpResponseMessage response = client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead).Result;

    response.EnsureSuccessStatusCode();

    using Stream stream = response.Content.ReadAsStreamAsync().Result;
            
    using StreamReader streamReader = new(stream);

    JsonSerializer serializer = new();

    using JsonTextReader jsonTextReader = new(streamReader);

    while(jsonTextReader.Read())
    {
        if(jsonTextReader.TokenType != JsonToken.StartArray && jsonTextReader.TokenType != JsonToken.EndArray)
        {
            yield return serializer.Deserialize<TItem>(jsonTextReader);
        }
    }
}

#endregion
#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)
{
    var resultEnumerable = GetPOSTRequestEnumerable<TItem>(url, "Bearer", token, input);

    return resultEnumerable;
}

#endregion
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요