【发布时间】:2021-01-05 06:39:27
【问题描述】:
我们目前有这个代码
@foreach (var market in Model.Markets.Markets)
{
<li>
@using (Html.BeginForm("Set", "Market", new {marketId = market.Value}, FormMethod.Post, null))
{
@Html.AntiForgeryToken()
<button class="btn btn-none market-list__item jsSelectMarket">
<img src="@market.FlagUrl" class="market-selector__market-icon">
<p class="market-selector__market-text">@market.Text</p>
</button>
}
</li>
}
看起来是正确的,但分析表明大量 CPU 时间用于生成防伪令牌(基本上每页 20 次仅用于此目的)。
有没有办法将 @Html.AntiForgeryToken() 移到 foreach 之外,所以它只被称为一个?
谢谢。
【问题讨论】:
-
如果您通过 ajax 发布,那么您可以将
@Html.AntiForgeryToken()保留在循环之外,并在发送 ajax 时通过读取_RequestVerificationToken隐藏字段将其添加到。 -
我写了一堆,然后删除了......我认为你真正的问题是这不应该是一个帖子,所以不需要表单,所以不需要 AntiForgeryToken....只需在 url 中包含值...路径并返回帖子的内容。
-
使按钮成为样式锚,其链接看起来与按钮相同......
-
@RajdeepDebnath 好主意,我会试试的。谢谢
标签: asp.net asp.net-mvc model-view-controller antiforgerytoken