微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AntiForgeryToken应该位于循环内部还是循环外部?

如何解决AntiForgeryToken应该位于循环内部还是循环外部?

我们目前有此代码

@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。
您可以尝试使用以下代码来发布

的通用方法
function AjaxPostMethod(url,formName,parameters,successCallback) {

    $.validator.unobtrusive.parse($(formName));

    $(formName).validate();
    
    if ($(formName).valid()) {
        var form = $(formName);
        var token = $('input[name="__RequestVerificationToken"]',form).val();

        $.ajax({
            type: 'POST',url: url,data:
            {
                __RequestVerificationToken: token,model: parameters
            },success: successCallback,error: function (xhr,textStatus,errorThrown) {
                console.log('error');
            }
        });
    }

一劳永逸

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。