web-dev-qa-db-ja.com

C#でHTTP Postデータを取得する方法は?

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

投稿されたデータを取得するために何をしようとしたらよいかわかりませんか?

41
Alma

このコードは、POSTで送信されているすべてのフォーム変数をリストします。これにより、投稿値の適切な名前があるかどうかを確認できます。

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

このコードは、HTTP要求から生の入力ストリームを読み取ります。 Request.Formまたは他のモデルバインディングでデータが利用できない場合、またはバイト/テキストにアクセスする必要がある場合に使用します。

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

単純にRequest["recipient"]を使用して、「Webリクエスト中にクライアントから送信されたHTTP値を読み取る」ことができます。

QueryString、Form、Cookie、またはServerVariablesコレクションからデータにアクセスするには、Request ["key"]を記述できます

ソース: MSDN

更新:会話の要約

MailGunがサイトに投稿している値を表示するには、MailGunが作成しているWebリクエストから値を読み取り、どこかに記録してからページに表示する必要があります。

MailGunがPOST値を送信するエンドポイントと、記録された値を表示するために使用する別のページが必要です。

現在、1ページあるようです。したがって、このページを表示してリクエスト値を読むと、MailGunではなく、リクエストから値を読んでいることになります。

8

ステップがありません。サーバーに値を記録/保存する必要があります(mailgunはクライアントです)。次に、サーバーでこれらの値を取得する必要があります(Webブラウザーを備えたPCがクライアントになります)。これらは、まったく異なる2つの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);
3
Gerard ONeill

これを使って:

    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);
        }
    }
1
Tone Škoda

Webブラウザーで、開発者コンソール(ChromeおよびIEのF12)を開き、[ネットワーク]タブを開いて、要求と応答のデータを確認します。別のオプション-Fiddlerを使用します( http://fiddler2.com/ )。

ページに送信されているときにPOSTリクエストが表示されたら、クエリ文字列とヘッダーを調べます。データがクエリ文字列で送信されるのか、フォームとして送信されるのか、あるいはページにまったく送信されていないのかがわかります。

UPDATE:申し訳ありませんが、最初にMailGun APIを確認する必要がありました。ブラウザを経由せず、リクエストはサーバーから直接送信されます。 MailGunからPOSTを取得したら、Request.Paramsのすべてのメンバーをデバッグおよび検査する必要があります。

0
Roman Polunin

これを試して

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
gdmanandamohon

私の場合、投稿データをヘッダーに割り当てたため、次のように取得します。

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);
0
Mr.K