Как отправлять данные POST в ASP.NET HttpHandler?

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

Ответы

Ответ 1

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

Код 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

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

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

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

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

Ответ 3

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

application/x-www-form-urlencoded

чтобы он работал.

Ответ 4

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

Ответ 5

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

<httpHandlers>
    ...
    <add verb="*" path="test.ashx" type="Handlers.TestHandler"/>
</httpHandlers>

Ответ 6

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

HttpContext.Request.Params

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

var field = HttpContext.Request.Params["fieldName"];