我一直在看一下在SO上如何做到这一点的例子,据我所知,迄今为止我已经尝试了所有可以找到的例子,没有成功.我已经尝试将一些实现改为我的场景,但是迄今为止还是失败了.
我在我的页面上有这个_layout.cshtml,所以我总是有一个令牌可用:
<form id="__AjaxAntiForgeryForm" action="#" method="post"> @Html.AntiForgeryToken()</form>
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看起来正确(未编码),它映射正确.
如何在没有表单的情况下正确地贴出该标记?
解决方法
原文地址:https://www.jb51.cc/jquery/180429.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。