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。您要查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请查看以下 URL 并确保其拼写正确。请求的 URL:/MySiteName/Account/LogOff/logoutForm
知道为什么第二种态度有效吗?为什么我在我的 URL 中得到 logoutForm 作为后缀?
解决方案
/MySiteName/Account/LogOff/logoutForm
根本不存在的路线。id
您正在将带有值的路由参数传递"logoutForm"
给您的路由,但操作方法 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,达到同样的效果,并在此过程中消除一些不必要的复杂性。
推荐阅读
- elasticsearch - 了解弹性搜索中嵌套字段的排序结果
- linux - 如何在 sh 中循环到日期之间的月末日期?
- typescript - 如何画一个圆形的图片 Pixijs
- docker - 在运行的容器内挂载 Lustre 不起作用(已添加所有功能)
- java - 无法从 docker 容器在 Wildfly 服务器 bin 文件夹中创建日志文件夹
- reactjs - 从组件内部和外部更改属性或状态
- data-structures - 什么是存储和使用同义词库的好数据结构?
- c++ - c++ 有没有可能`map.end()` 可以在`std::map` 的生命周期内改变
- string - 用于将字符串“09-Jan-20”//(DD-MMM-YY)转换为 ISO 日期的 MongoDB 脚本
- c# - 自动填充代理要求 webview2