【发布时间】:2013-11-16 07:44:39
【问题描述】:
我对 MVC 项目的以下详细信息有疑问。
当我尝试将 jquery ajax 请求与旋转 gif(甚至文本)等加载面板一起使用时,我收到了错误,从提琴手观察到
所需的防伪表单字段“__RequestVerificationToken”不存在。
如果我评论
[ValidateAntiForgeryToken] attribute 在 POST 操作方法中使用加载面板工作正常。我想知道为什么会出现此错误。
我什至用过序列化的查询字符串
__RequestVerificationToken= $('input[name="__RequestVerificationToken"').val()
还是报错
无法解密防伪令牌。如果此应用程序由 Web Farm 或群集托管,请确保所有计算机都运行相同版本的 ASP.NET 网页,并且
<machineKey>配置指定显式加密和验证密钥。
AutoGenerate 不能在集群中使用
我应该使用什么?
这里更新了问题代码
var token = $('input[name="__RequestVerificationToken"]').val();
$('#submitaddress').click(function subaddr(event) {
event.preventDefault();
event.stopPropagation();
//$('#addAddress').html('<img src="/img/animated-overlay.gif"> Sending...');
// $('#addAddress').blur();
// $(this).bl
if ($('#Jobid').val()!="") {
$('#TransportJobId').val(parseInt($('#Jobid').val()));
$.ajax(
{
url: '/TransportJobAddress/create',
type: 'POST',
data: "__RequestVerificationToken=" + token + "" + $('form[action="/TransportJobAddress/Create"]').serialize(),
success: function poste(data, textStatus, jqXHR) { $('#addAddress').html(data); return false; },
error: function err(jqXHR, textStatus, errorThrown) { alert('error at address :' + errorThrown); }
});
}
else {
var transportid = 2;
$.ajax({
url: '/TransportJob/create',
type: 'POST',
data: "__RequestVerificationToken=" + token + "" + $('form[action="/TransportJob/Create"]').serialize(),
success: function sfn(data, textStatus, jqXHR) {
transportid = parseInt(data);
$('#Jobid').val(data);
// alert('inserted id :' + data);
$('#TransportJobId').val((transportid));
$.ajax(
{
url: '/TransportJobAddress/create',
type: 'POST',
//beforeSend: function myintserver(xhr){
// $('#addAddress').html('<div id="temp_load" style="text-align:center">please wait ...</div>');
//},
data: "__RequestVerificationToken=" + token + "" + $('form[action="/TransportJobAddress/Create"]').serialize(),
success: function poste(data, textStatus, jqXHR) {
$('#addAddress').html(data);
},
error: function err(jqXHR, textStatus, errorThrown) {
alert('error at address :' + errorThrown);
}
});
},
error: function myfunction(jqXHR, textStatus, errorThrown) {
alert("error at transport :" + jqXHR.textStatus);
},
complete: function completefunc() {
// alert('ajax completed all requests');
return false;
}
});
}
});
表单标签
<form action="/TransportJob/Create" method="post"><input name="__RequestVerificationToken" type="hidden" value="ydYSei0_RfyBf619dQrhDwwoCM7OwWkJQQEMNvNdAkefiFfYvRQ0MJYYu0zkktNxlJk_y1ZJO9-yb- COap8mqd0cvh8cDYYik4HJ0pZXTgE1" />
运输工作 在同一页面上形成标签 2
<form action="/TransportJobAddress/Create" method="post" novalidate="novalidate"><input name="__RequestVerificationToken" type="hidden" value="Np2vUZJPk1TJlv846oPSU6hg4SjMHRcCk1CacaqZbpHOg8WbV4GZv06noRDl7F_iT9qQf3BIXo3n9wGW68sU mki7g3-ku_BSHBDN-g2aaKc1">
【问题讨论】:
-
您是否已将令牌添加到您的视图中?像这样:
@Html.AntiForgeryToken() -
默认在form标签后的fieldset标签前添加
-
将您的 AntiForgeryToken 添加到 ajax 调用的标头中,而不是在数据中
-
刚刚看到你的更新。您能否向我们展示您的 ajax 请求中的数据 + 标头字段?
-
我自己解决了这个问题,因为我的错误是,我在 ajax 收集详细信息之前使用了加载面板 id(不应该在按钮单击事件下使用加载面板,我们应该在发送 ajax 事件之前使用)除了我的错误解决方案是由@freshbm
标签: jquery ajax asp.net-mvc asp.net-mvc-4