Как отправлять данные 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"];