2013-06-08 10 views
8

मुझे HTTP हैंडलर में एक HTTP पोस्ट स्ट्रिंग को सुनने और संसाधित करने की आवश्यकता है।HTTP हैंडलर में HTTP पोस्ट प्राप्त करना?

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

क्या मैं हैंडलर में करने की कोशिश की है - -

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

लेकिन इसकी अशक्त

नीचे हैंडलर के लिए स्ट्रिंग पोस्ट करने के लिए कोड है। मैं हैंडलर में पैरामीटर मान कैसे सुन सकता हूं और प्राप्त कर सकता हूं?

उत्तर

23

को आप मानक अनुरोध एन्कोडिंग में से किसी का उपयोग कर रहे करने के बजाय आप कुछ कस्टम प्रोटोकॉल पुनर्रचना हो रहे हैं, तो आप पर भरोसा नहीं कर सकते इस अनुरोध को पार्स करने में सक्षम होने के लिए सर्वर ASP.NET। आप 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(); 
    } 
} 

दूसरी ओर आप कुछ मानक अनुरोध एन्कोडिंग application/x-www-form-urlencoded रूप में इस तरह का उपयोग करते हैं आप हमेशा की तरह मापदंडों को पढ़ने के लिए सक्षम हो जाएगा। सर्वर पर अब

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

आप मान पढ़ सकते हैं: आप एक WebClient इस्तेमाल कर सकते हैं

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 

आदेश इस तरह के एक अनुरोध भेजने के लिए:

यहाँ इस तरह का अनुरोध पेलोड कैसा लग सकता है तरीका बताया गया है इस तरह:

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

बहुत बहुत धन्यवाद! मैं अग्र-अंत छवि आकार बदलने की कार्यक्षमता के लिए AngularJS का उपयोग कर रहा हूं, और फिर सर्वर पर JSON ऑब्जेक्ट्स (नाम, आयाम, छवि डेटा स्वयं (बेस 64), और इसी तरह के) का बैच (सरणी) अपलोड करें। मुझे पेलोड पढ़ने में समस्याएं आ रही थीं (यदि पैरा जोड़ना है, तो "डेटा:" सर्वरसाइड नहीं मिला/पढ़ा जा सकता था (या अच्छी तरह से, कैसे नहीं पता था)। तो स्ट्रीम रीडर का उपयोग करके यह ठीक काम करता है :) धन्यवाद आप :) – LittleTiger

+0

@ डारिन कृपया आपको लगता है कि आप इस प्रश्न के साथ मेरी मदद कर सकते हैं http://goo.gl/qiOdmT – Axel

2

बदलें

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

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

अभी भी इसकी शून्य है। – Sandy

3

यह वास्तव में है:

context.Request.Params["param1"]; 
संबंधित मुद्दे