2015-10-08 7 views
2

У меня есть следующий WebClient внутри моей ASP.NET MVC веб-приложения:Как заменить WebClient на HttpClient?

using (WebClient wc = new WebClient()) // call the Third Party API to get the account id 
{ 
    string url = currentURL + "resources/" + ResourceID + "/accounts?AUTHTOKEN=" + pmtoken; 
    var json = await wc.DownloadStringTaskAsync(url); 
} 

Так может кто-нибудь совет, как я могу изменить его от WebClient быть HttpClient?

+3

Все крутые дети используют HttpClient в настоящее время. Это оболочка WebRequest и обеспечивает более легкую модель для работы. – Ananke

+1

@Ananke ok, так вы можете придумать, как изменить WebClient как HttpClient? –

ответ

6

Вы можете написать следующий код:

string url = currentURL + "resources/" + ResourceID + "/accounts?AUTHTOKEN=" + pmtoken; 

using (HttpClient client = new HttpClient()) 
{ 
    using (HttpResponseMessage response = client.GetAsync(url).Result) 
    { 
      using (HttpContent content = response.Content) 
      { 
       var json = content.ReadAsStringAsync().Result; 
      } 
    } 
} 

Update 1:

если вы хотите заменить призвание Result собственности с await Ключевым словом, то это возможно, но у вас есть поставить этот код в метод, который обозначен как async следующим образом:

если вы пропустили async ключевое слово из метода, вы могли бы получить Compile ошибку времени в следующем

The «поджидает» оператора может быть использованы только в качестве метода асинхронного. Подумайте о маркировке этого метода с помощью модификатора «async» и измените его тип возврата на «Задача».

Update 2:

В ответ на исходный вопрос о преобразовании «WebClient» в «WebRequest» это код, который вы могли бы использовать ... Но Microsoft (и я) рекомендовал вам использовать первый подход (используя HttpClient).

string url = currentURL + "resources/" + ResourceID + "/accounts?AUTHTOKEN=" + pmtoken; 

HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url); 
httpWebRequest.Method = "GET"; 

using (WebResponse response = httpWebRequest.GetResponse()) 
{ 
    HttpWebResponse httpResponse = response as HttpWebResponse; 
    using (StreamReader reader = new StreamReader(httpResponse.GetResponseStream())) 
    { 
     var json = reader.ReadToEnd(); 
    } 
} 

Update 3

Чтобы узнать, почему HttpClient больше, чем рекомендуемое WebRequest и WebClient вы можете обратиться по следующим ссылкам.

Need help deciding between HttpClient and WebClient

http://www.diogonunes.com/blog/webclient-vs-httpclient-vs-httpwebrequest/

HttpClient vs HttpWebRequest

What difference is there between WebClient and HTTPWebRequest classes in .NET?

http://blogs.msdn.com/b/henrikn/archive/2012/02/11/httpclient-is-here.aspx

+0

спасибо за ответ ,, но будет ли какая-нибудь проблема, если я заменил .Result с ожиданием в вашем коде? –

+1

@johnG plz см. Обновленный ответ, чтобы обработать «ожидание» вместо свойства «Результат». –

+1

@johnG Я также добавляю обновление для класса «WebRequest». –