2013-06-08 23 views
8

HTTP işleyicisinde bir HTTP POST dizesini dinlemem ve işlemek gerekiyor. Ben İşleyicisi'ndeki çalıştığım şeyHTTP İşleyicide HTTP POST Alma?

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

olduğunu - -

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

Ama boş

Aşağıda işleyicisi dize yazabilmek için kodudur. İşleyici'deki parametre değerlerini nasıl dinleyebilirim?

cevap

23

için Sen, bunun yerine, bazı özel protokolü yeniden icat gibi görünüyor standart istek kodlamaların herhangi kullanıyor görünmüyor böylece güvenemez Bu isteği ayrıştırmak için sunucu ASP.NET. Sen inputStream doğrudan değerleri okumak zorunda kalacak: Öte yandan siz application/x-www-form-urlencoded gibi bazı standart istek kodlamasını kullanırsanız

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

her zamanki gibi parametreleri okumak mümkün olacak. Değerleri okuyabilir sunucuda Şimdi

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

: Bir WebClient kullanabilirsiniz tür bir istek göndermek için

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 

:

İşte böyle bir istek yükü gibi görünebilir nasıl böyle:

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

Çok teşekkürler! Ön uç görüntü yeniden boyutlandırma işlevselliği için AngularJS kullanıyorum ve daha sonra sunucuya bir isim (boyut) içeren JSON nesnelerini (ad, boyut, görüntü verileri (base64) vb.) Yükleyin. Yükü okumakta zorluk çekiyordum (eğer param ekliyorsanız, "data:" bulunamadı)/serverde okuyamadı (ya da nasıl olduğunu bilmiyordum).) Bu yüzden streamReader'ı kullanmak artık iyi çalışıyor :) TEŞEKKÜR EDERİM YOU :) – LittleTiger

+0

@Darin Lütfen bu soruyla bana yardımcı olabileceğinizi düşünüyorsunuz http://goo.gl/qiOdmT – Axel

2

Değişim

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

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

Yine de boş. – Sandy

3

aslında var:

context.Request.Params["param1"];