¿Cómo obtener los datos de HTTP Post en C #?

Estoy usando la API de Mailgun. Hay una sección que necesito proporcionarles una URL, luego ellos me enviarán algunos datos a HTTP.

Proporciono esta URL ( http://test.com/MailGun/Webhook.aspx ) a Mailgun, para que puedan publicar datos. Tengo una lista de nombres de parámetros que están enviando como (destinatario, dominio, ip, …).

No estoy seguro de cómo obtener los datos publicados en mi página. En la página webhook.aspx probé algunos códigos de la siguiente manera, pero todos están vacíos.

lblrecipient.text= Request.Form["recipient"]; lblip.Text= Request.Params["ip"]; lbldomain.Text = Request.QueryString["domain"]; 

¿No está seguro de qué tratar de obtener los datos publicados?

Este código enumerará todas las variables de formulario que se envían en una POST. De esta forma, puede ver si tiene los nombres propios de los valores de publicación.

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

Este código lee la secuencia de entrada sin procesar de la solicitud HTTP. Úselo si los datos no están disponibles en Request.Form u otros enlaces de modelo o si necesita acceder a los bytes / texto tal como vienen.

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

Simplemente puede usar Request["recipient"] para “leer los valores HTTP enviados por un cliente durante una solicitud web”

Para acceder a los datos de las colecciones QueryString, Form, Cookies o ServerVariables, puede escribir Request [“key”]

Fuente: MSDN

Actualización: Resumiendo la conversación

Para ver los valores que MailGun está publicando en su sitio, deberá leerlos desde la solicitud web que realiza MailGun, registrarlos en algún lugar y luego mostrarlos en su página.

Debería tener un punto final al que MailGun enviará los valores POST y otra página que use para ver los valores grabados.

Parece que ahora mismo tienes una página. Entonces, cuando ve esta página y lee los valores de Solicitud, está leyendo los valores de SU solicitud, no de MailGun.

Te estás perdiendo un paso. Necesita registrar / almacenar los valores en su servidor (mailgun es un cliente). Luego necesita recuperar esos valores en su servidor (su PC con su navegador web será un cliente). Estos serán dos archivos aspx totalmente diferentes (o el mismo con diferentes parámetros).

aspx página 1 (la que tiene la pistola de correo):

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

aspx página 2:

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

Utilizar esta:

  public void ShowAllPostBackData() { if (IsPostBack) { string[] keys = Request.Form.AllKeys; Literal ctlAllPostbackData = new Literal(); ctlAllPostbackData.Text = "

All postback data:


"; for (int i = 0; i < keys.Length; i++) { ctlAllPostbackData.Text += "" + keys[i] + ": " + Request[keys[i]] + "
"; } ctlAllPostbackData.Text += "
"; this.Controls.Add(ctlAllPostbackData); } }

En el navegador web, abra la consola de desarrollador (F12 en Chrome e IE), luego abra la pestaña de red y mire los datos de solicitud y respuesta. Otra opción: use Fiddler ( http://fiddler2.com/ ).

Cuando vea la solicitud POST mientras se envía a su página, busque la cadena de consulta y los encabezados. Verá si sus datos vienen en cadena de consulta o como formulario, o tal vez no se envíen a su página.

ACTUALIZACIÓN : lo siento, primero tuve que mirar las API de MailGun, no pasan por su navegador, las solicitudes vienen directamente de su servidor. Deberá depurar y examinar todos los miembros de Request.Params cuando obtenga el POST de MailGun.

Prueba esto

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