如何在C#中获取HTTP Post数据?

时间:2013-11-22 18:04:07

标签: c# asp.net http-post

我正在使用Mailgun API。我需要为他们提供一个URL,然后他们会向我发送HTTP一些数据。

我将此网址(http://test.com/MailGun/Webhook.aspx)提供给Mailgun,以便他们发布数据。我有一个他们发送的参数名称列表(收件人,域,IP,...)。

我不确定如何在我的页面中发布该数据。 在Webhook.aspx页面中,我尝试了一些代码如下,但所有代码都是空的。

 lblrecipient.text= Request.Form["recipient"];

 lblip.Text= Request.Params["ip"];

 lbldomain.Text = Request.QueryString["domain"];

不确定要尝试获取发布的数据?

8 个答案:

答案 0 :(得分:45)

此代码将列出POST中发送的所有表单变量。通过这种方式,您可以查看是否具有帖子值的正确名称。

string[] keys = Request.Form.AllKeys;
for (int i= 0; i < keys.Length; i++) 
{
   Response.Write(keys[i] + ": " + Request.Form[keys[i]] + "<br>");
}

答案 1 :(得分:36)

此代码从HTTP请求中读取原始输入流。如果数据在Request.Form或其他模型绑定中不可用,或者您需要访问字节/文本,请使用此选项。

using(var reader = new StreamReader(Request.InputStream))
    content = reader.ReadToEnd();

答案 2 :(得分:8)

您只需使用Request["recipient"]“读取Web请求期间客户端发送的HTTP值”

  

从QueryString,Form,Cookies或ServerVariables访问数据   集合,你可以写Request [“key”]

来源: MSDN

更新:总结对话

为了查看MailGun发布到您网站的值,您需要从MailGun正在制作的Web请求中读取它们,将它们记录在某处,然后将其显示在您的网页上。

您应该有一个端点,MailGun会将POST值发送给您,另一个页面用于查看记录的值。

现在看来你有一页。因此,当您查看此页面并阅读请求值时,您正在读取您的请求中的值,而不是MailGun。

答案 3 :(得分:3)

你错过了一步。您需要在服务器上记录/存储值(mailgun是客户端)。然后,您需要在服务器上检索这些值(使用Web浏览器的PC将是客户端)。这些将是两个完全不同的aspx文件(或具有不同参数的相同文件)。

aspx第1页(mailgun拥有的那个):

var val = Request.Form["recipient"];
var file = new File(filename);
file.write(val);
close(file);

aspx第2页:

var contents = "";
if (File.exists(filename))
  var file = File.open(filename);
  contents = file.readtoend();
  file.close()

Request.write(contents);

答案 4 :(得分:1)

使用此:

    public void ShowAllPostBackData()
    {
        if (IsPostBack)
        {
            string[] keys = Request.Form.AllKeys;
            Literal ctlAllPostbackData = new Literal();
            ctlAllPostbackData.Text = "<div class='well well-lg' style='border:1px solid black;z-index:99999;position:absolute;'><h3>All postback data:</h3><br />";
            for (int i = 0; i < keys.Length; i++)
            {
                ctlAllPostbackData.Text += "<b>" + keys[i] + "</b>: " + Request[keys[i]] + "<br />";
            }
            ctlAllPostbackData.Text += "</div>";
            this.Controls.Add(ctlAllPostbackData);
        }
    }

答案 5 :(得分:0)

在Web浏览器中,打开开发人员控制台(Chrome和IE中的F12),然后打开网络选项卡并查看请求和响应数据。另一种选择 - 使用Fiddler(http://fiddler2.com/)。

当您在发送到页面时看到POST请求时,请查看查询字符串和标题。您将看到您的数据是以查询字符串还是以表格形式出现 - 或者根本不会将其发送到您的页面。

更新:抱歉,不得不首先查看MailGun API,它们不会通过您的浏览器,请求直接来自他们的服务器。从MailGun获得POST时,您必须调试并检查Request.Params的所有成员。

答案 6 :(得分:0)

试试这个

string[] keys = Request.Form.AllKeys;
var value = "";
for (int i= 0; i < keys.Length; i++) 
{
   // here you get the name eg test[0].quantity
   // keys[i];
   // to get the value you use
   value = Request.Form[keys[i]];
}

答案 7 :(得分:0)

在我的情况下,因为我将发布数据分配给标题,所以这是我得到的方式:

protected void Page_Load(object sender, EventArgs e){
    ...
    postValue = Request.Headers["Key"];

这就是我将值和键附加到POST上的方式:

var request = new NSMutableUrlRequest(url){
    HttpMethod = "POST", 
    Headers = NSDictionary.FromObjectAndKey(FromObject(value), FromObject("key"))
};
webView.LoadRequest(request);