JQuery POST. Не удается получить параметры запроса с помощью пользовательского httphandler - PullRequest
4 голосов
/ 14 июля 2010

У меня есть метод поста jQuery с включенными данными JSON.

В моем httphandler, в методе processRequest, Request ["Operation"] имеет значение null, и мои данные не публикуются.Я нахожусь в среде SharePoint 2010.

 public void ProcessRequest(HttpContext context)
    {
        try
        {
            string operation = context.Request["Operation"]; // Returns null

Мой JavaScript выглядит следующим образом:

function CallService(serviceData, callBack) {

$.ajax({
    type: "POST",
    url: ServiceUrl,
    data: { Operation : "activate"},
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (result) {
        callBack(result);
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        alert(XMLHttpRequest.responseText);
    }
});

В отладчике в VS я не могу найти опубликованные значения, когда я оцениваю HttpContext,В Firebug значение публикуется как действительные данные JSON.Любая причина, почему я не могу получить параметры?

Любая помощь приветствуется.

Ответы [ 4 ]

1 голос
/ 01 февраля 2012

Я изменил contentType на application/x-www-form-urlencoded, и он сделал трюк

1 голос
/ 15 июля 2010

Спасибо за ваш вклад, ребята.Я решил вместо этого прочитать поток ввода запроса и получить пару ключ-значение.Я могу получить доступ ко всем моим параметрам таким образом.

Я также использую функцию $ .toJSON () для передачи своих параметров в вызов Ajax.Класс JsonConvert происходит из сборки JSON.Net от Newtonsoft.Я часто его использую и очень рекомендую использовать его, если вы используете какую-либо сериализацию json.

Кстати, изменение кавычек вокруг входных параметров сработало.Я хочу продолжать использовать одну универсальную функцию ajax, использовать функцию $ .toJSON и вообще передавать объект со всеми моими параметрами в качестве данных публикации.

TextReader reader = new StreamReader(context.Request.InputStream);
        Dictionary<string, string> requestParams = JsonConvert.DeserializeObject<Dictionary<string, string>>(reader.ReadToEnd());      
        try
        {

            switch (requestParams["operation"])
0 голосов
/ 14 июля 2010

Почему вы переопределяете опцию contentType в вашем $.ajax() звонке? Если вы пропустите это, вы по-прежнему будете видеть, что для значения Operation отправлено значение NULL?

Кроме того, я думаю, что правильное форматирование для данных JSON будет:

{"Operation": "activate"}

Я думаю, что спецификация JSON специфична в этом отношении, но большинство фреймворков не такие строгие.

0 голосов
/ 14 июля 2010

Возможно, вы ограничены Одинаковой политикой происхождения . ServiceUrl находится на том же имени хоста и домена, что и вызывающая страница?

...