【发布时间】:2013-07-25 08:04:03
【问题描述】:
我一直在查看如何在 SO 上执行此操作的示例,据我所知,我已经尝试了所有我能找到的示例,但到目前为止都没有成功。我已经尝试将一些实现更改为我的场景,但到目前为止这也失败了。
我的页面上有这个 _layout.cshtml,所以我总是有一个可用的令牌:
<form id="__AjaxAntiForgeryForm" action="#" method="post"> @Html.AntiForgeryToken()</form>
我的 JavaScript utils 文件中也有这个方法:
AddAntiForgeryToken = function (data) {
data.__RequestVerificationToken = $('#__AjaxAntiForgeryForm input[name=__RequestVerificationToken]').val();
return data;
};
这一切都按预期工作,我得到了一个防伪令牌。我的实际发布代码是:
myPage.saveData = function() {
var saveUrl = '/exercises/PostData';
var myData = JSON.stringify(myPage.contextsArrays);
$.ajax({
type: 'POST',
async: false,
url: saveUrl,
data: AddAntiForgeryToken({ myResults: myData }),
success: function () {
alert('saved');
},
dataType: 'json',
contentType: "application/json; charset=utf-8"
});
};
我的操作方法如下所示:
[HttpPost, ValidateAntiForgeryToken, JsonExceptionFilter]
public JsonResult PostData(List<ResultsDc> myResults)
{
return Json(_apiClient.SubmitResults(myResults));
}
我一直在使用我一直在尝试的各种实现对此进行测试,并且响应始终是:
{"errorMessage":"The required anti-forgery form field \"__RequestVerificationToken\" is not present."}
我没有发布一个表单,它只是一个数据数组,但检查实际发布的数据 Json 看起来不正确(它都是编码的)但是 __RequestVerificationToken 参数名称在那里并且令牌值也存在.
目前我对这一切感到很困惑,无法找到发送令牌的正确方法,以便调用我的 MVC 操作。如果我删除 ValidateAntiForgeryToken 属性并将 JSON.stringify(myPage.contextsArrays); 作为数据,则 json 看起来正确(未编码)并且映射良好。
如何在没有表单的情况下正确发布此令牌?
【问题讨论】:
-
我很困惑。如果您还没有看到这一点,并且您在下面的答案是其他人(我在 SO 上的其他答案中看到了该代码),您为什么要尝试回答您不理解的问题??
-
属性不用分开...
标签: jquery asp.net-mvc json