【发布时间】:2011-06-21 15:29:17
【问题描述】:
假设我想调用一些服务器方法并将以下 JSON 对象传递给它:
var t = { "test": 0};
我正在使用带有以下选项的 jQuery 库 $.ajax 方法:
type: "POST",
async: true,
url: 'mypage.aspx?Action=myAction,
data: {
test: JSON.stringify(t, null, 2)
},
contentType: 'application/x-www-form-urlencoded',
dataType: 'json',
.
.
.
在服务器端,我使用以下代码获取数据:
public string GetInputStream()
{
string inputContent;
using (var sr = new System.IO.StreamReader(Request.InputStream))
inputContent = sr.ReadToEnd();
return Server.UrlDecode(inputContent.Split('=')[1]);
}
从 Mac Firefox 3.6.12 版以外的浏览器调用时,getinputstream 方法返回:
test=%7B%0A++%22test%22%3A+0%0A%7D
这是有效的,然后可以反序列化为一个对象,但是在调用时 这个方法来自 Mac OS X 10.5.8 Firefox 3.6.12 我得到了一个无法反序列化的字符串:
test=%7B%0A++%22test%22%3A0%0A%Pr
我相信字符串末尾的 Pr 把我弄乱了,没有变成右括号。有什么想法吗?
编辑:
我正在查看 Firebug Net > Call > POST 选项卡,惊讶地发现 POST 字符串有效:test=%7B%0A++%22test%22%3A%220%22%0A%7D
这个 POST 字符串还有什么地方可以修改以到达带有无效字符串的服务器?
编辑2: 有趣的发现,如果使用 HTTPS(安全),所有问题都会得到解决:-)。 我想这一定是 Mac Firefox 上的安全设置?
【问题讨论】:
-
只是为了感受一下您要完成的工作,您能告诉我这种方法的目的是什么吗?根据您尝试执行的任务,使用页面方法和具有 application/json 内容类型的 AJAX 调用可能会容易得多
-
我正在传入 json 对象,该对象的大小可能非常大,以便可以在服务器端持久化/创建它。我不确定您所说的“页面方法”是什么意思;我已经尝试过“application/json”内容类型,没有任何区别。
-
我看到“Pr”来自具有以下用户代理的用户:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.12) Gecko /2009070609 Firefox/3.0.12(他们有 Firebug)
标签: .net jquery json serialization