2013-06-08 36 views
8

Tôi cần nghe và xử lý chuỗi HTTP POST trong trình xử lý HTTP.Nhận được một HTTP POST trong HTTP Handler?

Dưới đây là mã cho đăng chuỗi để xử lý -

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

Những gì tôi cố gắng trong Handler là -

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

Nhưng rỗng của nó. Làm thế nào tôi có thể nghe và nhận được các giá trị tham số trong Handler?

Trả lời

23

Bạn dường như không được sử dụng bất kỳ mã hóa theo yêu cầu tiêu chuẩn, thay vào đó bạn dường như được tái phát minh một số giao thức tùy chỉnh, vì vậy bạn không thể dựa vào máy chủ ASP.NET để có thể phân tích cú pháp yêu cầu này. Bạn sẽ phải đọc các giá trị trực tiếp từ 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(); 
    } 
} 

Nếu mặt khác bạn sử dụng một số mã hóa theo yêu cầu tiêu chuẩn như application/x-www-form-urlencoded bạn sẽ có thể đọc các thông số như bình thường.

Dưới đây là như thế nào như một tải trọng yêu cầu có thể trông giống như:

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 

Để gửi một yêu cầu như vậy, bạn có thể sử dụng một WebClient:

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

Bây giờ trên máy chủ bạn có thể đọc các giá trị như thế:

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

Cảm ơn rất nhiều! Tôi đang sử dụng AngularJS cho chức năng thay đổi kích thước hình ảnh mặt trước, sau đó tải lên một mảng (mảng) của các đối tượng JSON (có chứa tên, kích thước, chính dữ liệu hình ảnh (base64), vv) vào máy chủ. Tôi gặp sự cố khi đọc tải trọng (nếu thêm thông số, "dữ liệu:" không thể tìm thấy/đọc serverside (hoặc tốt, không biết cách).) Vì vậy, bằng cách sử dụng streamReader nó bây giờ hoạt động tốt :) THANK BẠN :) – LittleTiger

+0

@Darin Xin bạn có nghĩ rằng bạn có thể giúp tôi với câu hỏi này http://goo.gl/qiOdmT – Axel

2

Thay đổi

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

để

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

Vẫn còn giá trị rỗng. – Sandy

3

Thực tế:

context.Request.Params["param1"]; 
Các vấn đề liên quan