본문 바로가기
C#

[C#] HttpClient.PostAsync 메서드 에는 HttpCompletionOption을 설정 할 수 없는 부분에 대한 대처 방안

by Hwoarang757 2024. 2. 4.

[C#] HttpClient.PostAsync 메서드 에는 HttpCompletionOption을 설정 할 수 없는 부분에 대한 대처 방안 

        public async void httpTest()
        {
            Cookie cookie = new Cookie("JSESSIONID", "DFGDAS12890123SDFSDF");
            CookieContainer cookieContainer = new CookieContainer();
            cookieContainer.Add(new Uri("http://dev.test.com"), cookie);


            using (HttpClientHandler handler = new HttpClientHandler() { CookieContainer = cookieContainer })
            using (HttpClient httpClient = new HttpClient(handler))
            {
                HttpResponseMessage message = await httpClient.GetAsync("/filedownload.json", HttpCompletionOption.ResponseHeadersRead);
                message.EnsureSuccessStatusCode();

                long? lFileLength = message.Content?.Headers?.ContentLength;

                // TODO ....
                // ....
                // ....
                // ....
                // ....
                // ....
                // ....
                // ....

            }

        }

 

PostAsync 메서드에는 HttpCompletionOption 옵션을 설정 할 수 없습니다 , 그 의미에 대해서 찾아보니 

 

아래와 같은 게시글을 찾을 수 있었습니다 

출처 : c# - Why does HttpClient.PostAsync buffer response? - Stack Overflow

 

Why does HttpClient.PostAsync buffer response?

Recently I encountered performance issues when using HttpClients.PostAsync on .Net 4.5.1. Originally server (Owin + WebApi) was buffering response before sending. This was causing huge memory usage

stackoverflow.com

번역 해보니 이렇습니다..

PostAsync에서 HttpCompletionOption.ResponseHeadersRead 지정을 허용하지 않는 이유는 무엇입니까? 아마도 대부분의 경우 그다지 유용하지 않기 때문일 것입니다. POST는 데이터를 검색하는 것이 아니라 데이터를 게시하기 위한 것입니다. 이것이 GET의 작업입니다. HttpClient는 HTTP 동사를 적절하게 사용하여 WebAPI 및 "REST" 서비스를 중심으로 설계되었습니다.

 

대응 방안은 , WAS에서 PostMapping만 처리 한다면 HttpClient.SendAsync를 사용하라는 얘기인거같습니다..