首页 > 解决方案 > ASP.net 2.2 MVC:注销

问题描述

我有一个简单的登录-注销系统,不使用任何区域,所有视图都在文件夹视图中。

解决方案树视图

我试图在我的视图中使用此功能注销,但这将我带到了localhost:port/Account/logout页面,而没有在 AccountController 中传递我的注销功能。

<a class="" asp-area="" asp-controller="Account" asp-action="Logout">Logout</a>

谷歌搜索将我带到了一个注销表单,但我需要致电该Identity区域以使其正常工作。

<form asp-area="Identity" asp-page="/Account/Logout" asp-route-returnUrl="@Url.Action("Index", "Home", new { area = "" })" method="post" id="logoutForm" class="ml-auto">
    <ul class="nav navbar-top-links navbar-right">
        <li><button type="submit" class="fa fa-sign-out btn btn-w-m btn-link">Logout</button></li>
    </ul>
</form>

我觉得这很奇怪,因为我没有那个区域。我的 AccountController 有一个简单的标准注销功能,但我从来没有到达那里。

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Logout()
{
    await _signInManager.SignOutAsync();
    _logger.LogInformation("User logged out.");
    return RedirectToAction(nameof(HomeController.Index), "Home");
}

有谁知道我为什么不去那里,我所有的其他功能都通过了 AccountController:登录、注册、忘记密码,....只是我无法弄清楚的注销。

是否可以通过简单的<a>链接或者我必须使用表单方法?

标签: asp.net-mvclogoutasp.net-core-2.2

解决方案


这是因为您的控制器操作已明确设置为 POST 动词。链接继承地使用 GET 而不是发布。您必须执行一些 javascript 逻辑来处理链接单击并使用 post 提交或使用所示的 form 方法或翻转您的控制器操作以使用 Get 而不是 Post 。


推荐阅读