我在Mvc项目中有一个AntiforgeryToken()
值的表单。在提交表单时,它在MvC项目中使用相应的控制器Post Action ValidateAntiforgeryToken
进行验证。
进入确认页面。在具有隐藏表单的两个按钮的确认中,这将在上面的上一个中进行相同的Post操作。我在这两个隐藏的表单中添加了Html.Antiforgerytoken()
。单击按钮时,我们不需要Form Post [页面重新加载],而不是使用此Ajax帖子。
我尝试过使用Ajax帖子(使用Antiforgerytoken
),但它没有点击Post动作。显示404错误。
您能否建议如何使用Ajax帖子启用AntiforgryToken
?对于什么类型的代码处理以及它在哪里添加?
表格详情:
<form method="post" action="">
@Html.AntiForgeryToken()
<input type="hidden" name="Name" value="@downloadInfo.Name" />
<input type="hidden" name="Company" value="@downloadInfo.Company" />
<input type="hidden" name="Email" value="@downloadInfo.Email" />
<input type="hidden" name="Phone" value="@downloadInfo.Phone" />
</form>
Ajax Post:
$.ajax({
url: url,
type: 'POST',
data: JSON.stringify(Formdatas),
contentType: 'application/json; charset=utf-8',
beforeSend: showLoadingGraphic(id),
success: onSuccessfulPost
});
答案 0 :(得分:1)
如果您收到404,则不是来自令牌,您的网址或方法无效。 您将令牌包含在ajax表单中,因此请使用Fiddler工具查看请求的URL并首先修复该URL。
我猜你使用'URL'的Ajax调用不正确
答案 1 :(得分:0)
尝试按原样生成表单(使用Html.BeginForm帮助程序):
@using (Html.BeginForm("SomeAction", "SomeController", FormMethod.Post, new { id = "myForm" }))
{
@Html.AntiForgeryToken()
<input type="hidden" name="Name" value="@downloadInfo.Name" />
<input type="hidden" name="Company" value="@downloadInfo.Company" />
<input type="hidden" name="Email" value="@downloadInfo.Email" />
<input type="hidden" name="Phone" value="@downloadInfo.Phone" />
}
然后:
var myForm = $('#myForm');
$.ajax({
url: myForm.attr('action'),
type: myForm.attr('method'),
data: myForm.serialize(),
beforeSend: showLoadingGraphic(id),
success: onSuccessfulPost
});
现在,防伪令牌和隐藏字段将被正确发送到服务器。