在 ASP.NET Core Razor Pages 中,防伪令牌会自动添加到表单中:
当标签包含 method="post" 属性并且满足以下任一条件时,会自动生成 HTML 表单元素的防伪标记:
- 操作属性为空 (action="")。
- 未提供操作属性 ()。
我已经习惯了这种自动行为,以至于当表单有一个操作时,我忘记手动添加令牌,当然 POST 会失败并返回 400(并且我会浪费大量时间进行调试)。
这种行为的原因是什么 - 为什么在有操作时不添加令牌?
另外,在开发过程中是否有某种方法可以记录比POST '/somepage' responded '400'
发生防伪错误时更多的信息错误?我已经多次被这个陷阱绊倒了,所以我想知道将来是否可以避免它。
asp-*
当您设置(page
等) 属性的值时action
,标签助手会使用路由系统为该action
属性生成一个值,该值保证是本地端点。如果您action
手动设置该属性,它可能完全指向另一个站点,并且 csrf 字段将毫无意义,因此渲染它没有意义。从源代码(https://github.com/dotnet/aspnetcore/blob/main/src/Mvc/Mvc.TagHelpers/src/FormTagHelper.cs)
所以解决办法就是使用
asp-
属性来设置动作。