0

0

ASP.NET MVC 中 DELETE 请求 404 错误的排查与修复指南

霞舞

霞舞

发布时间:2026-02-24 12:36:12

|

664人浏览过

|

来源于php中文网

原创

ASP.NET MVC 中 DELETE 请求 404 错误的排查与修复指南

本文详解 asp.net framework mvc 应用中前端发起 delete 请求返回 404 的常见原因,重点分析路由匹配、控制器命名约定及 http 方法约束问题,并提供可立即验证的修复方案。

本文详解 asp.net framework mvc 应用中前端发起 delete 请求返回 404 的常见原因,重点分析路由匹配、控制器命名约定及 http 方法约束问题,并提供可立即验证的修复方案。

在 ASP.NET Framework MVC 中,DELETE 请求在 Postman 中成功但前端(如 React + Axios)调用失败并返回 404,是一个典型且高频的问题。根本原因往往不在于后端逻辑或数据库操作(你的 DeleteAsync 方法本身是正确的),而在于 MVC 路由解析与 HTTP 方法约束的协同机制

? 核心问题定位

你当前的前端请求 URL 是:

axios.delete(`https://localhost:44333/Homes/Delete/${property.id}`)

而控制器类名为 HomesController,这看似合理——但 MVC 的默认路由规则({controller}/{action}/{id})会将 Homes 解析为控制器名称 去掉 Controller 后缀后的部分,即实际查找的是 HomesController。然而,请注意:MVC 默认约定中,控制器对应的路由段名是单数形式(除非显式重命名)。也就是说:

  • HomeController → 路由段为 Home(✅ 正确)
  • HomesController → 路由段为 Homes(⚠️ 非标准,易导致路由未匹配)

你的 RouteConfig 使用的是默认路由,未启用属性路由(Attribute Routing),因此完全依赖约定式路由(Convention-based Routing)。此时,即使控制器名为 HomesController,MVC 仍期望 URL 中的控制器段为 Home(对应 HomeController),而非 Homes —— 这正是导致 404 的首要原因。

✅ 正确做法:将控制器重命名为 HomeController,或保持 HomesController 但显式配置路由映射

✅ 推荐解决方案(两步走)

第一步:修正前端请求 URL(快速验证)

将 Axios 请求中的 Homes 改为 Home:

axios.delete(`https://localhost:44333/Home/Delete/${property.id}`)

同时确保后端控制器类名为 HomeController(而非 HomesController):

Scribble Diffusion
Scribble Diffusion

使用AI将你的草图变成精致的图像

下载
public class HomeController : Controller
{
    private readonly HomesManager homesManager;

    public HomeController(HomesManager homesManager)
    {
        this.homesManager = homesManager;
    }

    // DELETE: Home/Delete/5
    [HttpDelete]
    public async Task<HomeEntity> Delete(int id)
    {
        return await homesManager.DeleteAsync(id);
    }
}

? 提示:若坚持使用 HomesController,需在 RouteConfig.cs 中显式添加自定义路由

routes.MapRoute(
    name: "HomesApi",
    url: "Homes/Delete/{id}",
    defaults: new { controller = "Homes", action = "Delete", id = UrlParameter.Optional }
);

并确保该路由注册在 Default 路由之前(路由匹配按顺序优先)。

第二步:检查 HTTP 方法约束(关键兼容性)

ASP.NET MVC 默认允许 GET/POST,但对 DELETE、PUT 等非标准方法,IIS 或 ASP.NET 管道可能默认拦截或拒绝。若修正 URL 后仍 404,请临时移除 [HttpDelete] 特性进行验证:

// 先移除特性,仅测试路由是否通
public async Task<HomeEntity> Delete(int id)
{
    return await homesManager.DeleteAsync(id);
}

如果此时 Axios DELETE 请求返回 200,则说明问题确实在 HTTP 方法约束;此时应:

  • ✅ 确保 web.config 中已启用 WebDAV(若启用则需禁用,因其会劫持 DELETE/PUT):

    <system.webServer>
      <modules>
        <remove name="WebDAVModule" />
      </modules>
      <handlers>
        <remove name="WebDAV" />
      </handlers>
    </system.webServer>
  • ✅ 或改用 [AcceptVerbs(HttpVerbs.Delete)](Framework 专用)替代 [HttpDelete](后者更常用于 Web API):

    using System.Web.Mvc;
    // ...
    [AcceptVerbs(HttpVerbs.Delete)]
    public async Task<HomeEntity> Delete(int id) { ... }

? 注意事项与最佳实践

  • 不要混淆 MVC Controller 与 Web API Controller:[HttpDelete] 属于 System.Web.Http 命名空间(Web API),而传统 MVC Controller 应使用 System.Web.Mvc 下的 AcceptVerbs 或 HttpPost + 隐藏字段模拟(不推荐)。
  • CORS 不是本例主因:404 表明请求甚至未到达 Action,而是路由层失败;CORS 错误通常表现为 405(Method Not Allowed)或预检失败(OPTIONS 404/405)。
  • 始终开启详细错误信息(开发环境):在 web.config 中设置 ,便于快速定位路由/方法匹配问题。
  • 验证路由映射:使用 RouteDebugger 工具可直观查看所有注册路由及其匹配结果。

✅ 总结

问题现象 根本原因 修复动作
Postman 成功,前端 404 路由段名与控制器名约定不一致(Homes ≠ Home) 前端 URL 改为 /Home/Delete/{id},控制器命名为 HomeController
移除 [HttpDelete] 后正常 MVC 环境下误用 Web API 特性 改用 [AcceptVerbs(HttpVerbs.Delete)] 或启用 Web API 路由

完成上述调整后,你的 DELETE 请求即可从前端稳定调用,真正实现前后端 HTTP 方法语义的一致性与可靠性。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
软件测试常用工具
软件测试常用工具

软件测试常用工具有Selenium、JUnit、Appium、JMeter、LoadRunner、Postman、TestNG、LoadUI、SoapUI、Cucumber和Robot Framework等等。测试人员可以根据具体的测试需求和技术栈选择适合的工具,提高测试效率和准确性 。

452

2023.10.13

数据库Delete用法
数据库Delete用法

数据库Delete用法:1、删除单条记录;2、删除多条记录;3、删除所有记录;4、删除特定条件的记录。更多关于数据库Delete的内容,大家可以访问下面的文章。

287

2023.11.13

drop和delete的区别
drop和delete的区别

drop和delete的区别:1、功能与用途;2、操作对象;3、可逆性;4、空间释放;5、执行速度与效率;6、与其他命令的交互;7、影响的持久性;8、语法和执行;9、触发器与约束;10、事务处理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.12.29

default gateway怎么配置
default gateway怎么配置

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

230

2023.12.07

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

376

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2094

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

356

2023.08.31

MySQL恢复数据库
MySQL恢复数据库

MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

259

2023.09.05

苹果官网入口与在线访问指南_中国站点快速直达与iPhone查看方法
苹果官网入口与在线访问指南_中国站点快速直达与iPhone查看方法

本专题汇总苹果官网最新可用入口及中国站点访问方式,涵盖官网直达链接、iPhone官方页面查看方法与常见访问说明,帮助用户快速进入苹果官方网站,便捷了解产品信息与官方服务。

2

2026.02.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 10.1万人学习

python编程入门系列图文教程
python编程入门系列图文教程

共65课时 | 24.9万人学习

vscode其实很简单
vscode其实很简单

共72课时 | 29.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号