仅在加载页面后发送ajax请求

时间:2016-01-10 08:59:46

标签: jquery ajax asp.net-mvc csrf antiforgerytoken

我在我的应用程序的服务器端使用microsoft asp.net mvc,并在客户端使用jquery。 在我的应用程序中,我需要在加载特定页面时做一些事情。我需要向服务器端发送请求并做一些事情。因为我在客户端执行此操作,所以每个用户都可以看到我的请求,我想确保发出请求的用户不是请求特定页面的用户。到目前为止,我使用请求伪造令牌,但在过去一个月我跟踪我的应用程序面临的异常和错误,我看到了所需的防伪cookie" myCookieName"不在场。首先,如果有人可以告诉我这是我的错误,第二,如果有人可以建议另一种解决方案。

这是我的HTML代码:

@using (Html.BeginForm("action", "controller", FormMethod.Post, new { id = "myForm" }))
{
    @Html.AntiForgeryToken()
    @Html.HiddenFor(m=>m.Id)
}

这是我的java脚本代码:

(function() {
$(function() {
    var $form = $("#myForm");
    $form.ajaxSubmit({
        success: function () {
            $form.remove();
        },
        error: function() {
            $form.remove();
        }
    });
});
}());

这是我的MVC代码:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public JsonResult Action(int id)
    {
        //Do stuff
    }

1 个答案:

答案 0 :(得分:0)

你ajax不包括AntiForgery Token

<script type="text/javascript">
    $('#myForm').submit(function () {
        var $form = $('#myForm');
        var token = $('input[name="__RequestVerificationToken"]', $form).val();
        $.ajax({
            url: $(this).data('url'),
            type: 'POST',
            data: { 
                __RequestVerificationToken: token, 
                someValue: 'some value' 
            },
            success: function (result) {
                alert(result.someValue);
            }
        });
        return false;
    });
</script>