.Net Core 5 MVC Delete请求返回404/405无法触发如何解决?
.NET Core 5 MVC Delete操作返回404/405问题解决方案
405状态码对应原因及解决办法
- IIS/IIS Express WebDAV模块拦截:这是最常见的原因,WebDAV模块会默认拦截名称包含Delete的请求,哪怕你使用POST方式提交也可能被拦截。
解决方法:在项目根目录新建/修改web.config文件,添加以下配置禁用WebDAV:<system.webServer> <modules> <remove name="WebDAVModule" /> </modules> <handlers> <remove name="WebDAV" /> </handlers> </system.webServer> - HTTPS重定向冲突:如果你的控制器或者DeletePost方法上加了
[RequireHttps]特性,且当前是HTTP协议访问,框架会自动触发302重定向,重定向后请求方法会变为GET,和Action上的[HttpPost]特性不匹配就会返回405。
解决方法:本地开发时启用HTTPS访问,或者临时移除[RequireHttps]特性验证。
404状态码对应原因及解决办法
- 路由未匹配到Action:
- 确认DeletePost方法的访问修饰符为
public,非public的方法不会被路由系统扫描到 - 检查DeletePost方法上是否添加了自定义
[Route]特性,如果存在自定义路由,需要保证视图中asp-action的值和路由模板匹配,也可以直接删除Action上的自定义路由使用默认MVC路由 - 检查控制器类上是否添加了API路由前缀(比如
[Route("api/[controller]")]),这类路由会覆盖默认MVC路由,导致普通表单请求匹配不到
- 确认DeletePost方法的访问修饰符为
- 参数绑定规则冲突:如果DeletePost方法的id参数前加了
[FromQuery]或者[FromRoute]特性,框架会优先从路由或者查询字符串中获取id,而你的id是放在表单隐藏域中,就会导致参数匹配失败返回404,删除这些参数绑定特性即可。 - 表单Action路径生成错误:打开浏览器开发者工具,检查form标签的action属性是否为
/[你的控制器名]/DeletePost,如果路径不对可以在form标签上手动指定控制器,比如:<form method="post" asp-controller="你的控制器名称" asp-action="DeletePost">
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

