2017-02-04 7 views
1

Win7 프로젝트에서 사용했던 WebClientHttpClient 시스템으로 변환하려고 시도 중입니다. Win8.1 시스템에서 사용하고 있습니다.WebClient를 HttpClient로 변환

WenClient :

public static void PastebinSharp(string Username, string Password) 
     { 
      NameValueCollection IQuery = new NameValueCollection(); 

      IQuery.Add("api_dev_key", IDevKey); 
      IQuery.Add("api_user_name", Username); 
      IQuery.Add("api_user_password", Password); 

      using (WebClient wc = new WebClient()) 
      { 
       byte[] respBytes = wc.UploadValues(ILoginURL, IQuery); 
       string resp = Encoding.UTF8.GetString(respBytes); 

       if (resp.Contains("Bad API request")) 
       { 
        throw new WebException("Bad Request", WebExceptionStatus.SendFailure); 
       } 
       Console.WriteLine(resp); 
       //IUserKey = resp; 
      } 
     } 

그리고이 HttpClient를

public static async Task<string> PastebinSharp(string Username, string Password) 
     { 
      using (HttpClient client = new HttpClient()) 
      { 
       client.DefaultRequestHeaders.Add("api_dev_key", GlobalVars.IDevKey); 
       client.DefaultRequestHeaders.Add("api_user_name", Username); 
       client.DefaultRequestHeaders.Add("api_user_password", Password); 

       using (HttpResponseMessage response = await client.GetAsync(GlobalVars.IPostURL)) 
       { 
        using (HttpContent content = response.Content) 
        { 
         string result = await content.ReadAsStringAsync(); 
         Debug.WriteLine(result); 
         return result; 
        } 
       } 
      } 
     } 

HttpRequest 반환 Bad API request, invalid api optionWebClient 반환 동안 성공적인 응답에 첫 샷입니다.

어떻게해야합니까?

내가 대신 쿼리의 헤더를 추가하고 물론 이해하지만, 내가 어떻게 쿼리를 추가 할 생각이 없다 ...

답변

4

UploadValues의 MSDN 페이지는 웹 클라이언트가 application/x-www-form-urlencoded 된 Content와 POST 요청에서 데이터를 전송하는 것을 말한다 유형. 따라서 당신은/FormUrlEncodedContent http 내용을 사용해야 만합니다.

public static async Task<string> PastebinSharpAsync(string Username, string Password) 
{ 
    using (HttpClient client = new HttpClient()) 
    { 
     var postParams = new Dictionary<string, string>(); 

     postParams.Add("api_dev_key", IDevKey); 
     postParams.Add("api_user_name", Username); 
     postParams.Add("api_user_password", Password); 

     using(var postContent = new FormUrlEncodedContent(postParams)) 
     using (HttpResponseMessage response = await client.PostAsync(ILoginURL, postContent)) 
     { 
      response.EnsureSuccessStatusCode(); // Throw if httpcode is an error 
      using (HttpContent content = response.Content) 
      { 
       string result = await content.ReadAsStringAsync(); 
       Debug.WriteLine(result); 
       return result; 
      } 
     } 
    } 
} 
+0

도움 주셔서 감사합니다. 나는 같은 결과를 가지고있다. '잘못된 API 요청, 잘못된 api_option' –

+0

서버로 보낸 요청의 덤프를 제공 할 수 있습니까? (피 들러 또는 다른 방법으로). 그러나 그 해답이 당신의 문제를 해결할 수있는가 아닌가? – Kalten

+0

당신의 오타에주의를 기울이지 않았고 URL이 잘못되었습니다. 고맙습니다. 수색 시간이 3 시간 더 늘어나고 큰 두통을 앓 았어. 나는 이것에서 멀리 아니고 그러나 나는 돌아 서고 있었다. 커다란 감사 –