使用ValidateAntiForgeryToken

时间:2015-10-09 08:06:56

标签: jquery ajax asp.net-mvc

我有一个jquery函数:

function ExpireSession() {
            $.ajax({
                type: "POST",
                url: '@Url.Action("LogOffSession","Account")',
                dataType: "json",
                success: function (data) {
                },
                error: function (data) {
                }
            });
        }

从上述函数调用的action方法是:

[HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult LogOffSession()
    {
        Session.Abandon();
        FormsAuthentication.SignOut();
        return Json(new { result = true });
    }

调用jquery函数(我使用警报测试)但未调用action方法。我尝试过成功和错误功能,但没有效果。

我也尝试过像这样的jquery函数

function ExpireSession() {
            var url = '@Url.Action("LogOffSession", "Account")';
            $.post(url, null, function (data) {
                return true;
            });

但仍无效。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

该方法失败的原因是在action方法中包含了AntiForgeryToken。删除它可以解决问题。

要在您的操作方法和jquery调用中包含AntiForgeryToken,请检查this

感谢Stephen Muecke的澄清。

答案 1 :(得分:0)

您可以尝试像默认的MVC模板一样,在页面中包含一个表单,如下所示:

@if (Request.IsAuthenticated)
            {
                using (Html.BeginForm(MVC.Account.LogOff(), FormMethod.Post, new { id = "logoutForm" }))
                {
                    @Html.AntiForgeryToken()

                    <a href="javascript:document.getElementById('logoutForm').submit()">
                        <i class="fa fa-sign-out"></i> Log out
                    </a>
                }
            }

您可以从javascript执行document.getElementById('logoutForm').submit()注销。不需要在表单中包含注销链接,它可以隐藏。 这照顾了AntiForgeryToken 但是我认为,你不需要使用AntiForgeryToken来保护你的注销方法,你可以删除属性并像现在一样调用url。