asp.net core razor 页面中的防伪令牌?

Fre*_*red 2 razor asp.net-core asp.net-core-2.2

我遇到了一个我不太明白的问题。

使用 razor 页面的 asp.net core 2.2.1 时,我必须手动生成防伪令牌,但所有文档似乎都声称对于 razor 页面来说这不是必需的。

关于我在这里做错了什么有什么见解吗?

如果您从下面的表单中删除@Html.AntiForgeryToken(),则不会添加令牌。如果这是你应该做的,那就太好了,我已经完成了,但我能找到的每个消息来源似乎都认为这是没有必要的。

<form method="post">
    @Html.AntiForgeryToken()
    <div>Source Type: <input asp-for="filter.SourceType" value="JsonEvent"/></div>
    <div>Source Name: <input asp-for="filter.SourceName"/></div>
    <input type="submit"/>
</form>
Run Code Online (Sandbox Code Playgroud)

小智 5

当您使用 ASP.NET Core Razor 页面时,您绝对不需要使用@Html.AntiForgeryToken()表单元素中的代码来生成 AntiForgeryToken。当您提交表单时,会自动生成并提交令牌。

您可以通过检查浏览器的开发工具部分来验证这个想法。您可以检查标题,您将看到表单数据“_RequestVerificationToken”,如此屏幕截图所示。

在此输入图像描述

但是,请注意,您的 Ajax 请求是不同的。例如,如果您使用 jQuery Ajax 方法发布到任何 Razor 页面的 Post 处理程序,那么您将需要显式生成令牌并随请求一起传递标头。