web-dev-qa-db-fra.com

Comment obtenir les données HTTP Post en C #?

J'utilise l'API Mailgun. Il y a une section que je dois leur fournir une URL, puis ils vont à HTTP Post certaines données à moi.

Je fournis cette URL ( http://test.com/MailGun/Webhook.aspx ) à Mailgun, afin qu'ils puissent poster des données. J'ai une liste de noms de paramètres qu'ils envoient comme (destinataire, domaine, ip, ...).

Je ne sais pas comment obtenir ces données publiées sur ma page. Dans la page Webhook.aspx, j’ai essayé le code comme suit, mais tous sont vides.

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

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

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

Vous ne savez pas quoi essayer d'obtenir les données postées?

41
Alma

Ce code listera toutes les variables de formulaire envoyées dans un POST. De cette façon, vous pouvez voir si vous avez les noms propres des valeurs de publication.

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

Ce code lit le flux d'entrée brut à partir de la requête HTTP. Utilisez cette option si les données ne sont pas disponibles dans Request.Form ou dans d'autres liaisons de modèle, ou si vous avez besoin d'accéder aux octets/texte tels quels.

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

Vous pouvez simplement utiliser Request["recipient"] pour "lire les valeurs HTTP envoyées par un client lors d’une requête Web"

Pour accéder aux données des collections QueryString, Form, Cookies ou ServerVariables, vous pouvez écrire à Request ["key"].

Source: MSDN

Mise à jour: synthèse de la conversation

Pour afficher les valeurs que MailGun publie sur votre site, vous devez les lire à partir de la requête Web effectuée par MailGun, les enregistrer quelque part, puis les afficher sur votre page.

Vous devez avoir un terminal sur lequel MailGun enverra les valeurs POST) et une autre page que vous utiliserez pour afficher les valeurs enregistrées.

Il semble qu’à l’heure actuelle, vous avez une page. Ainsi, lorsque vous consultez cette page et que vous lisez les valeurs de la demande, vous lisez les valeurs de VOTRE demande, et non de MailGun.

8

Vous manquez une étape. Vous devez vous connecter/stocker les valeurs sur votre serveur (mailgun est un client). Ensuite, vous devez récupérer ces valeurs sur votre serveur (votre ordinateur avec votre navigateur Web sera un client). Ce seront deux fichiers aspx totalement différents (ou le même avec des paramètres différents).

aspx page 1 (celle de mailgun):

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

aspx page 2:

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

Request.write(contents);
3
Gerard ONeill

Utilisez ceci:

    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

Dans le navigateur Web, ouvrez la console du développeur (F12 dans Chrome et IE), puis ouvrez l'onglet Réseau et regardez les données de la demande et de la réponse. Une autre option - utilisez Fiddler ( http: //fiddler2.com/ ).

Lorsque vous verrez la demande POST telle qu'elle est envoyée sur votre page, examinez la chaîne de requête et les en-têtes. Vous verrez si vos données sont présentées sous forme de chaîne de requête ou sous forme - ou peut-être n'est pas envoyé à votre page du tout.

[~ # ~] mettre à jour [~ # ~] : désolé, je devais d'abord regarder les API MailGun, elles ne passent pas par votre navigateur, les demandes arrivent directement depuis leur serveur. Vous devrez déboguer et examiner tous les membres de Request.Params lorsque vous obtiendrez le POST de MailGun.

0
Roman Polunin

Essaye ça

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

Dans mon cas, parce que j'ai attribué les données de publication à l'en-tête, voici comment je l'obtiens:

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

Voici comment j'ai attaché la valeur et la clé au POST:

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