POST json对象数组到IHttpHandler

twD*_*uke 0 javascript jquery post json ihttphandler

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

var postData = [];

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

我然后发布它(注意我已经尝试了许多不同的aproaches):

$.post('SaveTitlesHandler.ashx', { form : postData }, function (data) {
    console.log(data);
});
Run Code Online (Sandbox Code Playgroud)

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

public class SaveTitlesHandler : IHttpHandler
{

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

}
Run Code Online (Sandbox Code Playgroud)

我似乎无法从请求中得到适当的json.有人有任何想法吗?

干杯.

TWD

Dar*_*rov 11

您没有发布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]"];

    ...
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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