ASP.NET Core 5.0不加@addTagHelper时Razor Pages的OnPost不触发原因问询
问题原因
ASP.NET Core Razor Pages 全局默认开启了跨站请求伪造(CSRF)防护,所有发往Razor Pages的POST请求,服务端都会默认校验请求中是否携带有效防伪令牌,校验不通过会直接返回400 Bad Request,这就是你初始提交表单触发400错误的根本原因。
TagHelper的作用
你注册的@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 中包含了FormTagHelper组件:
- 注册该TagHelper后,所有标注
method="post"的<form>标签在渲染时,会被自动插入一个隐藏的__RequestVerificationToken字段,字段值为当前用户会话生成的合法防伪令牌 - 你没有额外写代码也用到了该TagHelper,这是因为
FormTagHelper会自动匹配所有POST类型的form标签,不需要显式声明其他属性即可生效
和POST请求触发OnPost的关联
你未注册TagHelper时,页面中的form是纯原生HTML标签,不会自动携带防伪令牌字段,提交请求时会被服务端的CSRF校验逻辑直接拦截,不会进入你的OnPost处理方法。
注册TagHelper后提交表单时,自动生成的防伪令牌会和你的业务参数一起发送到服务端,校验通过后请求才会正常进入OnPost方法执行逻辑。
如果你不想依赖TagHelper,也可以手动在form标签内部添加@Html.AntiForgeryToken(),手动生成防伪令牌字段,也能达到相同效果。
内容的提问来源于stack exchange,提问作者Bugfather
相关产品推荐
相关产品推荐

