我想要注销用户功能。
当用户点击此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作为后缀?
答案 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,实现同样的目标,并在此过程中消除一些不必要的复杂性。