Estou tentando obter o conteúdo de HttpResponseMessage. Deve ser:, {"message":"Action '' does not exist!","success":false}
mas não sei, como tirá-lo do HttpResponseMessage.
HttpClient httpClient = new HttpClient();
HttpResponseMessage response = await httpClient.GetAsync("http://****?action=");
txtBlock.Text = Convert.ToString(response); //wrong!
Nesse caso, o txtBlock teria valor:
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
}
Content
propriedade. Veja o exemplo aqui . Role para baixo até o segundo passo.HttpClient
, nãoHttpWebRequest
/HttpWebResponse
.Eu acho que a abordagem mais fácil é mudar a última linha para
Dessa forma, você não precisa apresentar nenhum leitor de fluxo e nem métodos de extensão.
fonte
Tente isso, você pode criar um método de extensão como este:
e, em seguida, chame o método de extensão:
Espero que isso lhe ajude ;-)
fonte
await
vez de.Result
... ou use um cliente HTTP síncrono, se o seu código não puder lidar com programação assíncrona. Mas qualquer código moderno deve, caso contrário, pode ser um sinal de que seu aplicativo está fazendo algo errado.Se você deseja convertê- lo para um tipo específico (por exemplo, dentro de testes), você pode usar o método de extensão ReadAsAsync :
ou a seguir para código síncrono:
Atualização: também existe a opção genérica de ReadAsAsync <> que retorna uma instância de tipo específico em vez da declarada por objeto:
fonte
Pela resposta de rudivonstaden
mas se você não quiser fazer o método assíncrono, pode usar
Wait () é importante, porque estamos executando operações assíncronas e precisamos aguardar a conclusão da tarefa antes de prosseguir.
fonte
.Result
qualquer diferente?httpContent.ReadAsStringAsync().Result
.Result
bloquearia a execução do encadeamento nessa linha ... onde, comotxtBlock.Text.Wait()
blocos na chamada wait () ... então você está certo de que basicamente não há diferença. Mas eu suspeitotxtBlock.Text.Wait()
que levaria um parâmetro inteiro opcional para que a GUI não travasse se aReadAsStringAsync()
chamada anterior nunca retornar. Por exemplo, o seguinte seria bloqueado por não mais que 1 segundotxtBlock.Text.Wait(1000)
A resposta rápida que sugiro é:
response.Result.Content.ReadAsStringAsync().Result
fonte
Result
tarefas. Você corre o risco de bloquear seu aplicativo. Use async / waitit.ReadAsStringAsync()
não retornar, portanto, não ligue na GUI ou no encadeamento principal do aplicativo.Eu acho que a imagem a seguir ajuda para aqueles que precisam aparecer
T
como o tipo de retorno.fonte
Você pode usar o
GetStringAsync
método:fonte