2

我正在开发一个带有用户登录页面的 MVC 4 项目。一切正常。

问题是当我单击链接注销时,重定向 URL 不正确。

这是更好地解释的代码:

看法:

<a href="@Url.Action("LogOff", "Account")">Logout ?</a>

控制器:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
  {
     WebSecurity.Logout();

      return RedirectToAction("Login", "Account");
  }

当我单击注销链接时,URL 会显示这个 ==>Account/LogOff

但我想重定向到这个==>Account/Login

有谁知道发生了什么?

4

2 回答 2

4

在 HTML 中,锚元素 ( <a>) 发送 GET 请求,而不是 POST,因此您的[HttpPost]控制器操作将永远不会被调用。如果要调用此操作,您应该使用带有 POST 方法的 HTML 表单:

@using (Html.BeginForm("LogOff", "Account", FormMethod.Post))
{
    @Html.AntiForgeryToken()
    <button type="submit">Logout ?</button>
}

另请注意,我在表单中包含了一个 AntiForgery 令牌,因为您的控制器操作是用该[ValidateAntiForgeryToken]属性装饰的,因此是预期的。

于 2013-08-22T16:16:13.137 回答
2

删除 HttpPost 属性,一切都应该没问题。

[ValidateAntiForgeryToken]
public ActionResult LogOff()
  {
     WebSecurity.Logout();

      return RedirectToAction("Login", "Account");
  }
于 2013-08-22T16:17:22.703 回答