如何让 asp.net 身份注销正常工作?
How to get asp.net identity logout to work?
我决定第一次在我的站点中使用 asp.net 身份。我正在尝试从我的角度创建一个简单的注销 link。单击 link 时出现错误 "Server Error in '/' Application. Requested URL: /Account/Logout"。在这一点上,在我看来,代码是正确的,但显然有些地方是错误的。任何帮助将不胜感激。
控制器:
// POST: /Account/Logout
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Logout()
{
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie, DefaultAuthenticationTypes.ExternalCookie);
Session.Abandon();
return RedirectToAction("Login", "Account");
}
索引视图:
<div id="sidebar-nav" class="sidebar">
<div class="sidebar-scroll">
<nav>
<ul class="nav">
<li><a href="@Url.Action("Index", "Home")" class="active"><i class="lnr lnr-home"></i> <span>Dashboard</span></a></li>
<li>
<a href="#subPages" data-toggle="collapse" class="collapsed"><i class="lnr lnr-file-empty"></i> <span>Reports</span> <i class="icon-submenu lnr lnr-chevron-left"></i></a>
<div id="subPages" class="collapse ">
<ul class="nav">
<li><a href="@Url.Action("Index", "Home")" class="">Fulfillment</a></li>
<li><a href="@Url.Action("Index", "Home")" class="">Report</a></li>
<li><a href="@Url.Action("Index", "Home")" class="">Report</a></li>
</ul>
</div>
</li>
<li><a href="@Url.Action("Logout", "Account")" class=""><i class="lnr lnr-dice"></i> <span>Logout</span></a></li>
</ul>
</nav>
</div>
</div>
当在索引视图中单击注销 link 时 returns 出现上述错误。
预期结果是 link 调用控制器中的注销方法并重定向到登录页面。
由于您是通过单击访问 link,因此您应该使用 [HttpGet]
而不是 [HttpPost]
来指定您的端点,因为这是您请求的类型制作.
您还应该将防伪令牌添加到您的网站,因为您正在通过使用 [ValidateAntiForgeryToken]
的方法来验证它(适用于 POST 请求)
如果您不想这样做(或者当您发出 GET 请求时),请删除注释 否则将以下内容添加到您的表单中以生成一个:
@Html.AntiForgeryToken()
这反过来将呈现类似于以下内容的输入:
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8NrAkS ... s2-m9Yw">
阅读更多关于防伪令牌的信息here。
我决定第一次在我的站点中使用 asp.net 身份。我正在尝试从我的角度创建一个简单的注销 link。单击 link 时出现错误 "Server Error in '/' Application. Requested URL: /Account/Logout"。在这一点上,在我看来,代码是正确的,但显然有些地方是错误的。任何帮助将不胜感激。
控制器:
// POST: /Account/Logout
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Logout()
{
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie, DefaultAuthenticationTypes.ExternalCookie);
Session.Abandon();
return RedirectToAction("Login", "Account");
}
索引视图:
<div id="sidebar-nav" class="sidebar">
<div class="sidebar-scroll">
<nav>
<ul class="nav">
<li><a href="@Url.Action("Index", "Home")" class="active"><i class="lnr lnr-home"></i> <span>Dashboard</span></a></li>
<li>
<a href="#subPages" data-toggle="collapse" class="collapsed"><i class="lnr lnr-file-empty"></i> <span>Reports</span> <i class="icon-submenu lnr lnr-chevron-left"></i></a>
<div id="subPages" class="collapse ">
<ul class="nav">
<li><a href="@Url.Action("Index", "Home")" class="">Fulfillment</a></li>
<li><a href="@Url.Action("Index", "Home")" class="">Report</a></li>
<li><a href="@Url.Action("Index", "Home")" class="">Report</a></li>
</ul>
</div>
</li>
<li><a href="@Url.Action("Logout", "Account")" class=""><i class="lnr lnr-dice"></i> <span>Logout</span></a></li>
</ul>
</nav>
</div>
</div>
当在索引视图中单击注销 link 时 returns 出现上述错误。
预期结果是 link 调用控制器中的注销方法并重定向到登录页面。
由于您是通过单击访问 link,因此您应该使用 [HttpGet]
而不是 [HttpPost]
来指定您的端点,因为这是您请求的类型制作.
您还应该将防伪令牌添加到您的网站,因为您正在通过使用 [ValidateAntiForgeryToken]
的方法来验证它(适用于 POST 请求)
如果您不想这样做(或者当您发出 GET 请求时),请删除注释 否则将以下内容添加到您的表单中以生成一个:
@Html.AntiForgeryToken()
这反过来将呈现类似于以下内容的输入:
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8NrAkS ... s2-m9Yw">
阅读更多关于防伪令牌的信息here。