C#-jquery ajax发布的参数未传递到服务器
我在客户端有一个简单的ajax请求:C#-jquery ajax发布的参数未传递到服务器,c#,jquery,ajax,C#,Jquery,Ajax,我在客户端有一个简单的ajax请求: var name = $("#txtNewsletterName"); var email = $("#txtNewsletterEmail"); $.ajax({ url: "/Handlers/Handler.ashx", contentType: "application/json; charset=utf-8", type: "POST", dataType: "json", data: {
var name = $("#txtNewsletterName");
var email = $("#txtNewsletterEmail");
$.ajax({
url: "/Handlers/Handler.ashx",
contentType: "application/json; charset=utf-8",
type: "POST",
dataType: "json",
data: {
op: "register_to_newsletter",
name: name.val(),
email: email.val()
},
async: true
});
C#服务器端的代码是:
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "application/json";
switch (context.Request["op"])
{
case "register_to_newsletter":
string recipientName = context.Request["name"].Trim();
string recipientEmail = context.Request["email"].Trim();
break;
default:
break;
}
}
问题是请求中的数据没有传递到服务器,因此上下文.request[“op”]
,上下文.request[“name”]
和上下文.request[“email”]
为空
我还检查了context.Request.Form.AllKeys
,它是string[0]
因此,很明显,数据无法到达服务器
在chrome调试器中检查网络选项卡时,我看到有2个请求已发送,因此我添加了chrome调试器中网络数据的屏幕截图:
尝试更改数据,如:
data: '{"op":"register_to_newsletter","name":"' + name.val() + '","email" :"' + email.val() + '"}'
并使用:
context.Request.Form["op"];
尝试更改数据,如:
data: '{"op":"register_to_newsletter","name":"' + name.val() + '","email" :"' + email.val() + '"}'
并使用:
context.Request.Form["op"];
发生重定向,似乎正在删除数据 如果您查看第二个屏幕截图,您会看到GET HTTP 200,但数据不再在请求中 重定向是从
“/Handlers/Handler.ashx”
到“/Handlers/Handler.ashx”
。也许web.config中有一个URL重写,它强制使用小写URL,如果匹配大写字符,则执行重定向
如果将url更改为全小写,会发生什么情况:
url: "/handlers/handler.ashx",
并删除contentType设置:
contentType: "application/json; charset=utf-8",
因为您没有对服务器上的数据进行反序列化,而是希望将其作为默认contentTypeapplication/x-www-form-urlencoded发送;字符集=UTF-8
。
数据类型用于响应,内容类型用于请求 发生重定向,似乎正在删除数据 如果您查看第二个屏幕截图,您会看到GET HTTP 200,但数据不再在请求中 重定向是从
“/Handlers/Handler.ashx”
到“/Handlers/Handler.ashx”
。也许web.config中有一个URL重写,它强制使用小写URL,如果匹配大写字符,则执行重定向
如果将url更改为全小写,会发生什么情况:
url: "/handlers/handler.ashx",
并删除contentType设置:
contentType: "application/json; charset=utf-8",
因为您没有对服务器上的数据进行反序列化,而是希望将其作为默认contentTypeapplication/x-www-form-urlencoded发送;字符集=UTF-8
。
数据类型用于响应,内容类型用于请求 为什么不开始使用合适的数据模型呢
不要使用HTTPContext,而是将输入参数设置为要接收的数据的模型。那你就不会有任何问题了 为什么不开始使用合适的数据模型呢
不要使用HTTPContext,而是将输入参数设置为要接收的数据的模型。那你就不会有任何问题了 在发送之前对对象进行字符串化,如下所示
data: JSON.stringify({
"op": "register_to_newsletter",
"name": name.val(),
"email": email.val()
}),
var name = $("#txtNewsletterName");
var email = $("#txtNewsletterEmail");
$.ajax({
url: "/Handlers/Handler.ashx",
contentType: "application/json; charset=utf-8",
type: "POST",
dataType: "json",
data: JSON.stringify({
"op": "register_to_newsletter",
"name": name.val(),
"email": email.val()
}),
async: true
});
所以完整的代码应该是这样的
data: JSON.stringify({
"op": "register_to_newsletter",
"name": name.val(),
"email": email.val()
}),
var name = $("#txtNewsletterName");
var email = $("#txtNewsletterEmail");
$.ajax({
url: "/Handlers/Handler.ashx",
contentType: "application/json; charset=utf-8",
type: "POST",
dataType: "json",
data: JSON.stringify({
"op": "register_to_newsletter",
"name": name.val(),
"email": email.val()
}),
async: true
});
在发送之前对对象进行字符串化,如下所示
data: JSON.stringify({
"op": "register_to_newsletter",
"name": name.val(),
"email": email.val()
}),
var name = $("#txtNewsletterName");
var email = $("#txtNewsletterEmail");
$.ajax({
url: "/Handlers/Handler.ashx",
contentType: "application/json; charset=utf-8",
type: "POST",
dataType: "json",
data: JSON.stringify({
"op": "register_to_newsletter",
"name": name.val(),
"email": email.val()
}),
async: true
});
所以完整的代码应该是这样的
data: JSON.stringify({
"op": "register_to_newsletter",
"name": name.val(),
"email": email.val()
}),
var name = $("#txtNewsletterName");
var email = $("#txtNewsletterEmail");
$.ajax({
url: "/Handlers/Handler.ashx",
contentType: "application/json; charset=utf-8",
type: "POST",
dataType: "json",
data: JSON.stringify({
"op": "register_to_newsletter",
"name": name.val(),
"email": email.val()
}),
async: true
});
您的浏览器在请求正文中显示了什么?请尝试将json对象键括在引号中。有时,这会带来不同。所以像这样的
“op”:“注册到新闻稿”
在帖子之前有重定向吗?你把请求头的图片放进去,我们需要看到请求正文。请邮寄that@ElwinArens,我为您添加了两个请求截图,您的浏览器在请求正文中显示了什么?请尝试将json对象键括在引号中。有时,这会带来不同。所以像这样的“op”:“注册到新闻稿”
在帖子之前有重定向吗?你把请求头的图片放进去,我们需要看到请求正文。请邮寄that@ElwinArens,我添加了youCare提供示例?Care提供示例?将处理程序更改为小写的两个屏幕截图。可能是吧。将整个url更改为小写。重定向是从“/Handlers/Handler.ashx”
到“/Handlers/Handler.ashx”
。也许web.config中有一个URL重写,它强制使用小写URL,并以其他方式重定向?我将其更改为小写,重定向得到解决,但它没有解决paramsIs context.Request.Form.AllKeys仍然为空的问题?尝试通过context.Request.Form[“op”]进行访问。我也尝试过,context.Request.Form.AllKeys为空,而context.Request.Form[“op”]
为空,将处理程序更改为小写。可能是吧。将整个url更改为小写。重定向是从“/Handlers/Handler.ashx”
到“/Handlers/Handler.ashx”
。也许web.config中有一个URL重写,它强制使用小写URL,并以其他方式重定向?我将其更改为小写,重定向得到解决,但它没有解决paramsIs context.Request.Form.AllKeys仍然为空的问题?尝试通过context.Request.Form[“op”]进行访问。我也尝试过,context.Request.Form.AllKeys为空且context.Request.Form[“op”]
为空