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

在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>


杨魅力
浏览 391回答 3
3回答

慕丝7291255

太简单了!当你使用@Html.AntiForgeryToken()在您的html代码中,这意味着服务器已经对此页面进行了签名,并且从该特定页面发送到服务器的每个请求都有一个防止黑客发送虚假请求的标记。因此,要让服务器对此页面进行身份验证,您应该通过两个步骤:1.发送一个名为__RequestVerificationToken要获得它的值,使用代码如下:<script&nbsp;type="text/javascript"> &nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;gettoken()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;token&nbsp;=&nbsp;'@Html.AntiForgeryToken()'; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;token&nbsp;=&nbsp;$(token).val(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;token; &nbsp;&nbsp;&nbsp;}</script>例如,接受Ajax调用$.ajax({ &nbsp;&nbsp;&nbsp;&nbsp;type:&nbsp;"POST", &nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;"/Account/Login", &nbsp;&nbsp;&nbsp;&nbsp;data:&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__RequestVerificationToken:&nbsp;gettoken(), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uname:&nbsp;uname, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pass:&nbsp;pass&nbsp;&nbsp;&nbsp;&nbsp;}, &nbsp;&nbsp;&nbsp;&nbsp;dataType:&nbsp;'json', &nbsp;&nbsp;&nbsp;&nbsp;contentType:&nbsp;'application/x-www-form-urlencoded;&nbsp;charset=utf-8', &nbsp;&nbsp;&nbsp;&nbsp;success:&nbsp;successFu,});第二步就是用[ValidateAntiForgeryToken]
打开App,查看更多内容
随时随地看视频慕课网APP