Jquery MVC Ajax调用未使用ValidateAntiForgeryToken触发

Jquery MVC Ajax调用未使用ValidateAntiForgeryToken触发,jquery,ajax,asp.net-mvc,Jquery,Ajax,Asp.net Mvc,我有一个jquery函数: function ExpireSession() { $.ajax({ type: "POST", url: '@Url.Action("LogOffSession","Account")', dataType: "json", success: function (data) { },

我有一个jquery函数:

function ExpireSession() {
            $.ajax({
                type: "POST",
                url: '@Url.Action("LogOffSession","Account")',
                dataType: "json",
                success: function (data) {
                },
                error: function (data) {
                }
            });
        }
从上述函数调用的操作方法是:

[HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult LogOffSession()
    {
        Session.Abandon();
        FormsAuthentication.SignOut();
        return Json(new { result = true });
    }
jquery函数已通过警报调用,但未调用操作方法。我尝试在成功和错误函数中给出一些东西,但没有效果

我也尝试过这样给jquery函数

function ExpireSession() {
            var url = '@Url.Action("LogOffSession", "Account")';
            $.post(url, null, function (data) {
                return true;
            });
但它仍然不起作用


我做错了什么?

该方法失败的原因是action方法中包含了AntiForgeryToken。去掉它就行了

要在操作方法和jquery调用中包含AntiForgeryToken,请签出


感谢Stephen Muecke的澄清。

您可以尝试使用默认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>
                }
            }
您只需执行document.getElementById'logoutForm'。从javascript提交到注销。不需要在表单中包含注销链接,它可以隐藏。 这会处理好防伪令牌。
但是我认为,您不需要使用AntiForgeryToken保护您的注销方法,您可以删除该属性,然后像现在一样调用url。

您的方法用[ValidateAntiForgeryToken]修饰,但您没有传递该标记,因此该方法将永远不会运行。@StephenMuecke是正确的。您可以通过在控制台中检查请求的结果来诊断此类问题。在这种情况下,您很可能会看到一个500错误。是的,您是对的。从操作方法中删除ValidateAntiForgeryToken会执行以下操作。。。