2009-10-21 304 views
1

我有以下場景來實現:處理http post請求

我有一個ASP.NET網站。點擊我網站上的按鈕,用戶將被重定向到第三方網站。當用戶在第三方網站上執行某些操作時,該網站會開始每隔1分鐘向我的網站發送一條特殊消息發送http post請求。

現在,問題是我應該處理和處理這些請求,但我不知道該怎麼做。請注意,從第三方網站發送的請求不會通過http發佈請求打開我的網站。這些請求是某種背景請求,即它們不直接打開頁面,因此應該使用其他方法處理它們。

我有Java解決方案。它被稱爲Servlet。通過servlet的幫助,我可以在Java中完成我想要的功能。但是,我需要ASP.NET中的相同功能?有沒有人有這個解決方案?

非常感謝!

P.S.僅供參考,這裏是servlet的Java代碼:

package payment; 

import java.io.IOException; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import beans.action.PaymentBean; 

public class EPayRequestCatcher extends javax.servlet.http.HttpServlet 
implements javax.servlet.Servlet{ 
    static final long serialVersionUID = 1L; 

    public EPayRequestCatcher() { 
     super(); 
    } 

    protected void doGet(HttpServletRequest request, 
     HttpServletResponse response) throws ServletException, IOException{ 

     doPost(request, response); 
    } 

    protected void doPost(HttpServletRequest request, 
     HttpServletResponse response) throws ServletException, IOException{ 

     String encoded = request.getParameter("encoded"); 
     PaymentUtil util = new PaymentUtil(); 
     if (encoded != null) { 
      String decoded = util.getDecodedB64Data(encoded); 
      int invStart = decoded.indexOf("=") + 1; 
      int invEnd = decoded.indexOf(":", invStart); 
      String invoice = decoded.substring(invStart, invEnd); 
      System.out.println("" + invoice); 
      String checksum = request.getParameter("checksum"); 
      PaymentBean bean = new PaymentBean(); 
      String responseStatus = bean.getEpayRequest(encoded, checksum); 
      if (!responseStatus.equals("")) { 
       String responseData = "INVOICE=" + invoice + ":STATUS=" + responseStatus + "\n"; 
       System.out.println(responseData); 
       response.getWriter().append(responseData); 
      } 
     } 
     else { 
      return; 
     } 
    } 
} 

回答

0

位訪問者,

如果我深知,外部網站會發布一些數據到你的ASP.NET網站;你會(可能)定義一個頁面來接收這個帖子,不知道如何處理它,對嗎?

那麼,你可以嘗試這樣的:

protected void Page_Load(object sender, EventArgs e) 
{ 
    string encoded = Request["encoded"]; 
    string checksum = Request["checksum"]; 

    // do stuff 

    Response.Write("some response"); 
} 

這可能是不夠的,這取決於你的需求。

HTH

+0

嗨,謝謝你的迴應。 我的問題不在於執行頁面。我的問題是處理和處理請求。即第三方發送請求和他們發送的請求的目的不是打開頁面。他們以某種方式在後臺發送它。現在讓我們說我想在接收請求時打開一個頁面。我如何獲得請求並說'嗨,我剛剛收到外部請求,讓我們打開一個頁面(或者讓我們修改會話中的現有頁面或其他任何內容)。 – TheVisitor 2009-10-21 20:09:58

+0

@Visitor,那麼其他方如何將這些數據發佈給你?他們需要一個URI來發送數據... – 2009-10-21 20:17:39

+0

@Rubens,當我向第三方站點發送POST請求時,我將我的URL作爲參數傳遞,所以他們知道它應該何時開始用他們的POSTs轟炸我 – TheVisitor 2009-10-21 22:09:26