ASP.NET Core端点报Http 405错误,Vue.js的axios.delete请求如何修复?
修复Http 405 MethodNotAllowed错误的方案
问题1:前端URL拼接错误
你的前端请求URL拼接时缺少斜杠,导致实际请求的路由和后端定义不匹配。比如id=1时,前端会请求/api/request/delete1,但后端期望的是/api/request/delete/1,这直接导致路由无法匹配,触发405错误。
修复前端代码:
使用模板字符串或添加斜杠来正确拼接URL:
deleteRequest(id) { axios.delete(`http://localhost:32961/api/request/delete/${id}`) .then(() => { this.getCreated() }) .catch((err) => console.error(err)); },
问题2:后端参数接收与路由不匹配
后端路由定义了delete/{id},但方法却通过[FromBody] Request request接收参数——既没有利用路由中的id,还要求Delete请求携带Body(这不符合RESTful规范,且ASP.NET Core默认对Delete带Body的场景支持有限)。
修复后端代码:
直接接收路由中的id参数,查询对应实体后执行删除:
[Route("delete/{id}")] [HttpDelete] public IActionResult Delete(int id) // 根据你的RequestId实际类型调整,比如string { var request = _db_Context.Requests.FirstOrDefault(a => a.RequestId == id); if (request == null) { return NotFound("请求记录不存在"); } _db_Context.Requests.Remove(request); _db_Context.SaveChanges(); return Ok(request); }
问题3:后端删除逻辑错误
原代码中FirstOrDefault的查询结果未赋值给变量,直接调用Remove(request)会尝试删除一个未被EF上下文跟踪的对象,导致数据库操作失败。修复后的代码先查询出有效实体,再执行删除操作。
额外检查:CORS配置
如果以上修复后仍有问题,确认后端已配置CORS允许前端的跨域请求。在ASP.NET Core的Program.cs中添加:
builder.Services.AddCors(options => { options.AddPolicy("AllowFrontend", policy => { policy.WithOrigins("http://localhost:你的前端端口") .AllowAnyMethod() .AllowAnyHeader(); }); }); // 中间件配置阶段添加 app.UseCors("AllowFrontend");
内容的提问来源于stack exchange,提问作者Mert Ünal
相关产品推荐
相关产品推荐

