【问题标题】:POST json object array to IHttpHandlerPOST json 对象数组到 IHttpHandler
【发布时间】:2011-06-21 06:41:37
【问题描述】:

我正在构造一个这样的对象数组:

var postData = [];

$.each(selectedFields, function (index, value) {
    var testTitle = 'testing ' + index;
    postData.push({title: testTitle, title2 : testTitle});        
}

然后我像这样发布它(请注意,我尝试了许多不同的方法):

$.post('SaveTitlesHandler.ashx', { form : postData }, function (data) {
    console.log(data);
});

然后我尝试在处理程序中获取数据...

public class SaveTitlesHandler : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        string json = context.Request.Form.ToString();
    }

}

我似乎无法从请求中得到正确的 json。有人知道吗?

干杯。

二重

【问题讨论】:

    标签: javascript jquery json post ihttphandler


    【解决方案1】:

    您没有发布 JSON。您正在使用application/x-www-form-urlencoded。因此,在处理程序内部,您可以访问单个值:

    public void ProcessRequest(HttpContext context)
    {
        var title1 = context.Request["form[0][title]"];
        var title2 = context.Request["form[0][title2]"];
    
        var title3 = context.Request["form[1][title]"];
        var title4 = context.Request["form[1][title2]"];
    
        ...
    }
    

    如果你想发布真正的 JSON,你需要这个:

    $.ajax({
        url: 'SaveTitlesHandler.ashx',
        type: 'POST',
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify(postData),
        success: function(result) {
            console.log(result);
        }
    });
    

    然后在处理程序内部从请求输入流中读取:

    public void ProcessRequest(HttpContext context)
    {
        using (var reader = new StreamReader(context.Request.InputStream))
        {
            string json = reader.ReadToEnd();
        }
    }
    

    JSON.stringify 方法将 javascript 对象转换为 JSON 字符串,它是现代浏览器内置的本机方法。如果您想支持旧版浏览器,您可能还需要包含 json2.js

    【讨论】:

    • 你知道以 JSON 格式发布数据的简单方法吗?
    • 当我尝试 Request.Form 只是一个空字符串?我错过了什么吗?
    • @twDuke,在第一个例子中你不应该使用Request.Form[...],如我的回答所示。你应该直接使用Request[...]
    • 是的,我看到了 :) 问题是我尝试了 $.ajax 并且没有看到处理程序的更新代码,所以表单显然是空的。但是现在我使用了流!
    猜你喜欢
    • 1970-01-01
    • 2013-03-29
    • 2015-06-22
    • 2020-03-31
    • 1970-01-01
    • 2018-11-13
    • 2011-01-10
    • 1970-01-01
    • 2020-05-15
    相关资源
    最近更新 更多