为什么注销用户无法正常工作?

时间:2018-05-14 08:36:56

标签: asp.net-mvc

我想要注销用户功能。

当用户点击此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.您正在寻找的资源(或其中一个   依赖项)可能已被删除,其名称已更改,或者是   暂时不可用。请查看以下网址并制作   确保它拼写正确。请求的网址:   / MySiteName /帐户/注销/ logoutForm

知道为什么第二种态度有效吗?为什么我在我的网址中将logoutForm作为后缀?

1 个答案:

答案 0 :(得分:0)

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

public ActionResult LogOff() {}

正如您所看到的那样,它不会带任何参数,因此您必须调用的网址与其上方注释中所述的网址相同:// POST: /Account/LogOff

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

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

你应该好好去。

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