代码之家  ›  专栏  ›  技术社区  ›  drobison

.NET Core 2.0从区域到非区域的正确路线

  •  1
  • drobison  · 技术社区  · 7 年前

    我有一个。NET Core 2.0 MVC应用程序由一个名为admin的区域构成。

    • 地区
      • 管理
        • 意见
            • 指数cshtml
        • 控制器
          • HomeController。反恐精英
    • 控制器
      • HomeController。反恐精英
      • ManageController。反恐精英
    • 意见
        • 指数cshtml
      • 管理
        • 指数cshtml

    我希望有\u布局中的路由。cshtml,例如/controllers/manage/index,它在不在某个区域和在admin等区域都可以工作。使用HtmlHelper语法或TagHelper语法,我如何创建它?

    所需输出:

    www.website。com/管理

    我试过了

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

    当不在某个区域中,但在管理区域中时,它会生成指向以下内容的链接:

    www.website。com/管理员

    我在Startup Configure(IapplicationBuilder应用程序)中注册了以下路由

    // 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 回复  |  直到 7 年前
        1
  •  4
  •   NightOwl888 Jabrwoky    7 年前

    问题是您注册了两次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?}");
    });