.NET8中未加@Html.AntiForgeryToken却通过防伪验证的原因
为什么未手动添加@Html.AntiForgeryToken()的表单仍能通过[ValidateAntiForgeryToken]验证?
你的情况核心原因是ASP.NET Core(包括.NET8)的表单Tag Helper会自动为带有asp-controller/asp-action属性的表单注入防伪令牌,不需要手动调用@Html.AntiForgeryToken()。
具体细节:
- 当你使用
<form asp-controller="Home" asp-action="BackForm">这类Tag Helper生成表单时,框架会自动在表单内部插入一个隐藏的__RequestVerificationToken输入字段,你可以通过查看页面的HTML源码确认这一点。 - 配合
data-ajax="true"的jQuery Unobtrusive Ajax提交请求时,脚本会自动收集这个隐藏令牌并随POST请求一起发送到后端,所以[ValidateAntiForgeryToken]属性能正常通过验证,Action可以顺利执行且ModelState保持有效。
额外说明:
只有当你使用纯HTML表单(未借助ASP.NET Core的表单Tag Helper)时,才需要手动添加@Html.AntiForgeryToken()来确保防伪验证生效,否则框架会自动完成令牌的注入与提交逻辑。
内容的提问来源于stack exchange,提问作者BigMan
相关产品推荐
相关产品推荐

