如果通过URL发送,JSON对象的外观如何

时间:2013-12-29 16:51:20

标签: c# jquery ajax json

我目前正在使用AJAX将JSON对象发送到用C#编写的Handler。我想知道我是否可以通过一个简单的URL传递JSON信息以进行调试,就像我以前在URL上使用简单的参数(查询)一样。

C#处理程序根据Name和Pass(字符串)将JSON反序列化为一个类。

所以我试图像这样去URL上的处理程序:

testHandler.ashx?Name=Hey&Pass=Check

虽然C#处理程序无法正确反序列化,并且类对象为null,如果以这种方式发送。

向Web服务器发送工作请求的AJAX代码:

var jsonParam = { Name: "test", Pass: "123" }
        $.ajax({
            url: "Test.ashx",
            type: "post", //This sends in url
            data: JSON.stringify(jsonParam),
            dataType: "json",
            contentType: 'application/json; charset=utf-8',
            async:false,
            success: function (response) { 
                alert(response.Name);
            }
        });

所以我想知道如果通过浏览器在URL文本框中发送它会是什么样的。

P.S - 我没有问题,我只是想了解序列化背后的工作。

1 个答案:

答案 0 :(得分:4)

在您提供的示例代码中,您正在使用POST请求正文中序列化的JSON对象。然后你似乎在谈论一些testHandler.ashx?Name=Hey&Pass=Check url,你在那里说明作为查询字符串参数传递的值。在这种情况下不再涉及JSON。您不应该将JSON有效负载作为查询字符串的一部分传递。这是一个完全有效的请求,您可以通过GET动词实现:

var jsonParam = { Name: "test", Pass: "123" }
$.ajax({
    url: "Test.ashx",
    type: "GET",
    data: jsonParam,
    dataType: "json",
    success: function (response) { 
        alert(response.Name);
    }
});

在这种情况下,您显然会直接从查询字符串中检索值,而不是在处理程序中执行任何JSON反序列化:

public void ProcessRequest(HttpContext context)
{
    string name = context.Request["Name"];
    string pass = context.Request["Pass"];

    context.Response.ContentType = "application/json";
    ...
}

哦,顺便提一下,我每次看到它都会从我的代码中删除async: false开关,这让我呕吐。

相关问题