jQuery POST。无法使用自定义httphandler获取请求参数
问题描述:
我有一个包含JSON数据的jQuery post方法。jQuery POST。无法使用自定义httphandler获取请求参数
在我的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数据。任何我无法获得参数的原因?
任何帮助表示赞赏。
答
为什么你在你的$.ajax()
调用中覆盖contentType
选项?如果你忽略了这个,你是否仍然看到null为Operation
值而被发送?
另外,我觉得对JSON数据格式正确应为:
{"Operation": "activate"}
我认为JSON规范是具体有关,但大多数的框架都没有那么严格。
答
感谢您的所有输入人。我决定读取请求的输入流,并从中获取一个键值对。我可以通过这种方式访问所有参数。
我也使用$ .toJSON()函数将我的参数传递给Ajax调用。 JsonConvert类来自Newtonsoft的JSON.Net程序集。我使用它很多,并强烈建议使用它,如果你使用任何json序列化的东西。
顺便说一下,改变输入参数周围的引号确实有效。我想继续使用一个通用的ajax函数并使用$ .toJSON函数,并且通常将所有参数作为后期数据传递给一个对象。
TextReader reader = new StreamReader(context.Request.InputStream);
Dictionary<string, string> requestParams = JsonConvert.DeserializeObject<Dictionary<string, string>>(reader.ReadToEnd());
try
{
switch (requestParams["operation"])
答
我改变的contentType到application/x-www-form-urlencoded
和它做了一个绝招
你尝试 '应用程序/ x-WWW的形式了urlencoded' 内容类型呢?那么你可以避免json字符串的解析。 – Ajaxe 2010-09-14 15:25:37