【问题标题】:ASP.NET Core 2 default route having areas具有区域的 ASP.NET Core 2 默认路由
【发布时间】:2018-06-30 07:34:09
【问题描述】:

c 我浏览了有关区域路由的各种帖子,但仍然无法解决我的问题。

我想以有两条路线的方式拆分我的应用程序。

  • /Areas/Panel
  • /Areas/Website

每个区域内都有HomeController和对应于动作的相应方法。

每当用户登陆任何 1 级路线时,我都希望这样:

  • /家
  • /联系方式
  • /关于/公司

被定向到/Areas/Website/{controller}/{action}

或者对于

  • /面板
  • /面板/主页
  • /panel/users/2

/Areas/Panel/{controller}/{action}

我目前的MVC路线是:

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

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

但它不起作用,可能是因为我不完全理解如何告诉路由器默认使用Website 区域。我在控制器本身之前尝试了各种指令,但没有奏效。

我可以征求你的意见吗?

提前谢谢你。

【问题讨论】:

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


    【解决方案1】:

    它不起作用的一个原因是您以错误的顺序注册了路线。路由从路由表的顶部到底部进行评估,第一场比赛获胜。

    另一个问题是,如果您希望将请求定向到Website 区域,则需要将“默认”路由设置为区域路由(使用MapAreaRoute 扩展方法)。

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "area",
            template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
    
        routes.MapAreaRoute(
            name: "default",
            areaName: "Website",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
    

    参考:Why map special routes first before common routes in asp.net mvc?

    【讨论】:

    • 您好,不幸的是没有运气。我尝试了相反的方法。当我转到:/Website/Home 时它可以工作,然后我收到一个错误:InvalidOperationException: The view 'Index' was not found. The following locations were searched: /Views/Home/Index.cshtml /Views/Shared/Index.cshtml,这是有道理的,因为所需的视图不是直接在项目中,而是在网站/视图中。我在想template: "Areas/Website/{controller=Home}/{action=Index}/{id?}") 之类的东西,但这也不起作用。
    • 谢谢。我认为正确的一点是关于 areaName,因为这对我来说似乎是缺少的,但不幸的是我收到了一个错误:Error CS1739 The best overload for 'MapRoute' does not have a parameter named 'areaName'。所以看来问题是如何为default 声明指向正确的区域...
    • MapRoute 更改为MapAreaRoute(见我的回答)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 2020-05-31
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多