Dar POST em um Form e Redirecionar para Página Externa com ASP.NET

Recentemente estava programando o envio de informações de pagamento para o Komerci (estrutura de pagamentos da Redecard) e em certo momento precisaria realizar um POST a um endereço passando parâmetros/variáveis a ela. Antes de partir para a solução, vou revisar aqui alguns conceitos básicos que podem ser usados para esse tipo de envio:
  • Responde.Redirect: Por esse método só podemos passar os parêmetros via GET;
  • Server.Transfer: Por esse método podemos usar o POST mas se o destino estiver no mesmo domínio da aplicação; 
  • HttpWebRequest: Por esse método você pode fazer uma requisição através de uma conversão dos dados em bytes passando via POST/GET, contudo não há como fazer um redirecionamento;
  • WebClient: Por esse método pode-se realizar a passagem de parâmetros, mas também não consegue fazer o redirecionamento após o envio.
Analisando a melhor forma de fazer isso, encontrei um artigo no Code Project na qual baseei-me para fazer o meu e simplifiquei/facilitei mais o processo. Quando criamos um Web Form ele já vem com uma tag form. Adicionei dentro dele um Literal para adicionarmos meus parâmetros que serão gerados via Code-Behind.


Agora vamos criar um método que irá criar os inputs com atributo hidden e seus respectivos valores, montar um JavaScript que força o POST e "startar" o processo:

private void PostRedirectAspNet()
{
StringBuilder formulario = new StringBuilder();
// Adiciono todos os campos e seus valores que devem ser passados via POST
formulario.Append("<input type=\"hidden\" name=\"TRANSACAO\" value=\"04\">");
// Crio um JavaScript para forçar o POST na página corrente
formulario.Append("<script language=\"javascript\">");
formulario.Append("var theForm = document.forms['formAsp']; if (!theForm) { theForm = document.formAsp; } ");
formulario.Append("theForm.action = \"http://thiagomarcal.blogspot.com\";");
formulario.Append("theForm.method = \"post\";");
formulario.Append("theForm.submit();");
formulario.Append("</script>");
// Aplica o script gerado no Literal para iniciar o processo
FormularioPost.Text = formulario.ToString();
}
 
Assim, basta chamá-lo onde quiser que ele irá gerar as tags HTML contendo as informações desejadas,  realizará o POST e, consequentemente, seu redirecionamento. Bem simples, não? Esse método (de fazer) pode ser aproveitado para quaisquer linguagem de programação (PHP, Java, ASP, .NET, CodFusion, etc). O importante é como providenciar seu funcionamento de acordo com a lógica. 

0 comentários:

Postar um comentário