如何编写fetch POST请求,将对象传递给预期接收对应对象的C#方法
问题排查及修复方案
核心问题修复
1. 后端接口修正
你现有后端接口存在多个导致路由无法匹配的致命问题:
- 动作方法访问修饰符为
private,仅支持类内部调用,必须改为public才能被ASP.NET Core路由系统识别 - 参数没有指定绑定来源,和前端提交的格式无法匹配
- 原代码存在大括号语法错误,需修正
修正后代码示例:
[HttpPost] [Route("ResetPassword")] public void ResetPassword([FromBody] Player player) { // 你的业务逻辑 }
注:请确认Player类中存在与提交字段匹配的Email公共属性
2. 前端请求修正
你现有代码用FormData封装JSON属于冗余操作,直接提交JSON格式数据即可和后端绑定规则匹配,同时新增错误捕获方便定位问题:
const continueBtn = document.getElementById("continueBtn"); continueBtn.onclick = () => { const email = document.getElementById("lblEmail").innerHTML; sendResetEmail(email); } async function sendResetEmail(email) { try { const payload = { email: email } let response = await fetch(`/ResetPassword`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }); // 打印响应状态方便排查 if (!response.ok) { console.error('请求异常,状态码:', response.status); } } catch (err) { console.error('请求发送失败:', err); } }
如果业务场景必须使用FormData提交,可将后端参数改为[FromForm] string json,收到后自行反序列化为Player对象即可
通用端点无法访问排查步骤
- 打开浏览器F12开发者工具,切换到「网络」面板,触发请求后查看请求状态码:
- 状态码404:检查路由配置、控制器是否继承
ControllerBase/Controller、接口Route特性与请求路径是否匹配、控制器是否配置了路由前缀 - 状态码400:查看响应体的错误提示,一般为参数绑定失败,检查提交的字段名称、类型是否和后端模型匹配,是否遗漏必填字段
- 状态码500:后端代码执行报错,查看服务端日志或响应体的错误详情定位问题
- 状态码404:检查路由配置、控制器是否继承
- 如果你启用了鉴权中间件,确认当前请求携带了有效的鉴权凭证,否则会被中间件直接拦截,不会进入你的接口方法
- 确认后端服务正常启动,请求的域名/端口和后端服务监听地址一致
内容的提问来源于stack exchange,提问作者AJ Jones
相关产品推荐
相关产品推荐

