【问题标题】:.NET Core 2.0 Correct way to route from area to nonarea.NET Core 2.0 从区域路由到非区域的正确方法
【发布时间】:2018-06-24 15:48:30
【问题描述】:

我有一个 .NET Core 2.0 MVC 应用程序,其结构中包含一个名为 admin 的区域。

  • 区域
    • 管理员
      • 查看次数
        • 首页
          • Index.cshtml
      • 控制器
        • HomeController.cs
  • 控制器
    • HomeController.cs
    • ManageController.cs
  • 查看次数
    • 首页
      • Index.cshtml
    • 管理
      • Index.cshtml

我想在 _Layout.cshtml 中添加路由,例如 /controllers/manage/index,这些路由在不在某个区域时和在管理员等区域时都可以使用。使用 HtmlHelper 语法或 TagHelper 语法如何创建?

期望的输出:

www.website.com/manage

我试过了

<a asp-area="" asp-controller="Manage" asp-action="Index" title="Manage">Manage</a>

当不在一个区域时有效,但在管理区域时会产生一个链接:

www.website.com/admin

我在 Startup Configure(IapplicationBuilder app) 中注册了以下路由

// Route for areas
app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "areas",
        template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
    );
});

// Default route
app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});

【问题讨论】:

  • 根据the documentation,你说得对。最好的猜测是您还没有注册区域路线。
  • 你期望它产生什么?
  • @StephenMuecke 更新了问题以包含所需的输出

标签: asp.net-mvc asp.net-core asp.net-mvc-routing


【解决方案1】:

问题是你注册了两次 MVC。

// Route for areas
app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "areas",
        template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
    );
});

// Default route
app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});

在这种情况下,最后一次注册会覆盖第一个,因此您实际上只注册了 1 条路线(并且没有区域路线)。

要解决此问题,您只需注册一次 MVC 并将所有路由放入该实例中。

app.UseMvc(routes =>
{
    // Route for areas
    routes.MapRoute(
        name: "areas",
        template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
    );

    // Default route
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});

【讨论】:

    猜你喜欢
    • 2021-10-26
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 2017-12-30
    • 2021-05-04
    相关资源
    最近更新 更多