【问题标题】:RequestVerificationToken in query string查询字符串中的 RequestVerificationToken
【发布时间】:2013-08-28 06:12:23
【问题描述】:

我为包含@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)

【问题讨论】:

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


    【解决方案1】:

    这被添加到查询字符串中,因为这是使用时的强制性要求

    [ValidateAntiForgeryToken]
    

    @Html.AntiForgeryToken()
    

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

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

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

    因此,如果您要使用[ValidateAntiForgeryToken],这是一个必要的要求。

    如果我遗漏了某些内容,而您想要做的只是出于某种其他原因将其从查询字符串中删除,那么您需要以某种方式对调用的输出进行字符串处理

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

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

    【讨论】:

    猜你喜欢
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多