Como enviar uma requisição do tipo POST em ASP.NET?

 

Segue o exemplo todo comentado, é só copiar e se precisar, fazer alguns ajustes para adequar às suas necessidades. Testado e funcionando com .NET 2.0

 

using System;

using System.Net;

using System.IO;

using System.Text;

using System.Web; // não esqueça de fazer referência a dll em seu projeto

 

namespace Microsoft.Samples.QuickStart.HowTo.Net.WebRequests

{

    static class ClientPOST

    {

        public static void Main(string[] args)

        {

            // Enviando para a página do terra os parametros pelo método post

            GetPage("http://www.terra.com.br", "parametro1=valor1&parametro2=valor2");

 

            Console.WriteLine();

            Console.WriteLine("Pressione algo para continuar...");

            Console.ReadLine();

        }

 

        private static void GetPage(String url, String query)

        {

            // Declarações necessárias

            Stream requestStream = null;

            WebResponse response = null;

            StreamReader reader = null;

 

            try

            {

                WebRequest request = WebRequest.Create(url);

                request.Method = WebRequestMethods.Http.Post;

 

                // Neste ponto, você está setando a propriedade ContentType da página

                // para urlencoded para que o comando POST seja enviado corretamente

                request.ContentType = "application/x-www-form-urlencoded";

 

                StringBuilder urlEncoded = new StringBuilder();

 

                // Separando cada parâmetro

                Char[] reserved = { '?', '=', '&' };

 

                // alocando o bytebuffer

                byte[] byteBuffer = null;

 

                // caso a URL seja preenchida

                if (query != null)

                {

                    int i = 0, j;

                    // percorre cada caractere da url atraz das palavras reservadas para separação

                    // dos parâmetros

                    while (i < query.Length)

                    {

                        j = query.IndexOfAny(reserved, i);

                        if (j == -1)

                        {

                            urlEncoded.Append(query.Substring(i, query.Length - i));

                            break;

                        }

                        urlEncoded.Append(query.Substring(i, j - i));

                        urlEncoded.Append(query.Substring(j, 1));

                        i = j + 1;

                    }

                    // codificando em UTF8 (evita que sejam mostrados códigos malucos em caracteres especiais

                    byteBuffer = Encoding.UTF8.GetBytes(urlEncoded.ToString());

 

                    request.ContentLength = byteBuffer.Length;

                    requestStream = request.GetRequestStream();

                    requestStream.Write(byteBuffer, 0, byteBuffer.Length);

                    requestStream.Close();

                }

                else

                {

                    request.ContentLength = 0;

                }

 

                // Dados recebidos

                response = request.GetResponse();

                Stream responseStream = response.GetResponseStream();

 

                // Codifica os caracteres especiais para que possam ser exibidos corretamente

                System.Text.Encoding encoding = System.Text.Encoding.Default;

 

                // Preenche o reader

                reader = new StreamReader(responseStream, encoding);

 

                Char[] charBuffer = new Char[256];

                int count = reader.Read(charBuffer, 0, charBuffer.Length);

 

                StringBuilder Dados = new StringBuilder();

 

                // Lê cada byte para preencher meu stringbuilder

                while (count > 0)

                {

                    Dados.Append(new String(charBuffer, 0, count));

                    count = reader.Read(charBuffer, 0, charBuffer.Length);

                }

 

                // Imprimo o que recebi

                Console.Write(Dados);

            }

            catch (Exception e)

            {

                // Ocorreu algum erro

                Console.Write("Erro: " + e.Message);

            }

            finally

            {

                // Fecha tudo

                if (requestStream != null)

                    requestStream.Close();

                if (response != null)

                    response.Close();

                if (reader != null)

                    reader.Close();

            }

        }

    }

}

 

Conheça o nosso Parceiro Códigofonte.net