ASP.NET MVC项目:表单无法访问控制器方法的问题排查
问题原因与解决方案
核心问题:缺少防伪令牌验证字段
你的控制器Post方法添加了[ValidateAntiForgeryToken]特性,ASP.NET Core会强制验证请求中的防伪令牌,而你的表单里没有包含这个令牌字段,导致服务器拒绝POST请求,返回405错误。
修复步骤
在<form>标签内部添加防伪令牌字段,有两种简单方式:
- 使用HTML助手生成:
<form asp-action="Create" method="post"> @Html.AntiForgeryToken() <!-- 原有的表单字段 --> <label for="title">Title</label> <input name="title" id="title"> <label for="author">Author</label> <input name="author" id="author"> <label for="yearPublished">Year</label> <input name="yearPublished" id="yearPublished"> <input type="submit" value="Submit"> </form>
- 使用标签助手生成隐藏字段:
<form asp-action="Create" method="post"> <input type="hidden" asp-for="__RequestVerificationToken" /> <!-- 原有的表单字段 --> <!-- 省略其余内容 --> </form>
额外检查点
- 确认你的控制器类名为
BooksController,因为asp-action="Create"会默认提交到当前路由下的Books/Create接口,确保路由匹配。 - 检查
CreateViewModel的属性名称是否和表单输入的name属性完全一致(你的代码里属性与表单name匹配,这部分无问题)。
内容的提问来源于stack exchange,提问作者Joey O'Neill
相关产品推荐
相关产品推荐

