【问题标题】:MVC Ajax call not firing with ValidateAntiForgeryTokenMVC Ajax 调用未使用 ValidateAntiForgeryToken 触发
【发布时间】:2015-10-09 08:06:56
【问题描述】:

我有一个 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 函数(我用警报进行了测试),但没有调用 action 方法。我尝试在成功和错误函数中给出一些东西,但没有效果。

我也尝试过这样的 jquery 函数

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

但它仍然无法正常工作。

我做错了什么?

【问题讨论】:

  • 您的方法用[ValidateAntiForgeryToken] 装饰,但您没有传递令牌,因此该方法永远不会运行。
  • @StephenMuecke 是正确的。您可以通过在控制台中检查请求的结果来诊断此类问题。在这种情况下,您很可能会看到 500 错误。
  • 是的,你是对的。从操作方法中删除 ValidateAntiForgeryToken 就可以完成这项工作...

标签: jquery ajax asp.net-mvc


【解决方案1】:

您可以尝试像默认的 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。

【讨论】:

    【解决方案2】:

    该方法失败的原因是在操作方法中包含 AntiForgeryToken。删除它就可以了。

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

    感谢 Stephen Muecke 的澄清。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      • 2012-07-17
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      相关资源
      最近更新 更多