我的问题是,当我不在我的" Admin"区域链接显示为" / blog "但是,当我在我的" Admin"区域链接转到" / admin / blog "。
我有一个"管理员"区域,我已在"管理员"中的viewstart文件中指定了布局页面。区域视图部分。标记如下:
Layout = "~/Views/Shared/_Layout.cshtml";
我的链接标记如下(此链接位于我的_Layout.cshtml视图中):
<a asp-controller="Blog" asp-action="Index" class="nav-link"> Blog </a>
我的路线看起来像这样:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "areas",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
});
我的控制器在我的&#34;管理员&#34;区域看起来像这样:
[Authorize(Roles = "Admin")]
[Area("Admin")]
public class ProductsController : Controller
我尝试过添加asp-area =&#34;&#34;所以我的标签看起来像:
<a asp-area="" asp-controller="Blog" asp-action="Index" class="nav-link"> Blog </a>
但是,当通过开发人员工具查看时,这只会使href变空。
所以我的问题是如何从网址中删除区域名称?
我觉得这很容易,但我无法理解。我查看了this线程,但它不在.net核心中,因此解决方案不起作用。
答案 0 :(得分:1)
您的问题可能与您的路线定义相关联。尝试将路由组合到单个UseMvc调用中,并首先放置更具体的区域路由。
app.UseMvc(routes =>
{
routes.MapRoute(
name: "areas",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
然后,您可以将代码切换为使用asp-route="default"
,而不是使用asp-controller="..."
和asp-action="..."
。