在我的索引视图中,对于列表中的每一项,都有一个用于删除记录的actionlink。操作链接url的类型为“/Controller/Delete/id
”
当操作链接被点击时,一个模态弹出窗口要求确认,然后一个post请求被发送到控制器。
问题是我无法通过 AJAX 调用发送防伪令牌。
下面是控制器方法(仅用于测试):
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Delete(int id)
{
try
{
Group g = db.Groups.Find(id);
if (g != null)
{
db.Groups.Remove(g);
db.SaveChanges();
var url = Url.Action("IndexPartial");
return Json(new
{
success = true,
message = "deletion completed successfully",
redirectUrl = url
});
}
else
{
return Json(new
{
success = false,
message = "Not found"
});
}
}
catch (Exception ex)
{
return Json(new
{
success = false,
message = ex.Message.ToString()
});
}
}
字符串
在Index视图中,我添加了:
@Html.AntiForgeryToken()
型
AJAX 调用的JavaScript代码
$('#confirmActionBtn').on('click', function () {
var token = $('[name="__RequestVerificationToken"]').val(); // Get the AntiForgeryToken value
$.ajax({
url: actionConfirmModal.attr("data-actionUrl"),
type: 'POST',
contentType: 'application/json',
headers: {'RequestVerificationToken':token},
success: function (response) {
setupModal('result');
if (response.success) {
if (response.redirectUrl != null) {
var targetPlaceHolder = actionConfirmModal.attr("data-targetPlaceHolder");
if (targetPlaceHolder != null) {
targetPlaceHolder.load(redirectUrl);
}
else {
window.location.href = redirectUrl;
}
}
else {
//do something
}
}
else {
$('#resultMessage').text("Errore : " + response.message);
}
},
error: function (xhr, status, error) {
setupModal('result');
$('#resultMessage').text("Errore : " + error);
},
});
});
型
当我运行代码时,我得到错误:
所需的防伪表单字段“__RequestVerificationToken”不存在。
1条答案
按热度按时间bnl4lu3b1#
使用$. AJAX 数据属性在请求体(而不是头)中传递__RequestVerificationToken值:
字符串
或者,至少将有效载荷(头部)键重命名为“__RequestVerificationToken”。
标签:include antiforgerytoken in ajax post ASP.NET MVC