Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-jquery ajax发布的参数未传递到服务器_C#_Jquery_Ajax - Fatal编程技术网

C#-jquery 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: {

我在客户端有一个简单的ajax请求:

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",
    
    因为您没有对服务器上的数据进行反序列化,而是希望将其作为默认contentType
    application/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",
    
    因为您没有对服务器上的数据进行反序列化,而是希望将其作为默认contentType
    application/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”]
    为空