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]:当数据来自表单、查询字符串或路由。
浙公网安备 33010602011771号