我正在使用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"];
不确定要尝试获取发布的数据?
此代码将列出POST中发送的所有表单变量。这样,您可以查看是否具有post值的正确名称。
string[] keys = Request.Form.AllKeys;
for (int i= 0; i < keys.Length; i++)
{
Response.Write(keys[i] + ": " + Request.Form[keys[i]] + "<br>");
}
此代码从HTTP请求中读取原始输入流。如果数据在Request.Form或其他模型绑定中不可用,或者您需要访问字节/文本,请使用此选项。
using(var reader = new StreamReader(Request.InputStream))
content = reader.ReadToEnd();
您可以简单地使用Request["recipient"]
“读取Web请求期间客户端发送的HTTP值”
要从QueryString,Form,Cookies或ServerVariables集合访问数据,您可以编写Request [“key”]
资料来源:MSDN
更新:总结对话
为了查看MailGun发布到您网站的值,您需要从MailGun正在制作的Web请求中读取它们,将它们记录在某处,然后在页面上显示它们。
您应该有一个端点,MailGun将发送POST值,另一个页面用于查看记录的值。
现在看来你有一页。因此,当您查看此页面并阅读请求值时,您正在读取您的请求中的值,而不是MailGun。
你错过了一步。您需要在服务器上记录/存储值(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);
用这个:
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);
}
}
在Web浏览器中,打开开发人员控制台(Chrome和IE中的F12),然后打开网络选项卡并查看请求和响应数据。另一种选择 - 使用Fiddler(http://fiddler2.com/)。
当您在发送到页面时看到POST请求时,请查看查询字符串和标题。您将看到您的数据是以查询字符串还是以表单形式出现 - 或者可能根本没有发送到您的页面。
更新:抱歉,不得不首先查看MailGun API,它们不通过您的浏览器,请求直接来自他们的服务器。从MailGun获取POST时,您必须调试并检查Request.Params的所有成员。
试试这个
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]];
}
在我的情况下,因为我将帖子数据分配给标题,这就是我得到它的方式:
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);