如何使asp.net身份注销正常工作?

时间:2019-04-11 13:33:48

标签: c# asp.net-mvc asp.net-identity

我决定第一次在我的站点中使用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页面。

1 个答案:

答案 0 :(得分:3)

由于要通过单击链接来访问链接,因此应使用[HttpGet]而不是[HttpPost]来分配端点,因为这是您提出的请求的类型。

您还应该在您的网站上添加防伪令牌,因为您正在通过使用[ValidateAntiForgeryToken]适用于POST请求

对该方法进行验证来对其进行验证

如果您不想这样做(或在发出GET请求时),请删除注释,否则在表单中添加以下内容以生成一个注释:

@Html.AntiForgeryToken()

这将使输入类似于:

<input name="__RequestVerificationToken" type="hidden" value="CfDJ8NrAkS ... s2-m9Yw">

详细了解AntiForgery令牌here