Как отправить данные в ASP.NET HttpHandler? - PullRequest
13 голосов
/ 26 мая 2009

Я пытаюсь отправить большой кусок данных в обработчик HTTP. Я не могу отправить его с помощью GET из-за ограничения длины URL, поэтому я решил вместо этого отправить его. Проблема в том, что я не могу получить значения. context.Request.Form показывает, что в нем 0 элементов. Так есть ли способ, которым я могу отправить данные в HttpHandler?

Ответы [ 6 ]

11 голосов
/ 27 мая 2009

Наличие некоторого кода, который нужно посмотреть, поможет диагностировать проблему. Вы пробовали что-то подобное?

JQuery код:

$.post('test.ashx', 
       {key1: 'value1', key2: 'value2'}, 
       function(){alert('Complete!');});

Тогда в вашем ProcessRequest() методе вы сможете сделать:

string key1 = context.Request.Form["key1"]; 

Вы также можете проверить тип запроса в методе ProcessRequest () для устранения проблемы.

if(context.Request.RequestType == "POST")
{
    // Request should have been sent successfully
}
else
{
    // Request was sent incorrectly somehow
}
2 голосов
/ 09 марта 2010

У меня тоже была такая же проблема. Это была проблема клиента / AJAX. Мне пришлось установить заголовок запроса вызова AJAX "ContentType" на

application/x-www-form-urlencoded

чтобы все заработало.

2 голосов
/ 13 февраля 2010

У меня была та же проблема, и в конце концов я понял, что проблема с установкой типа контента как "json" ...

contentType: "application/json; charset=utf-8"

Это строка, которую некоторые популярные учебники предлагают вам добавить в вызов $ ajax, и она хорошо работает с ASPx WebServices, но по некоторым причинам это не подходит для HttpHandler, использующего POST.

Трудно поймать, поскольку значения в строке запроса работают нормально (еще один метод, встречающийся в Интернете, хотя для этого нет особого смысла использовать POST).

1 голос
/ 19 февраля 2013

Поля POST содержатся в

HttpContext.Request.Params

Чтобы получить их, вы можете использовать

var field = HttpContext.Request.Params["fieldName"];
1 голос
/ 27 августа 2010

Столкнулся с подобной проблемой. После исправления всех проблем в web.config я упустил еще одну вещь - изменить глагол на * ИЛИ GET,POST. После этого все работало нормально.

<httpHandlers>
    ...
    <add verb="*" path="test.ashx" type="Handlers.TestHandler"/>
</httpHandlers>
1 голос
/ 26 мая 2009

Данные POST, которые вы отправляете в ваш обработчик HTTP, должны иметь формат строки запроса a=b&c=d. И вы можете получить его на стороне сервера, используя Request["a"] (вернет b) и т. Д.

...