2013-06-08 19 views
8

Ho bisogno di ascoltare ed elaborare una stringa HTTP POST in un gestore HTTP.Ricezione di un POST HTTP nel gestore HTTP?

Di seguito si riporta il codice per la pubblicazione la stringa al gestore -

string test = "charset = UTF-8 & param1 = val1 & param2 = val2 & param3 = val3 & param4 = val4; 
byte[] data = Encoding.UTF8.GetBytes(test); 
PostData("http://localhost:53117/Handler.ashx", data); 

Quello che ho cercato in Handler è -

public void ProcessRequest(HttpContext context) 
    { 
     var value1 = context.Request["param1"]; 
    } 

Ma il suo nulla. Come posso ascoltare e ottenere i valori dei parametri in Handler?

risposta

23

Lei non sembra essere utilizzando una delle codifiche del modulo standard, invece ti sembra di essere reinventare un protocollo personalizzato, quindi non si può fare affidamento su il server ASP.NET per essere in grado di analizzare questa richiesta. Si dovrà leggere i valori direttamente dal InputStream:

public void ProcessRequest(HttpContext context) 
{ 
    using (var reader = new StreamReader(context.Request.InputStream)) 
    { 
     // This will equal to "charset = UTF-8 & param1 = val1 & param2 = val2 & param3 = val3 & param4 = val4" 
     string values = reader.ReadToEnd(); 
    } 
} 

Se d'altra parte si utilizzano alcuni richiesta di codifica standard come application/x-www-form-urlencoded si sarà in grado di leggere i parametri come al solito.

Ecco come tale richiesta payload potrebbe essere simile:

POST /Handler.ashx HTTP/1.1 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 47 
Connection: close 

param1=val1&param2=val2&param3=val3&param4=val4 

Per poter inviare tale richiesta è possibile utilizzare un WebClient:

using (var client = new WebClient()) 
{ 
    var values = new NameValueCollection 
    { 
     { "param1", "value1" }, 
     { "param2", "value2" }, 
     { "param3", "value3" }, 
     { "param4", "value4" }, 
    }; 
    byte[] result = client.UploadValues(values); 
} 

Ora sul server è possibile leggere i valori così:

public void ProcessRequest(HttpContext context) 
{ 
    var value1 = context.Request["param1"]; 
    var value2 = context.Request["param2"]; 
    ... 
} 
+0

Grazie mille! Uso AngularJS per la funzionalità di ridimensionamento delle immagini front-end, quindi carica un batch (array) di oggetti JSON (contenente nome, dimensioni, i dati dell'immagine stessa (base64) e così via) sul server. Stavo riscontrando problemi nel leggere il carico utile (se si aggiungono parametri, i "dati:" non possono essere trovati/letti serveride (o bene, non si sa come)) Quindi, usando lo streamReader ora funziona bene :) GRAZIE YOU :) – LittleTiger

+0

@Darin Ti preghiamo di pensare che potresti aiutarmi con questa domanda http://goo.gl/qiOdmT – Axel

2

Change

var value1 = context.Request["param1"]; 

a

var value1 = context.Request.Form["param1"]; 
+0

Ancora nullo. – Sandy

3

In realtà:

context.Request.Params["param1"];