2009-05-26 29 views
13

Estoy tratando de enviar una gran cantidad de datos a un controlador HTTP. No puedo enviarlo usando GET debido al límite de longitud de la URL, así que decidí enviarlo por correo. El problema es que no puedo entender los valores. context.Request.Form muestra que tiene 0 elementos. Entonces, ¿hay alguna manera de que pueda POSTAR datos a HttpHandler?Cómo enviar datos a ASP.NET HttpHandler?

+0

¿Qué estás usando para hacer la solicitud? HttpWebRequest? –

+0

Estoy haciendo una llamada Ajax usando Jquery –

+0

¿Podría proporcionar un ejemplo de código de lo que está haciendo en el lado de la solicitud? – Deeksy

Respuesta

1

Los datos de POST que está enviando a su controlador HTTP deben estar en el formato querystring a=b&c=d. Y puede recuperarlo en el lado del servidor usando Request["a"] (devolverá b), y así sucesivamente.

+0

Lo siento, pero no lo entiendo. ¿Cómo serían los datos? PUBLICADO si lo envío en una Querystring: S. ¿Puede explicar un poco más lo que está sugiriendo? Si está diciendo que debería crear una cadena de consulta y anexarla a mi URL, eso no funcionaría debido al límite de longitud de la URL –

+0

Creo que quiere codificar en URL los datos, delimitados por signos y (&), como en una cadena de consulta, excepto en el cuerpo de la solicitud, no en la URL. JQuery debe manejar esto automáticamente. –

11

Tener un código para observar ayudaría a diagnosticar el problema. ¿Has intentado algo como ésto? código

jQuery:

$.post('test.ashx', 
     {key1: 'value1', key2: 'value2'}, 
     function(){alert('Complete!');}); 

Luego, en el método de ProcessRequest(), usted debería ser capaz de hacer:

string key1 = context.Request.Form["key1"]; 

También puede comprobar el tipo de solicitud en el ProcessRequest() para depurar el problema.

if(context.Request.RequestType == "POST") 
{ 
    // Request should have been sent successfully 
} 
else 
{ 
    // Request was sent incorrectly somehow 
} 
2

que estaba teniendo el mismo problema, y ​​finalmente di cuenta de que la fijación del tipo de contenido como "json" fue el tema ...

contentType: "application/json; charset=utf-8" 

Esa es una línea de algunos tutoriales populares sugieren que usted agregue en la llamada $ ajax, y funciona bien con ASPx WebServices, pero por alguna razón no lo hace para un HttpHandler usando POST.

Difícil de detectar ya que los valores en la cadena de consulta funcionan bien (otra técnica que se ve en la web, aunque no tiene mucho sentido usar POST para eso).

2

También tuve el mismo problema. Fue un problema de cliente/AJAX. Tuve que configurar el encabezado de solicitud de llamada AJAX "ContentType" a

application/x-www-form-urlencoded 

para que funcione.

1

Se enfrentó un problema similar. Después de corregir todos los problemas, había una cosa más que omití en web.config - para cambiar el verbo como * O GET,POST. Después de eso todo funcionó bien.

<httpHandlers> 
    ... 
    <add verb="*" path="test.ashx" type="Handlers.TestHandler"/> 
</httpHandlers> 
1

campos POST se encuentran en

HttpContext.Request.Params 

Para recuperarlos puede utilizar

var field = HttpContext.Request.Params["fieldName"]; 
Cuestiones relacionadas