使用post请求发送在Httphandler中访问数据

时间:2011-09-29 15:21:51

标签: asp.net jquery httphandler ihttphandler

我创建了一个httphandler。一切正常。如果你接受请求类型GET。但出于安全原因,我真的不想要GET请求。

我正在使用Jquery使用以下代码发出POST请求:

$.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警报中返回“null”。

请注意,当$ .ajax()函数中的请求类型更改为GET时,每件事情都能正常工作。

我还尝试使用context.Request.Form(“a”)和context.request.SserverVariables(“a”)

访问发布的数据

context.request.Params是'Form','ServerVariables','Cookies'等的组合集合。

请告诉我哪里出错...... ??

感谢您寻找......

2 个答案:

答案 0 :(得分:1)

这是通过从请求中删除contentType和dataType规范来实现的。 除此之外的任何事情都将保持不变。

答案 1 :(得分:0)

尝试

data: { "a=Sent Data" },

e.g。来自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