我决定第一次在我的站点中使用asp.net身份。我正在尝试从我的视图创建一个简单的注销链接。当我单击链接时,出现错误“ /应用程序中的服务器错误。请求的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>
在索引视图中单击注销链接时,它会返回上述错误。
链接的预期结果是调用控制器中的Logout方法并重定向到Login页面。
答案 0 :(得分:3)
由于要通过单击链接来访问链接,因此应使用[HttpGet]
而不是[HttpPost]
来分配端点,因为这是您提出的请求的类型。
您还应该在您的网站上添加防伪令牌,因为您正在通过使用[ValidateAntiForgeryToken]
(适用于POST请求)
如果您不想这样做(或在发出GET请求时),请删除注释,否则在表单中添加以下内容以生成一个注释:
@Html.AntiForgeryToken()
这将使输入类似于:
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8NrAkS ... s2-m9Yw">
详细了解AntiForgery令牌here。