如何隐藏URL中的“区域”名称?

时间:2018-04-26 19:15:15

标签: c# asp.net-core

我的问题是,当我不在我的" 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核心中,因此解决方案不起作用。

1 个答案:

答案 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="..."