WebApi 接口参数:实体类型

实体作为参数

1、前端调用代码

  var postdata = { ID: "1", NAME: "Jim", CREATETIME: "1988-09-11" };
    $.ajax({
        type: "post",
        url: "http://localhost:27221/api/Charging/SaveData",
        contentType: 'application/json',
        data: JSON.stringify(postdata),
        success: function (data, status) {}
    });

2、后端代码

1
2
3
4
5
[HttpPost]
 public bool SaveData(TB_CHARGING oData)
 {
     return true;
 }

3、得到结果

 

 成功接收。

注意 如果将前端的代码做点略改动就不会成功。更改代码:

  var postdata = "{ ID: \"1\", NAME: \"Jim\", CREATETIME: \"1988-09-11\" }";
    $.ajax({
        type: "post",
        url: "http://localhost:27221/api/Charging/SaveData",
        contentType: 'application/json',
        data: JSON.stringify(postdata),
        success: function (data, status) {}
    });

两次的前端代码在语法和执行上没有任何问题,也能成功的调用后台的API,但接收的参数实体为Null,无法成功,为何呢?两者代码有什么区别呢,经过仔细的检查发现的唯一的差别为Json字符串变量上,前一个变量为:

 var postdata = { ID: "1", NAME: "Jim", CREATETIME: "1988-09-11" };

而后一个变量为:
var postdata = "{ ID: \"1\", NAME: \"Jim\", CREATETIME: \"1988-09-11\" }";
两者的区别为:后者增加了一个双引号。不知这是为何???? 一直不明白原因,有谁知原因者请求解答下,谢谢。

将前端代码再修改成:
var postdata = { ID: "1", NAME: "Jim", CREATETIME: "1988-09-11" };
    $.ajax({
        type: "post",
        url: "http://localhost:27221/api/Charging/SaveData",
        contentType: 'application/json',
        data: postdata,
        success: function (data, status) {}
    });

此时一样是不成功的。为何? 原理解释:使用实体作为参数的时候,前端直接传递普通json,后台直接使用对应的类型去接收即可,不用FromBody。但是这里需要注意的一点就是,这里不能指定contentType为appplication/json,否则,参数无法传递到后台。我们来看看它默认的contentType是什么:

 

 http的Content-Type的类型。看到如下说明:

  • application/x-www-form-urlencoded : <form encType=””>中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式);
  • application/json    : JSON数据格式

也就是说post请求默认是将表单里面的数据的key/value形式发送到服务,而我们的服务器只需要有对应的key/value属性值的对象就可以接收到。而如果使用application/json,则表示将前端的数据以序列化过的json传递到后端(JSON.stringify(postdata)序列化json),后端要把它变成实体对象,还需要一个反序列化的过程。



posted @   遨游天际  阅读(385)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示