【问题标题】:Why logoff user not working?为什么注销用户不起作用?
【发布时间】:2018-10-23 20:47:15
【问题描述】:

我想要注销用户功能。

当用户点击这个 linq 时:

  <a tabindex="-1" href="javascript:document.getElementById('logoutForm').submit()"><i class="glyphicon glyphicon-off"></i>LogOff </a>

这个动作被称为:

  [Authorize]
public class AccountController : BaseController
{
    // POST: /Account/LogOff
    [HttpPost]
    //[ValidateAntiForgeryToken]
    public ActionResult LogOff()
    {
        AuthenticationManager.SignOut();
        return RedirectToAction("Index", "Home");
    }
}

虽然我将上面的 linq 改为:

@Ajax.ActionLink(@Resources.Resources.LogOff, "LogOff", "Account", new { id = "logoutForm" }, new AjaxOptions { HttpMethod = "POST" })

我得到错误:

描述:HTTP 404。您正在寻找的资源(或其之一 依赖项)可能已被删除,名称已更改,或者是 暂时不可用。请查看以下 URL 并制作 确保拼写正确。请求的网址: /MySiteName/Account/LogOff/logoutForm

知道为什么第二种态度有效吗?为什么我在我的 URL 中得到 logoutForm 作为后缀?

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    /MySiteName/Account/LogOff/logoutForm 的路由根本不存在。您将带有值 "logoutForm" 的路由参数 id 传递给您的路由,但操作方法 LogOff 不接受任何参数。 这也正是错误告诉您的内容。您可以通过查看您的操作方法的签名来验证这一点:

    public ActionResult LogOff() {}
    

    如您所见,它不带任何参数,因此您必须调用的 url 与它上面的评论中所述相同:// POST: /Account/LogOff

    这反过来意味着,删除你的路由参数,所以只需将 new { id = "logoutForm" } 替换为 null:

    @Ajax.ActionLink(@Resources.Resources.LogOff, "LogOff", "Account", null, new AjaxOptions { HttpMethod = "POST" })
    

    你应该很高兴。

    我看不出原因,为什么 Log out 本身应该是一个帖子。您没有向服务器提交任何数据。你可以做一个简单的 GET,达到同样的效果,并在此过程中消除一些不必要的复杂性。

    【讨论】:

    • 感谢您的帖子。我尝试了您的示例。但我收到此错误:说明:HTTP 404。您正在寻找的资源(或其依赖项之一)可能已被删除,其名称已更改,或暂时不可用。请查看以下 URL 并确保其拼写正确。请求的 URL:/MySiteName/Account/LogOff
    • 您是否在某处删除了帖子选项?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 2018-10-26
    • 2020-06-11
    相关资源
    最近更新 更多