asp.net核心剃须刀页面中的防伪令牌?

时间:2019-01-20 05:03:13

标签: razor asp.net-core asp.net-core-2.2

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

asp.net core 2.2.1使用剃须刀页面,我不得不手动生成防伪令牌,但所有文档似乎都声称剃须刀页面不需要。

对我在这里做错的任何见解吗?

如果从下面的表单中删除@ 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>

2 个答案:

答案 0 :(得分:1)

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

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

enter image description here

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

答案 1 :(得分:0)

根据Documentation,由于您使用的标记应该足够,因此不需要添加@Html.AntiForgeryToken()

<form method="post">
...
</form>

我会检查令牌是否未按照此article

中所述设置在表单底部