2015-03-11 2 views
0

Я очень новый для .Net, и я пытаюсь получить данные после вызова метода отдыхаКак получить данные с отдыхом api?

Моей функции на самом деле так:

private Task<HttpResponse> getUser(string user) 
    { 
     string url = "http://ws.audioscrobbler.com/2.0/?method=user.getinfo&user=" + user + "&api_key=xxx&format=json"; 
     var client = new HttpClient(); 

     return client.GetAsync(url).ContinueWith(request => 
      { 
       var response = request.Result; 
       response.EnsureSuccessStatusCode(); 
       return response.Content.ReadAsStringAsync().ContinueWith(t => 
        { 
         var result = new HttpResponseMessage(); 
         response.CreateContent(t.Result); 
         return response; 
        }); 
      }).Unwrap(); 
    } 

Но я получаю эту ошибку:

«System.Net.Http.HttpResponseMessage» не содержит определения для « CreateContent» и ни один из методов расширения «» CreateContent принимающих первого аргумент типа «System.Net.Http.HttpResponseMessage» мог (вы не указали директиву или ссылку на сборку?)

Возможно, я просто что-то забыл, но даже после некоторых поисков я не нашел решения. Есть ли альтернативные способы решения?

Благодарим за помощь

+2

Если вы используете async, вы должны использовать ключевое слово 'await', чтобы оно читалось больше как синхронный код и его легче понять. Ваши лямбды затрудняют понимание потока вашего кода. Кроме того, в [HttpResponseMessage] не существует метода 'CreateContent()' (https://msdn.microsoft.com/en-us/library/system.net.http.httpresponsemessage (v = vs.118) .aspx). Возможно, вы хотели просто установить свойство Content? – mason

+0

Вот хороший пример того, что вы пытаетесь сделать здесь [C# HttpClient] (http://www.dotnetperls.com/httpclient) и здесь [Не блокировать код Async] (http: // blog. stephencleary.com/2012/07/dont-block-on-async-code.html). Как сказал каменщик, используйте вместо лямбда ожидания. – R0MANARMY

+0

см. Этот ответ http://stackoverflow.com/a/9800077/2374987 –

ответ

0

Я нашел решение.

Добавить ссылку на System.Net.Http.Formatting.dll. Эта сборка также доступна в папке C: \ Program Files \ Microsoft ASP.NET \ ASP.NET MVC 4 \ Assemblies.

Метод ReadAsAsync - это метод расширения, объявленный в классе HttpContentExtensions, который находится в пространстве имен System.Net.Http в библиотеке System.Net.Http.Formatting.

Рефлектор пришел на помощь!

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