Ответ 1
Вам нужно позвонить GetResponse().
Stream receiveStream = response.GetResponseStream ();
StreamReader readStream = new StreamReader (receiveStream, Encoding.UTF8);
txtBlock.Text = readStream.ReadToEnd();
Я пытаюсь получить содержимое HttpResponseMessage. Это должно быть: {"message":"Action '' does not exist!","success":false}
, но я не знаю, как получить его из HttpResponseMessage.
HttpClient httpClient = new HttpClient();
HttpResponseMessage response = await httpClient.GetAsync("http://****?action=");
txtBlock.Text = Convert.ToString(response); //wrong!
В этом случае txtBlock будет иметь значение:
StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Vary: Accept-Encoding
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Date: Wed, 10 Apr 2013 20:46:37 GMT
Server: Apache/2.2.16
Server: (Debian)
X-Powered-By: PHP/5.3.3-7+squeeze14
Content-Length: 55
Content-Type: text/html
}
Вам нужно позвонить GetResponse().
Stream receiveStream = response.GetResponseStream ();
StreamReader readStream = new StreamReader (receiveStream, Encoding.UTF8);
txtBlock.Text = readStream.ReadToEnd();
Я думаю, что самый простой подход - просто изменить последнюю строку на
txtBlock.Text = await response.Content.ReadAsStringAsync(); //right!
Таким образом, вам не нужно вводить никаких считывателей потоков, и вам не нужны какие-либо методы расширения.
Попробуйте это, вы можете создать метод расширения следующим образом:
public static string ContentToString(this HttpContent httpContent)
{
var readAsStringAsync = httpContent.ReadAsStringAsync();
return readAsStringAsync.Result;
}
а затем просто вызовите метод расширения:
txtBlock.Text = response.Content.ContentToString();
Я надеюсь, что это поможет вам; -)
Если вы хотите применить его к определенному типу (например, в рамках тестов), вы можете использовать ReadAsAsync метод расширения:
object yourTypeInstance = await response.Content.ReadAsAsync(typeof(YourType));
или для синхронного кода:
object yourTypeInstance = response.Content.ReadAsAsync(typeof(YourType)).Result;
Обновление: существует также общий вариант ReadAsAsync < > , который возвращает экземпляр конкретного типа вместо объявленного объекта:
YourType yourTypeInstance = await response.Content.ReadAsAsync<YourType>();
Вы можете использовать метод GetStringAsync
:
var uri = new Uri("http://yoururlhere");
var response = await client.GetStringAsync(uri);