为了账号安全,请及时绑定邮箱和手机立即绑定

在Ajaxpost ASP.NETMVC中包含防伪造令牌

在Ajaxpost ASP.NETMVC中包含防伪造令牌

杨魅力 2019-07-12 18:58:16
在Ajaxpost ASP.NETMVC中包含防伪造令牌我在Ajax的AntiForgeryToken上遇到了麻烦。我正在使用ASP.NETMVC 3。jQueryAjax调用和Html.antiForgeryToken()..现在正在使用该解决方案传递令牌:var data = { ... } // with token, key is '__RequestVerificationToken'$.ajax({         type: "POST",         data: data,         datatype: "json",         traditional: true,         contentType: "application/json; charset=utf-8",         url: myURL,         success: function (response) {             ...         },         error: function (response) {             ...         }     });当我移除[ValidateAntiForgeryToken]属性来查看数据(带有令牌)是否作为参数传递给控制器,我可以看到它们正在被传递。但出于某种原因A required anti-forgery token was not supplied or was invalid.当我将属性放回时,仍然会弹出消息。有什么想法吗?编辑反伪造令牌是在表单中生成的,但我不使用Submit操作来提交它。相反,我只是使用jQuery获取令牌的值,然后尝试Ajax发布该值。下面是包含令牌的表单,位于顶部母版页:<form id="__AjaxAntiForgeryForm" action="#" method="post">     @Html.AntiForgeryToken()</form>
查看完整描述

3 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

太简单了!当你使用@Html.AntiForgeryToken()在您的html代码中,这意味着服务器已经对此页面进行了签名,并且从该特定页面发送到服务器的每个请求都有一个防止黑客发送虚假请求的标记。因此,要让服务器对此页面进行身份验证,您应该通过两个步骤:

1.发送一个名为__RequestVerificationToken要获得它的值,使用代码如下:

<script type="text/javascript">
    function gettoken() {
        var token = '@Html.AntiForgeryToken()';
        token = $(token).val();
        return token;
   }</script>

例如,接受Ajax调用

$.ajax({
    type: "POST",
    url: "/Account/Login",
    data: {
        __RequestVerificationToken: gettoken(),
        uname: uname,
        pass: pass    },
    dataType: 'json',
    contentType: 'application/x-www-form-urlencoded; charset=utf-8',
    success: successFu,});

第二步就是用[ValidateAntiForgeryToken]


查看完整回答
反对 回复 2019-07-12
  • 3 回答
  • 0 关注
  • 390 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信