2009-05-26 4 views
13

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

+0

Что вы используете, чтобы сделать запрос? HttpWebRequest? –

+0

Я делаю вызов Ajax с использованием JQuery –

+0

Не могли бы вы представить пример кода того, что вы делаете на стороне запроса? – Deeksy

ответ

1

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

+0

Извините, но я не понимаю как бы данные POSTed, если я отправлю его в Querystring: S. Может ли вы объяснить немного больше того, что вы предлагаете? Если вы говорите, что я должен создать запрос и добавить его к моему URL-адресу, чем это не будет работать из-за ограничения длины URL-адреса . –

+0

Я думаю, что он имел в виду, чтобы URL-кодирования данных, разграниченные амперсандами (&), так же, как в строке запроса, за исключением того, в теле запроса, а не в URL. JQuery должен обрабатывать это автоматически. –

11

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

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

2

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

application/x-www-form-urlencoded 

, чтобы заставить его работать.

1

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

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

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

HttpContext.Request.Params 

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

var field = HttpContext.Request.Params["fieldName"]; 
Смежные вопросы