查询字符串中的RequestVerificationToken

时间:2013-08-28 06:12:24

标签: asp.net-mvc jquery query-string

我对包含@ Html.AntiForgeryToken()的表单的ajax帖子有问题。

当我通过ajax发布表单时,我得到以下查询字符串: http://myhost.local/Assessment/NextQuestion/15?__RequestVerificationToken=HVHkyjrwWupa9pU6tiMVjSDept5XeBtCyNL0tHwWEkfFDHJLXps9oRG7AlfvVHOx0tK0pE78KaQMD7gL5YBBXu_TfKhC3Pd69WaGCldFhPQhbP2t0

如何从查询字符串中删除它?在执行标准帖子时,查询字符串不包含此内容。

形式:

@using (Html.BeginForm("NextQuestion", "Assessment", FormMethod.Post, new { @class = "form-vertical"}))
    {

        @Html.AntiForgeryToken()
        ....
    }

发布功能:

$('form.ajaxForm').on('submit', (function() {
        $("#loadingIndicator").show();
        $.ajax(
            {
                type: "POST",
                url: $('form.ajaxForm').attr("action"),
                data: $('form.ajaxForm').serialize(),
                success:
                    function(result) {
                        $("#loadingIndicator").hide();
                        if (result.redirect) {
                            window.location.href = result.redirect;
                            return;
                        } else {
                            alert(result.ValidationMessage());
                        }
                    },
                error:
                    function(req, status, err) {
                        alert('error');
                        $("#loadingIndicator").hide();
                    },
            });
        return false;
    }));

行动方法:

 [HttpPost]
 [ValidateAntiForgeryToken]
 public JsonResult NextQuestion(AssessmentModel model)

1 个答案:

答案 0 :(得分:1)

这是添加到查询字符串中,因为它是使用

时的强制要求
[ValidateAntiForgeryToken]

@Html.AntiForgeryToken()

必须将AntiForgeryToken返回到服务器,以便可以对其进行适当的验证,并且因为您正在进行

data: $('form.ajaxForm').serialize(),

并且AntiForgeryToken在您的表单中,它被适当地序列化。

因此,如果您要使用[ValidateAntiForgeryToken],则必须要求。

如果我错过了某些内容,而您想要做的就是将其从查询字符串中移除出于其他原因,那么您需要以某种方式将调用的输出字符串处理为

$('form.ajaxForm').serialize()

我建议使用某种正则表达式来搜索__RequestVerificationToken和字符串的结尾,或者直到下一个查询字符串键值对的下一个& / start。