Pergunta

Eu estou escrevendo uma pequena ferramenta em C # que terá de enviar e receber dados de / para um site usando POST e JSON formatação. Eu nunca fiz nada como isso antes em C # (ou qualquer língua realmente) por isso estou lutando para encontrar alguma informação útil para me iniciado.

Eu encontrei algumas informações sobre a classe WebRequest em C # (especificamente de aqui ), mas antes de eu começar a mergulhar nele, eu me perguntava se essa era a ferramenta certa para o trabalho.

Eu encontrei muitas ferramentas para converter dados em formato JSON, mas não muito mais, portanto, qualquer informação seria muito útil aqui no caso de eu acabar para baixo um beco sem saída.

Foi útil?

Solução

WebRequest e mais especificamente a classe HttpWebRequest é um bom ponto de partida para o que você deseja alcançar. Para criar a solicitação você vai usar o WebRequest.Create e lançou o pedido criado para um HttpWebRequest realmente usá-lo. Você vai então criar seus dados postais e enviá-lo para o fluxo como:

HttpWebRequest req = (HttpWebRequest)
WebRequest.Create("http://mysite.com/index.php");
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
string postData = "var=value1&var2=value2";
req.ContentLength = postData.Length;

StreamWriter stOut = new
StreamWriter(req.GetRequestStream(),
System.Text.Encoding.ASCII);
stOut.Write(postData);
stOut.Close();

Da mesma forma você pode ler a parte de trás de resposta usando o método GetResponse que irá permitir que você leia o fluxo de resposta resultante e fazer o que mais você precisa fazer. Você pode encontrar mais informações sobre a classe em:

http://msdn.microsoft.com/en- us / library / system.net.httpwebrequest.aspx

Outras dicas

WebClient é, por vezes, mais fácil de usar do que WebRequest . Você pode querer dar uma olhada nisso.

Para JSON desserialização você vai querer olhar para o JavaScriptSerializer classe.

WebClient exemplo:

using (WebClient client = new WebClient ())
{
    //manipulate request headers (optional)
    client.Headers.Add (HttpRequestHeader.UserAgent, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");

    //execute request and read response as string to console
    using (StreamReader reader = new StreamReader(client.OpenRead(targetUri)))
    {
        string s = reader.ReadToEnd ();
        Console.WriteLine (s);
    }
}

marcado como o wiki no caso de alguém quiser atualizar o código

Quando se trata de dados postagem para um web site, System.Net.HttpWebRequest (a implementação específica do HTTP de WebRequest) é uma solução perfeitamente decente. Ele suporta SSL, solicitações assíncronas e um monte de outras coisas, e é bem documentado no MSDN.

A carga pode ser qualquer coisa: dados em formato JSON ou qualquer outra coisa - contanto que você definir a propriedade ContentType para algo que os espera servidor e compreende (application / json, text / json mais provável ou text / x-json), tudo vai ficar bem.

Um problema potencial quando usando HttpWebRequest a partir de um serviço do sistema: uma vez que utiliza o proxy do IE e informações de credenciais, o comportamento padrão pode ser um pouco estranho quando executado como o usuário LOCALSYSTEM (ou basicamente qualquer conta que não logon interativamente em a base regular). Definir as propriedades de proxy e de autenticação para Nothing (ou, como C # pessoas preferem chamá-la, null, eu acho) deve evitar isso.

Eu tenho usado WebRequest para interagir com websites. É a 'ferramenta' direito

Eu não posso comentar sobre o aspecto JSON da sua pergunta.

A resposta atualmente mais alta nominal é útil, mas não enviar ou receber JSON.

Aqui está um exemplo que usa JSON para enviar e receber:

Como postar objeto json em serviço web

E aqui está a questão StackOverflow que me ajudou a mais para resolver este problema:

Problemas envio e recebimento de JSON entre o serviço web ASP.net e cliente web ASP.Net

E aqui é outra questão relacionada:

JSON chamada com C #

Para converter de instância de objeto para JSON formatado corda e vice-versa, experimente Json.NET: http://json.codeplex.com/

Atualmente, estou usando-o para um projeto e é fácil de aprender e trabalhar com e ofertas alguma flexibilidade em termos de serialização e tipo personalizado conversores. Ela também suporta uma sintaxe LINQ para consultar a entrada json.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top