Ajax方法POST的两种提交方式

所需的公共类:

 public class SysUser
 {
     [Key]
     public int Id { get; set; } 
     public string Name { get; set; }
     public DateTimeOffset? CreateTime { get; set; }
 }

方式一:采用Json

前端代码:

 $.ajax({
   type: "POST",
   url:  "/home/SaveUser",
   data: JSON.stringify({name: $("#newUser").val() }),
   contentType: "application/json;charset=utf-8;",
   error: function (request) {
   },
   success: function (res) {
       alert(res);
   }
 });

后端代码(asp.net core 8.0),controller

 public IActionResult SaveUser([FromBody] SysUser user)
 {

 }

方法二:提交时用application/x-www-form-urlencoded

前端:

 $.ajax({
   type: "POST",
   url:  "/home/SaveUser",
   data: {name: $("#newUser").val() },
   error: function (request) {
   },
   success: function (res) {
       alert(res);
   }
 });

后端:

public IActionResult SaveUser(SysUser user)
{

}

说明(以下来自DeepSeek):

JSON 数据存储在请求体(Body)中,必须显式指定从 Body 绑定。如果请求的 Content-Type 不是 application/x-www-form-urlencoded 或 multipart/form-data,通常需要 [FromBody]

何时必须加 [FromBody]

场景是否需要 [FromBody]示例
JSON 请求体 ✅ 必须 [FromBody] UserDto user
表单数据(x-www-form-urlencoded) ❌ 不需要 UserDto user
文件上传(multipart/form-data) ❌ 不需要 IFormFile file
简单类型(int/string) ❌ 通常不需要(默认从 Query 绑定) int id
[ApiController] 下的复杂类型 ❌ 可省略(自动推断) UserDto user

关键原则:

  • 加 [FromBody]:当数据来自请求体(如 JSON、XML)。

  • 不加 [FromBody]:当数据来自表单、查询字符串或路由。

posted @ 2025-07-02 13:08  Shapley  阅读(23)  评论(0)    收藏  举报