ASP.NET MVC中Delete与Update方法报HTTP 404错误求助
解决ASP.NET MVC中DeleteExperience/UpdateExperience 404错误
核心问题:硬编码URL的路由匹配风险
你视图中硬编码的URL(/Experience/DeleteExperience/@item.ExperienceId)可能因路由配置变更、应用部署路径差异等原因无法正确匹配控制器方法,这是导致404的常见原因。ASP.NET Core推荐使用框架内置的URL生成方法来确保路由正确性。
修复方案
1. 替换视图中的硬编码链接
将ExperienceList.cshtml中标记的链接部分替换为以下两种方式之一:
方式一:使用Html.ActionLink生成链接
<td>@Html.ActionLink("Delete", "DeleteExperience", "Experience", new { id = item.ExperienceId }, new { @class = "btn btn-danger" })</td> <td>@Html.ActionLink("Update", "UpdateExperience", "Experience", new { id = item.ExperienceId }, new { @class = "btn btn-warning" })</td>
方式二:使用Url.Action生成URL
<td><a href="@Url.Action("DeleteExperience", "Experience", new { id = item.ExperienceId })" class="btn btn-danger">Delete</a></td> <td><a href="@Url.Action("UpdateExperience", "Experience", new { id = item.ExperienceId })" class="btn btn-warning">Update</a></td>
这两种方法都会根据项目当前的路由配置自动生成正确的URL,避免硬编码带来的匹配问题。
2. 优化Delete方法的安全性(可选但推荐)
当前Delete方法允许GET请求,存在误触、CSRF攻击风险,建议修改为POST请求:
修改控制器的DeleteExperience方法
[HttpPost] public IActionResult DeleteExperience(int id) { var value = dbContext.Experiences.Find(id); if (value == null) { return NotFound(); } dbContext.Experiences.Remove(value); dbContext.SaveChanges(); return RedirectToAction("ExperienceList"); }
视图中用表单提交删除请求
<td> <form asp-action="DeleteExperience" asp-route-id="@item.ExperienceId" method="post" onsubmit="return confirm('确定要删除该记录吗?');"> <button type="submit" class="btn btn-danger">Delete</button> </form> </td>
额外检查点
- 确认
ExperienceId字段名称与控制器方法的id参数匹配(当前代码中是匹配的,但如果字段名变更需同步调整路由参数) - 确保数据库中存在对应ID的记录,避免因记录不存在导致的后续错误
内容的提问来源于stack exchange,提问作者onurkaygn
相关产品推荐
相关产品推荐

