2009-05-26 12 views
13

Sto cercando di inviare una grande quantità di dati a un gestore HTTP. Non posso inviarlo usando GET a causa del limite di lunghezza dell'URL, quindi ho deciso di postarlo. Il problema è che non riesco ad ottenere i valori. context.Request.Form mostra che ha 0 elementi. Quindi c'è un modo in cui posso inviare i dati a un HttpHandler?Come inviare i dati a ASP.NET HttpHandler?

+0

Che cosa stai usando per fare la richiesta? HttpWebRequest? –

+0

Sto effettuando una chiamata Ajax utilizzando Jquery –

+0

Potresti fornire un esempio di codice di ciò che stai facendo sul lato della richiesta? – Deeksy

risposta

1

I dati POST che si inviano al gestore HTTP devono essere in formato querystring a=b&c=d. E puoi recuperarlo sul lato server usando Request["a"] (restituirà b) e così via.

+0

Scusa, ma non capisco. POSTATO se lo mando in una Querystring: S. Puoi spiegare un po 'di più quello che stai suggerendo? Se stai dicendo che dovrei creare una querystring e aggiungerla al mio URL di quella non funzionerebbe a causa del limite di lunghezza dell'URL –

+0

Penso che intenda codificare URL dei dati, delimitati da e commerciali (&), proprio come in una stringa di query, eccetto nel corpo della richiesta, non nell'URL. JQuery dovrebbe gestirlo automaticamente. –

11

Avere un codice da guardare potrebbe aiutare a diagnosticare il problema. Hai provato qualcosa del genere? Codice

jQuery:

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

Poi nel metodo ProcessRequest(), si dovrebbe essere in grado di fare:

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

è anche possibile controllare il tipo di richiesta nel ProcessRequest() per eseguire il debug del problema.

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

ho avuto lo stesso problema, e alla fine capito che l'impostazione del tipo di contenuto come "JSON" è stato il tema ...

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

Questa è una linea di alcuni tutorial popolari suggeriscono di aggiungere nella chiamata $ ajax e funziona bene con ASPx WebServices, ma per qualche motivo non lo fa per HttpHandler che usa POST.

Difficile da individuare poiché i valori nella stringa di query funzionano correttamente (un'altra tecnica vista nel web, sebbene non abbia senso usare POST per questo).

2

Ho anche avuto lo stesso problema. Era un problema client/AJAX. Ho dovuto impostare l'intestazione di richiesta di chiamata AJAX "ContentType" su

application/x-www-form-urlencoded 

per farlo funzionare.

1

Di fronte a problemi simili. Dopo aver risolto tutti i problemi, c'era ancora una cosa che mi mancava in web.config - per cambiare verbo come * O GET,POST. Dopo che tutto ha funzionato bene.

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

campi POST sono contenute in

HttpContext.Request.Params 

Per recuperarli è possibile utilizzare

var field = HttpContext.Request.Params["fieldName"]; 
Problemi correlati