2017-02-04 3 views
1

Я пытаюсь преобразовать WebClient Я использовал для проекта Win7 в HttpClient, чтобы использовать его в моей системе 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 option в то время как мой WebClient возвращает успешный ответ.

Как это сделать?

Я понимаю, я, конечно, добавляя заголовки вместо запроса, но я понятия не имею, как добавить запросы ...

ответ

4

Страница из MSDN UploadValues сказать, что WebClient отправить данные в запросе POST с application/x-www-form-urlencoded контент- тип. Таким образом, вы должны/можете использовать 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-х часового поиска и большой боли в голове. Я был недалеко от этого, но я обернулся. Большое спасибо –

Смежные вопросы