2013-06-08 3 views
8

Мне нужно прослушивать и обрабатывать HTTP POST-строку в обработчике HTTP.Получение HTTP POST в обработчике 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 вы сможете прочитать параметры, как обычно.

Вот как такой запрос полезной нагрузки может выглядеть следующим образом:

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 

Для того, чтобы отправить такой запрос можно использовать WebClient:

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

Теперь на сервере вы можете прочитать значения как то:

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

Спасибо большое! Я использую AngularJS для функций изменения размера интерфейса переднего плана, а затем загружаю на сервер пакет (массив) объектов JSON (содержащий имя, размеры, сами данные изображения (base64) и т. Д.). У меня возникли проблемы с чтением полезной нагрузки (если добавить параметры, «данные:» не удалось найти/прочитать на сервере (или, ну, не знаю, как это сделать).) Так что с помощью streamReader он работает отлично :) СПАСИБО YOU :) – LittleTiger

+0

@Darin. Как вы думаете, вы могли бы помочь мне с этим вопросом http://goo.gl/qiOdmT – Axel

2

Изменить

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

в

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

По-прежнему его нет. – Sandy

3

Это на самом деле:

context.Request.Params["param1"]; 
Смежные вопросы