API에 관한 경로를 조작하는 유틸리티 클래스입니다.
        /// <summary>
        /// 현재 설정으로 유효한 토큰을 확보합니다.
        /// </summary>
        /// <returns>토큰 정보</returns>
        public async Task <IamportToken> AuthorizeAsync()
        {
            ThrowsIfDisposed();
            var input = new IamportTokenRequest
            {
                ApiKey    = options.ApiKey,
                ApiSecret = options.ApiSecret
            };

            // TODO: 인증 코드는 UsersApi와 중복된 부분임.
            // 별도로 빼는 방법이 있을지?
            var url         = ApiPathUtility.Build(options.BaseUrl, UsersGetTokenPath);
            var httpRequest = new HttpRequestMessage(HttpMethod.Post, url);

            httpRequest.Content = new JsonContent(input);
            var response = await RequestAsync <IamportToken>(httpRequest);

            if (response.Code != 0)
            {
                throw new IamportResponseException(response.Code, response.Message);
            }

            var token = response.Content;

            lock (tokenLock)
            {
                httpClient.DefaultRequestHeaders.Remove(options.AuthorizationHeaderName);
                httpClient.DefaultRequestHeaders.Add(options.AuthorizationHeaderName, token.AccessToken);
                CurrentToken = token;
            }
            return(token);
        }
예제 #2
0
 /// <summary>
 /// 주어진 경로 및 쿼리스트링을 API의 기본 경로에 추가하거나 덮어씁니다.
 /// </summary>
 /// <param name="api">API</param>
 /// <param name="path">추가 경로 및 쿼리스트링</param>
 /// <returns>완성된 경로 및 쿼리스트링</returns>
 public static string BuildPath(this IIamportApi api, string path)
 {
     if (api == null)
     {
         throw new ArgumentNullException(nameof(api));
     }
     return(ApiPathUtility.Build(api.BasePath, path));
 }
        /// <summary>
        /// 주어진 아임포트 요청 정보에 해당하는 HttpRequestMessage를 반환합니다.
        /// </summary>
        /// <typeparam name="TRequest">요청 정보의 타입</typeparam>
        /// <param name="request">요청 정보</param>
        /// <returns>HttpRequestMessage</returns>
        protected HttpRequestMessage GetHttpRequest <TRequest>(IamportRequest <TRequest> request)
        {
            var url         = ApiPathUtility.Build(options.BaseUrl, request.ApiPathAndQueryString);
            var httpRequest = new HttpRequestMessage(request.Method, url);

            if (request.Method != HttpMethod.Get)
            {
                httpRequest.Content = new JsonContent(request.Content);
            }
            return(httpRequest);
        }