문제
나는 ASP.NET에서 전자 상거래 솔루션을 사용하고 있습니다. PayPal 웹사이트 결제 표준 서비스.그와 함께 나는 그들이 제공하는 서비스를 사용합니다(결제 데이터 전송)는 사용자가 결제를 완료한 후 다시 주문 정보를 전송합니다.마지막으로 해야 할 일은 POST 요청을 구문 분석하고 그 안에 정보를 유지하는 것입니다.HTTP 요청의 내용은 다음 형식입니다.
성공
first_name=제인+도
last_name=스미스
Payment_status=완료
payer_email=janedoesmith%40hotmail.com
Payment_gross=3.99
mc_currency=USD
custom=for+the+purchase+of+the+rare+book+Green+계란+%26+햄
기본적으로 나는 이 정보를 분석하고 이메일로 보내거나 DB에 저장하는 등 의미 있는 작업을 수행하고 싶습니다.내 질문은 구문 분석 자체가 수행되는 방식이 아니라 ASP.NET에서 원시 HTTP 데이터를 구문 분석하는 올바른 접근 방식이 무엇인지입니다.
해결책
onload 이벤트에 이와 유사한 것이 포함됩니다.
if (Request.RequestType == "POST")
{
using (StreamReader sr = new StreamReader(Request.InputStream))
{
if (sr.ReadLine() == "SUCCESS")
{
/* Do your parsing here */
}
}
}
그들은 (예:전체 웹페이지가 아님) 따라서 구문 분석을 마친 후에 이와 같은 작업을 수행할 수 있습니다.
Response.Clear();
Response.ContentType = "text/plain";
Response.Write("Thanks!");
Response.End();
업데이트:페이지 모델에서 많은 오버헤드를 방지하려면 일반 처리기(.ashx) 파일에서 이 작업을 수행해야 합니다.확인해 보세요 이 기사 .ashx 파일에 대한 자세한 내용은
다른 팁
사용 IHttpHandler 페이지 모델 오버헤드(필요하지 않음)를 피하고 이름 값 쌍을 직접 구문 분석할 필요가 없도록 Request.Form을 사용하여 값을 가져옵니다.PHP나 Classic ASP(또는 ASP.NET MVC)를 사용하고 있다고 가정해 보세요.;)
각 요청을 일부 파일에 저장하는 것이 좋습니다.
이렇게 하면 나중에 언제든지 실제 내용으로 돌아갈 수 있습니다.나중에 적대적인 엔디안, koi-8로 인코딩된 [...] 등을 발견하면 나에게 감사 인사를 전할 수 있습니다.
들어오는 데이터가 POST 형식으로 인코딩된 표준 형식인 경우 Request.Form 배열을 사용하면 모든 데이터를 처리하기 좋은 방식으로 제공할 수 있습니다.
그렇지 않다면 Request.InputStream을 사용하는 것 외에는 다른 방법을 볼 수 없습니다.
귀하의 질문을 올바르게 읽고 있다면 귀하가 다음을 찾고 있다고 생각합니다. 입력스트림 속성 요청 개체에.이는 Firehose 스트림이므로 재설정할 수 없다는 점을 명심하세요.