jQuery POST。 无法使用自定义httphandler获取请求参数

我有一个包含JSON数据的jQuery post方法。

在我的httphandler中,在processRequest方法中,Request [“Operation”]为空,并且我的数据都没有发布。 我在SharePoint 2010环境中。

public void ProcessRequest(HttpContext context) { try { string operation = context.Request["Operation"]; // Returns null 

我的JavaScript如下:

 function CallService(serviceData, callBack) { $.ajax({ type: "POST", url: ServiceUrl, data: { Operation : "activate"}, contentType: "application/json; charset=utf-8", dataType: "json", success: function (result) { callBack(result); }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert(XMLHttpRequest.responseText); } }); 

在VS中的调试器中,当我评估HttpContext时,我找不到发布的值。 在Firebug中,该值将作为有效的JSON数据发布。 我无法获得参数的任何原因?

任何帮助赞赏。

感谢所有输入的人。 我决定改为读取请求的输入流,并从中获取一个键值对。 我可以通过这种方式访问​​我的所有参数。

我也使用$ .toJSON()函数将我的参数传递给Ajax调用。 JsonConvert类来自Newtonsoft的JSON.Net程序集。 我经常使用它,如果你使用任何json序列化的东西,我强烈建议使用它。

顺便说一句,改变输入参数周围的引号确实有效。 我想继续使用一个通用的ajax函数并使用$ .toJSON函数,并且通常传递一个带有我所有参数的对象作为post数据。

 TextReader reader = new StreamReader(context.Request.InputStream); Dictionary requestParams = JsonConvert.DeserializeObject>(reader.ReadToEnd()); try { switch (requestParams["operation"]) 

我将contentType更改为application/x-www-form-urlencoded并且它做了一个技巧

也许你受到同源政策的限制。 ServiceUrl与调用页面在同一主机名和域中吗?

为什么要覆盖$.ajax()调用中的contentType选项? 如果省略它,是否仍然看到为Operation值发送空值?

另外,我认为JSON数据的正确格式是:

 {"Operation": "activate"} 

我认为JSON规范是具体的,但大多数框架并不严格。