POST json对象数组到IHttpHandler

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

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

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

 $.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。 有人有任何想法吗?

干杯。

TWD

您没有发布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 。

Interesting Posts