Ajax 调用中未识别 AntiforgeryToken
AntiforgeryToken Not Recognized In Ajax Call
我有一个场景,我不需要发送表单数据,而是通过 ajax 调用发送一些其他数据。我有一个包含 html.AntiForgeryToken()
的表格。
这是我试过的。
var modid = $("#moduleList").val();
var data = {};
data.modid = modid;
var token = $('#frmmmenu input[name="__RequestVerificationToken"]').val();
data.__RequestVerificationToken = token;
//var dataWithToken = $.extend(data, token);
$.ajax({
type: "POST",
url: "Home/MainMenu",
data: JSON.stringify(data),
//contentType: "application/json; charset=utf-8", // request data type
dataType: "html", // response data type
success: function (msg) {
$("#accordion").html(msg);
},
error: function (msg) {
alert("Ajax Error");
},
});
但我一直收到 The required anti-forgery form field "__RequestVerificationToken" is not present
。错误。
这是 Firebug 屏幕截图
我的操作方法也用 ValidateAntiForgeryToken 装饰
[HttpPost]
[Authorize]
[ValidateAntiForgeryToken]
public ActionResult MainMenu(int modid)
{
}
这是什么原因造成的?有什么想法吗?
编辑:
这是一个 MVC5 项目。
找到解决方案。
罪魁祸首是
data: JSON.stringify(data),
将上面的改为
data: data,
现在Firebug显示
希望有人可以 post 解决方案 JSON 因为 Url 长度有限,尽管它需要 contentType application/x-www-form-urlencoded
感谢大家的支持。
对我来说,在制定有效的解决方案之前,我必须尝试每一个 post:
JS
var form = jQuery("#AuthForm");
form.children("input[name=provider]").val(source.SourceName);
form.children("input[name=returnUrl]").val(window.location.href);
$.ajax({
url: form.attr('action'),
data: form.serialize(),
success: function (response) {
console.log(response);
}
});
显然,我填写的值(.val() 语句)是针对我的情况的。另外,我在 angular 应用程序中 运行 这个。
CSHTML
<form id="AuthForm" action="@Url.Action("LinkExternalLogin","LoginInfo")" method="post">
@Html.AntiForgeryToken()
<input type="hidden" name="provider" value="" />
<input type="submit" name="returnUrl" value="" />
</form>
我有一个场景,我不需要发送表单数据,而是通过 ajax 调用发送一些其他数据。我有一个包含 html.AntiForgeryToken()
的表格。
这是我试过的。
var modid = $("#moduleList").val();
var data = {};
data.modid = modid;
var token = $('#frmmmenu input[name="__RequestVerificationToken"]').val();
data.__RequestVerificationToken = token;
//var dataWithToken = $.extend(data, token);
$.ajax({
type: "POST",
url: "Home/MainMenu",
data: JSON.stringify(data),
//contentType: "application/json; charset=utf-8", // request data type
dataType: "html", // response data type
success: function (msg) {
$("#accordion").html(msg);
},
error: function (msg) {
alert("Ajax Error");
},
});
但我一直收到 The required anti-forgery form field "__RequestVerificationToken" is not present
。错误。
这是 Firebug 屏幕截图
我的操作方法也用 ValidateAntiForgeryToken 装饰
[HttpPost]
[Authorize]
[ValidateAntiForgeryToken]
public ActionResult MainMenu(int modid)
{
}
这是什么原因造成的?有什么想法吗?
编辑: 这是一个 MVC5 项目。
找到解决方案。
罪魁祸首是
data: JSON.stringify(data),
将上面的改为
data: data,
现在Firebug显示
希望有人可以 post 解决方案 JSON 因为 Url 长度有限,尽管它需要 contentType application/x-www-form-urlencoded
感谢大家的支持。
对我来说,在制定有效的解决方案之前,我必须尝试每一个 post:
JS
var form = jQuery("#AuthForm");
form.children("input[name=provider]").val(source.SourceName);
form.children("input[name=returnUrl]").val(window.location.href);
$.ajax({
url: form.attr('action'),
data: form.serialize(),
success: function (response) {
console.log(response);
}
});
显然,我填写的值(.val() 语句)是针对我的情况的。另外,我在 angular 应用程序中 运行 这个。
CSHTML
<form id="AuthForm" action="@Url.Action("LinkExternalLogin","LoginInfo")" method="post">
@Html.AntiForgeryToken()
<input type="hidden" name="provider" value="" />
<input type="submit" name="returnUrl" value="" />
</form>