我对包含@ 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)
答案 0 :(得分:1)
这是添加到查询字符串中,因为它是使用
时的强制要求[ValidateAntiForgeryToken]
和
@Html.AntiForgeryToken()
必须将AntiForgeryToken返回到服务器,以便可以对其进行适当的验证,并且因为您正在进行
data: $('form.ajaxForm').serialize(),
并且AntiForgeryToken在您的表单中,它被适当地序列化。
因此,如果您要使用[ValidateAntiForgeryToken],则必须要求。
如果我错过了某些内容,而您想要做的就是将其从查询字符串中移除出于其他原因,那么您需要以某种方式将调用的输出字符串处理为
$('form.ajaxForm').serialize()
我建议使用某种正则表达式来搜索__RequestVerificationToken和字符串的结尾,或者直到下一个查询字符串键值对的下一个& / start。