Подтвердить что ты не робот

Как получить данные HTTP-сообщения в С#?

Я использую API Mailgun. Существует раздел, в котором мне нужно указать 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"];

Не уверен, что попытаться получить опубликованные данные?

4b9b3361

Ответ 1

В этом коде будут перечислены все переменные формы, которые отправляются в POST. Таким образом, вы можете увидеть, есть ли у вас имена имен.

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

Ответ 2

Этот код считывает необработанный входной поток из HTTP-запроса. Используйте это, если данные недоступны в запросах .Form или других привязках к модели или если вам нужен доступ к байтам/тексту, как он есть.

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

Ответ 3

Вы можете просто использовать Request["recipient"] для "чтения значений HTTP, отправленных клиентом во время веб-запроса"

Чтобы получить доступ к данным из QueryString, Form, Cookies или ServerVariables коллекций, вы можете написать Request [ "key" ]

Источник: MSDN

Обновление: сводка беседы

Чтобы просмотреть значения, отправляемые MailGun на ваш сайт, вам нужно будет прочитать их из веб-запроса, который MailGun делает, записывать где-нибудь и затем отображать на своей странице.

У вас должна быть одна конечная точка, по которой MailGun будет отправлять значения POST и другую страницу, которую вы используете для просмотра записанных значений.

Похоже, что сейчас у вас есть одна страница. Поэтому, когда вы просматриваете эту страницу и читаете значения "Запрос", вы читаете значения из вашего запроса, а не MailGun.

Ответ 4

Вам не хватает шага. Вам необходимо зарегистрировать/сохранить значения на вашем сервере (mailgun - клиент). Затем вам нужно получить эти значения на своем сервере (ваш компьютер с вашим браузером будет клиентом). Это будут два совершенно разных файла aspx (или один и тот же с разными параметрами).

aspx page 1 (тот, который имеет 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);

Ответ 5

В веб-браузере откройте консоль разработчика (F12 в Chrome и IE), затем откройте вкладку сети и посмотрите данные запроса и ответа. Другой вариант - использовать Fiddler (http://fiddler2.com/).

Когда вы увидите запрос POST, когда он отправляется на вашу страницу, просмотрите строку запроса и заголовки. Вы увидите, попадают ли ваши данные в строку запроса или в форму - или, может быть, она вообще не отправляется на вашу страницу.

UPDATE: извините, сначала нужно было посмотреть на API MailGun, они не проходят через ваш браузер, запросы поступают напрямую со своего сервера. Вам придется отлаживать и проверять всех членов Request.Params, когда вы получаете POST из MailGun.

Ответ 6

Используйте это:

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

Ответ 7

Попробуйте это

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