You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 16:03:14