ASP.NET Core MVC项目删除操作路由异常返回405错误问题求助
问题根因
- 表单提交路径配置错误:Delete.cshtml里的form标签硬写了相对路径
action="DeletePost",你当前打开的删除确认页面路径是/Expense/Delete/1,浏览器会把相对路径拼在当前访问路径的末尾,最终提交地址变成/Expense/Delete/DeletePost,和你预期的路径不符。 - 405错误的来源:错误的提交路径命中了控制器中标记
[HttpGet]的Delete动作,POST请求访问仅支持GET的接口,自然返回405方法不允许的错误。 - 关于Id提交的补充:你表单内已经添加了
asp-for="Id"的隐藏字段,就算路由路径里不带Id,提交后框架也会自动把隐藏字段的值绑定到DeletePost方法的id参数,不影响删除逻辑执行,不需要强制把Id放到路由路径中。
解决方法
优先使用标签助手自动生成路径,避免硬编码带来的维护问题:
- 基础修复(满足功能要求):将Delete.cshtml中的form标签替换为如下代码,标签助手会自动生成指向当前控制器下DeletePost动作的正确路径:
<form method="post" asp-action="DeletePost">
- 满足路径格式要求(提交路径为
/Expense/DeletePost/1):如果需要符合你预期的路由带Id的格式,可以在form标签上增加路由参数配置:
<form method="post" asp-action="DeletePost" asp-route-id="@Model.Id">
- 不推荐的硬编码方案:直接写绝对路径的action,后续修改控制器或动作名时需要同步修改:
<form method="post" action="/Expense/DeletePost">
内容的提问来源于stack exchange,提问作者StackExchangeGuy
相关产品推荐
相关产品推荐

