Array
(
)

Enviar post usando WebRequestMethods.Http.Post, caracteres estranhos

Murilo Junqueira
   - 22 jan 2010

Olá pessoal, estou fazendo a implementação do pagamento com visa em meu site, estou enviando a solicitação via post como deve ser em asp.net C#, utilizando o WebRequestMethods.Http.Post, já tentei enviar esse post de varias maneiras, assim vai correto e funciona, o problema é que a pagina que recebe o post e é executada, fica com varios caracteres especiais onde deveria ter acentuação Ç etc...

no exemplo que vi a parte do código que evitaria isso seria usar UTF8, mais já tentei mudar e o resultado sempre é o mesmo, os benditos caracteres especiais, se eu enviar o post em asp classico, o mesmo post, não fica os caracteres especiais...

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

segue código completo caso possam me ajudar..

Stream requestStream = null;
WebResponse response = null;
StreamReader reader = null;

string urlRequest = "https://www.meusite.com.br/app/componente.exe";

StringBuilder urlEncode = new StringBuilder();

string paramUrlCompleta = "";

string tid = "000000";
string merchid = "lojaloja";
string order = "produtos";
string free = "";
string authenttype = "0";

paramUrlCompleta = "tid=" + tid;
paramUrlCompleta += "&merchid=" + merchid;
paramUrlCompleta += "&order=" + order;
paramUrlCompleta += "&orderid=" + orderid;
paramUrlCompleta += "&free=" + free;
paramUrlCompleta += "&price=" + price;
paramUrlCompleta += "&authenttype=" + authenttype;
paramUrlCompleta += "&damount=" + damount;

// Separando cada parâmetro
Char[] reserved = { '?', '=', '&' };

// alocando o bytebuffer
byte[] byteBuffer = null;

int i = 0, j;
while (i < paramUrlCompleta.Length)
{
j = paramUrlCompleta.IndexOfAny(reserved, i);
if (j == -1)
{
urlEncode.Append(paramUrlCompleta.Substring(i, paramUrlCompleta.Length - i));
break;
}
urlEncode.Append(paramUrlCompleta.Substring(i, j - i));
urlEncode.Append(paramUrlCompleta.Substring(j, 1));
i = j + 1;
}

// codificando em UTF8 (evita que sejam mostrados códigos malucos em caracteres especiais
byteBuffer = Encoding.UTF8.GetBytes(urlEncode.ToString());
//byteBuffer = Encoding.Default.GetBytes(urlEncode.ToString());

WebRequest request = WebRequest.Create(urlRequest);
request.Method = WebRequestMethods.Http.Post;
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteBuffer.Length;
requestStream = request.GetRequestStream();
requestStream.Write(byteBuffer, 0, byteBuffer.Length);
requestStream.Close();

// 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);

String Dados = "";

// Lê cada byte para preencher meu string
while (count > 0)
{
Dados += new String(charBuffer, 0, count);
count = reader.Read(charBuffer, 0, charBuffer.Length);
}

if (requestStream != null) requestStream.Close();
if (response != null) response.Close();
if (reader != null) reader.Close();

//lbRetorno.Text = Dados;
//System.Web.HttpContext.Current.Response.Write(Dados);
System.Web.HttpContext context = System.Web.HttpContext.Current;
context.Response.Clear();
context.Response.Write(Dados);
context.Response.End();

Murilo Junqueira
   - 22 jan 2010

Descobri que o problema não da no codigo informado e sim em algo da janela aberta que fica com as configurações alteradas, tipo o codigo html que recebo se eu executar em uma pagina aberta limpa não da este problema, e testei um em asp classico que tenho nesta janela aberta pelo aspx e deu o problema de formatação tb,
como ao abrir a janela limpar qualquer tipo de formatação de encoding etc e deixar padrão?

0
|
0

Murilo Junqueira
   - 23 jan 2010

Então descobri como contornar o erro nesta pagina em questão, colocando no web.config só que fazendo isso corrige este problema, mais o resto do meu site, conteudo do banco de dados ficam com caracteres especiais, tentei colocar o iso somente na pagina que dava o erro e enviava o post errado mais só funciona se colocar no web.config, alguem sabe como fazer isso sem ser colocando no web.config? tentei no header da pagina que envia mais não funciona, como se não tivesse a declaração.. Obrigado!

0
|
0

Eleuterio Gonzalez
   - 16 fev 2010

Veja se ajudam:

Caracter estranhos em texto!
http://social.msdn.microsoft.com/Forums/pt-BR/vscsharppt/thread/9271ccaf-8def-43d2-a5bf-c5fedfdbaf68/


Encode de caracteres
http://social.msdn.microsoft.com/Forums/pt-BR/asppt/thread/01872c83-7563-4341-8dfe-79878b5c7521

0
|
0