Доступ к данным в Httphandler, отправленных с помощью почтового запроса - PullRequest
0 голосов
/ 29 сентября 2011

Я создал httphandler.Все работает нормально, если вы берете запрос типа GET.Но я действительно не хочу GET-запрос по соображениям безопасности.

Я делаю POST-запрос, используя Jquery, используя следующий код:

$.ajax({
        type: "POST",
        async: false,
        url: "SaveAccounts",
        data: { a: "Sent Data" },
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function OnSuccess(a) {
            alert(a);
        },
        error: function OnError(request, status, error) {
            alert('Error: ' + request + ' ' + status + ' ' + error);
        },
        complete: function () {

        }
    });

И код для обработки запроса:

    context.Response.ContentType = "application/json; charset=utf-8"
    Dim s As String = context.Request.Params("a")
    context.Response.Write(JsonConvert.SerializeObject(s))

Этот код возвращает нуль в предупреждении JavaScript на стороне клиента.

Обратите внимание, что все работает нормально, когда тип запроса изменяется на GET в функции $ .ajax ().

Я также пытался получить доступ к опубликованным данным, используя context.Request.Form ("a") и context.request.SserverVariables ("a")

context.request.Params представляет собой комбинированныйколлекция 'Form', 'ServerVariables', 'Cookies' и т. д.

Пожалуйста, скажите мне, где я ошибаюсь ... ??

Спасибо за поиск ....

Ответы [ 2 ]

1 голос
/ 02 октября 2011

Это работает, просто удаляя спецификации contentType и dataType из запроса. Все остальное, кроме этого, останется без изменений.

0 голосов
/ 29 сентября 2011

Попробуйте

data: { "a=Sent Data" },

например, от http://api.jquery.com/jQuery.ajax/

$.ajax({
   type: "POST",
   url: "some.php",
   data: "name=John&location=Boston",
   success: function(msg){
     alert( "Data Saved: " + msg );
   }
 });

Также HttpHandlers не нравятся данные JSON, поэтому избавьтесь от contentType и dataType.

Экранирование - более полный пример

var dataString = "{ 'first' : '" + escape($('#fname').val()) +
    "', 'mail' : '" + escape($('#tbMail1').val()) +
    "', 'mailinglist' : '" + $("input[name='ml']:checked").val() +
    "' }";
    /*alert(dataString.replace('\',','\',\n'));*/ // just for debugging ;)

$.ajax({
    type: "POST",
    url: "myAjaxHandler.asmx/ProcessSampleForm",
    data: dataString,
    cache: false,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (msg) {
        $(".loadingimg").fadeOut();
        window.location.replace(msg.d);
    },
    error:function(xhr,err){
        $(".loadingimg").fadeOut();
        alert("readyState: " + xhr.readyState + "\nstatus: " + xhr.status);
        alert("responseText: " + xhr.responseText);
    }
});

Взято из http://www.jphellemons.nl/post/JQuery-with-webform-input-validation-ajax-posting-json-to-aspnet-C.aspx

...