您的位置:首页 - 教程 - ASP.NET - 正文
jq向webApi提交post json数据

    在页面想webApi post json数据的时候,发现webapi不能直接以json的方式接受数据(注:我是没有发现一个很好的方式来post json数据的);但是可以以数据结构的方式传递;

如下:

 

 1              //js代码 
var d = {
2 Id: "1", 3 Name: "name", 4 Value: "OldValue",}; 8 $.ajax({ 9 type: "post", 10 url: url1, 11 data: JSON.stringify(d), 13 14 success:function(d){ 15 16 } 17 });
 1 public  class Diff
 2     {
 3         public string Id { set; get; }
 4         public string Name { set; get; }
 5         public string Value { set; get; }
 6     }
 7  public Diff post([FromBody]Diff pConfig)
 8         {
 9             List<DiffConfig> s = pConfig;
10             return s;
11         }
View Code

像这样的代码是没有问题的;得到的是一个标准结构的数据;

但是如果改为下面的代码,就会发现没有数据

 1               //js代码 
 2                   var d = [{
 3                      Id: "1",
 4                      Name: "name",
 5                      Value: "Value",
 6                  },{
 7                      Id: "2",
 8                      Name: "name2",
 9                      Value: "Value2",
10                  }];
11                  $.ajax({
12                     type: "post",
13                     url: url1,
14                      data: JSON.stringify({
15                          pConfig: d
16                    }),
17                      success:function(d){
18                        
19                  }
20                }); 
View Code
1  public List<Diff> post([FromBody]List<Diff> diff)
2         {
3             List<Diff> d = diff;
4             return d;
5         }
View Code

这样的代码会发现,数据没有传过来,后面才发现,原来jq的ajax传输数据类型有问题;传输的数据类型contentType的默认值为 "application/x-www-form-urlencoded"。默认值适合大多数情况。但是却不能适应这次传输的值,把   contentType: 'application/json' 设置一下,还有就是,要注意的是直接把数组通过 json.stringify 传递过去( data:JSON.stringify(d), ),而不是想上面那种画蛇添足的加上一句(data:JSON.stringify( {pConfig:d}) ),这样就可以ok了;数据传输完全没有问题;

 $.ajax({
            type: "post",
            dataType: 'json',
            url: url,
            contentType: 'application/json',
            data: JSON.stringify(d),
            success: function (d) {
              
            }
        });

评论: