Pergunta

Estou fazendo uma solução de comércio eletrônico em ASP.NET que usa Padrão de pagamentos do site do PayPal serviço.Junto com isso utilizo um serviço que eles oferecem (Transferência de dados de pagamento) que envia informações de pedido de devolução depois que um usuário conclui um pagamento.A última coisa que preciso fazer é analisar a solicitação POST deles e persistir as informações nela contidas.O conteúdo da solicitação HTTP está neste formato:

SUCESSO
primeiro_nome = Jane + Doe
sobrenome_nome=Smith
payment_status=Concluído
payer_email=janedoesmith%40hotmail.com
pagamento_bruto=3,99
mc_currency=USD
custom=Para+a+compra+do+livro+raro+Verde+Ovos+%26+Presunto

Basicamente quero analisar essas informações e fazer algo significativo, como enviá-las por e-mail ou salvá-las no banco de dados.Minha pergunta é qual é a abordagem correta para analisar dados HTTP brutos no ASP.NET, e não como a análise em si é feita.

Foi útil?

Solução

Algo assim colocado no seu evento onload.

if (Request.RequestType == "POST")
{
    using (StreamReader sr = new StreamReader(Request.InputStream))
    {
        if (sr.ReadLine() == "SUCCESS")
        {
            /* Do your parsing here */
        }
    }
}

Lembre-se de que eles podem querer algum tipo especial de resposta para (ou seja;não sua página completa), então você pode fazer algo assim depois de terminar a análise.

Response.Clear();
Response.ContentType = "text/plain";
Response.Write("Thanks!");
Response.End();

Atualizar:isso deve ser feito em um arquivo Generic Handler (.ashx) para evitar muita sobrecarga do modelo de página.Confira Este artigo para obter mais informações sobre arquivos .ashx

Outras dicas

Use um IHttpHandler e evite a sobrecarga do modelo Page (que você não precisa), mas use Request.Form para obter os valores, para que você não precise analisar pares de nomes e valores por conta própria.Apenas finja que você está em PHP ou ASP clássico (ou ASP.NET MVC, nesse caso).;)

Eu recomendo fortemente salvar cada solicitação em algum arquivo.

Dessa forma, você sempre poderá voltar ao conteúdo real mais tarde.Você pode me agradecer mais tarde, quando encontrar aquele endian hostil, codificado em koi-8, [...], seja lá o que for que deixou seu analisador perplexo...

Bem, se os dados recebidos estiverem em um formato POST codificado em formato padrão, o uso da matriz Request.Form fornecerá todos os dados de uma maneira agradável de manusear.

Caso contrário, não consigo ver outra maneira senão usar Request.InputStream.

Se estou lendo sua pergunta corretamente, acho que você está procurando o Propriedade InputStream no objeto Solicitação.Tenha em mente que este é um fluxo de firehose, então você não pode redefini-lo.

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