【发布时间】:2020-12-25 00:27:04
【问题描述】:
所以问题是这样的,我有一个顶部导航栏,上面有一个这样的注销链接
<ul class="navbar-nav ml-auto">
@if (signInManager.IsSignedIn(User))
{
<li class="nav-item">
<form method="post" asp-controller="account" asp-action="logout">
<button type="submit" style="width:auto"
class="nav-link btn btn-link py-0">
Logout @User.Identity.Name
</button>
</form>
</li>
}
else
{
<li class="nav-item">
<a class="nav-link" asp-controller="account" asp-action="register"> Register</a>
</li>
}
</ul>
我的项目还包括区域,所以我有 2 个区域经纪人/客户:
使用代理登录后,注销的表单操作将修改为此
action: /Broker/account/logout,这会导致问题,因为我的 Broker 区域没有那个控制器
问题:为什么它没有显示 /account/logout 操作,就像我的表单“发布”代码中所述: form method="post" asp-controller="account" asp-action="logout"
Account Controller 没有在任何区域定义,它属于默认的 Controllers 文件夹,如图所示,AccountController / Logout 操作只会重定向到 HomeController / Index 操作。
请帮助我理解:D
编辑:我的路由:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{area:exists}/{controller=Account}/{action=Login}/{id?}");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Account}/{action=Login}/{id?}");
endpoints.MapRazorPages();
});
【问题讨论】:
-
1) 你的路由配置是什么? 2)您的 AccountController 中有标签 [Area("Broker")] 吗? 3)你的重定向代码是什么? 4)您所在区域是否定义了任何控制器?
-
2) 您的 AccountController 中有标签 [Area("Broker")] 吗? = "Broker" 标签存在于 Broker/HomeController 中,AccountController 是独立的,它不属于任何区域 3) 你的重定向代码是什么? : 没有定义任何东西 4) 你有在你的区域定义的任何控制器吗?是的,有 Broker/Controllers/HomeController 用我的路由更新了帖子
-
我看到的第一个问题是您不能定义 2 条具有相同名称的路由。大写有关系吗? asp-controller="Account" asp-action="Logout" asp-area=""
-
因为您没有在表单标签中定义 asp-area,它可能会采用在您当前路由中找到的那个(并且因为您在 /broker 上,所以将选择默认区域)。尝试设置一个空的asp-area
标签: c# asp.net asp.net-core model-view-controller