2009-10-21 184 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