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

问题描述 投票:40回答:8

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

我将此URL(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"];

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

c# asp.net http-post
8个回答
46
投票

此代码将列出POST中发送的所有表单变量。这样,您可以查看是否具有post值的正确名称。

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

37
投票

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

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

8
投票

您可以简单地使用Request["recipient"]“读取Web请求期间客户端发送的HTTP值”

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

资料来源:MSDN

更新:总结对话

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

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

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


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);

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);
        }
    }

0
投票

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

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

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


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]];
}

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);
© www.soinside.com 2019 - 2024. All rights reserved.