2017-02-04 18 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のページでは、Webクライアントが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時間以上の検索と大きな頭痛から私を救った。私はこれから遠くはないが、私は回っていた。 大変ありがとうございます。 –

関連する問題