为什么ASP.NET Core 6 MVC路由处理程序无法接收Axios POST请求的数据?
问题原因
Axios 发送 POST 请求时默认会将第二个参数的对象序列化为 JSON 字符串,请求头Content-Type为application/json。而 ASP.NET Core Minimal API 对未指定绑定来源的简单类型参数(如int? id),默认会从路由、查询字符串、表单数据中取值,不会解析 JSON 请求体,因此拿到的是 null。你用 Postman 能正常取值大概率是用了表单传参或者查询字符串传参,符合后端默认的绑定规则。
修复方案
可以任选以下一种方案修复:
方案1:修改后端参数绑定(推荐,符合前后端分离项目JSON传参的常规实践)
首先创建一个接收参数的DTO类:
public class PlantsInfoRequest { public int? Id { get; set; } }
然后修改接口代码,给参数加[FromBody]特性绑定到请求体的JSON:
app.MapPost("/PlantsInfo", ([FromServices] DastShafaContext context, [FromBody] PlantsInfoRequest request) => { var id = request.Id; // 原有依据id执行数据库交互的逻辑 }
方案2:修改前端请求格式,适配后端默认绑定规则
如果不想修改后端代码,也可以调整前端传参方式,让参数走表单或查询字符串传递:
方式2.1 用URLSearchParams传递表单格式参数
import axios from "axios" export async function getList(val) { const formData = new URLSearchParams(); formData.append('id', val); return await axios.post('http://localhost:5107/PlantsInfo', formData).then(({ data }) => { return data; }); }
方式2.2 将id放到查询字符串传递
import axios from "axios" export async function getList(val) { return await axios.post('http://localhost:5107/PlantsInfo', null, { params: { id: val } }).then(({ data }) => { return data; }); }
内容的提问来源于stack exchange,提问作者albert
相关产品推荐
相关产品推荐

