我目前正在使用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 - 我没有问题,我只是想了解序列化背后的工作。
答案 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
开关,这让我呕吐。