2016-06-29 5 views
0

C#에서 HTTP 클라이언트의 POST 요청 본문을 검색하는 방법은 없나요? 내 확장 메서드가 요청에 제대로 추가하는지 여부 만 확인하면됩니다. 이 함수는 아무런 정의를하지 않습니다.C#에서 Http 클라이언트의 POST 요청 본문을 검색하십시오.

public static async Task<string> AddPostRequestBody<T>(this HttpClient httpclient, string RequestUrl, T classobject) 
    { 
     string json_body = Newtonsoft.Json.JsonConvert.SerializeObject(classobject); 
     HttpRequestMessage RequestMessage = new HttpRequestMessage(HttpMethod.Post, RequestUrl); 
     HttpResponseMessage response = await httpclient.PostAsync(RequestUrl, new StringContent(json_body)); 
     response = httpclient.SendAsync(RequestMessage).Result; 
     string outputresult = await response.RequestMessage.Content.ReadAsStringAsync(); 
     return outputresult; 
    } 

도와주세요!

+1

나가는 요청을 Fiddler로 검사하면 되나요? – CodeCaster

+0

브라우저 웹 도구에서 _Network_ 탭을 사용 하시겠습니까? –

+0

내 확장 메서드에 대한 UT를 작성 중이므로 코드에서 본문을 검색 할 방법이 필요합니다. – Raven21

답변

3

DelegatingHandler (HMAC 구현시 사용한 내용을 해시하고 필요한 권한 헤더를 추가하는 데 사용)를 사용하면 콘텐츠에 액세스 할 수 있습니다. 좋아

CustomDelegatingHandler customDelegatingHandler = new CustomDelegatingHandler(); 
HttpClient client = HttpClientFactory.Create(customDelegatingHandler); 

public class CustomDelegatingHandler : DelegatingHandler 
{ 
    protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
    { 
     if (request.Content != null) 
     { 
      byte[] content = await request.Content.ReadAsByteArrayAsync(); 
      // Do what you need with the content here 
     } 

     response = await base.SendAsync(request, cancellationToken); 
     return response; 
    } 
} 
+0

다른 방법으로 문제를 해결하기로 결정한 것이 좋지만 적어도 자신의 질문이 끝나더라도 원래 질문에 여전히 답했습니다. –

0

그래서 나는 내가 직접 요청 메시지에 추가하고 그것에서 검색하고,이 작업을 대신 응답을 생성 얻었다. 간단한 질문이지만 게시 된 질문에서 처음에는 응답에 json 문자열을 추가하여 복잡하게 만들었습니다.

public static string AddPostRequestBody<T>(this HttpClient httpclient, string requestUrl, T classObject) 
    { 
     string jsonBody = Newtonsoft.Json.JsonConvert.SerializeObject(classObject); 
     HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Post, requestUrl); 
     requestMessage.Content = new StringContent(jsonBody); 
     string requestBody = requestMessage.Content.ReadAsStringAsync().Result; 
     return requestBody;   
    }