【问题标题】:MVC 4.0 Routing "Area" PrefixMVC 4.0 路由“区域”前缀
【发布时间】:2015-12-21 07:24:15
【问题描述】:

我想我的问题很愚蠢,但我找不到任何可以正常工作的 awenser 或链接,所以。

关键是,我希望我的 url 反映我的文件夹结构。女巫是:

~/Controllers/Admin/ 
~/Controllers/Supply/

我的路由配置如下所示:

routes.MapRoute(
                 name: "Admin",
                 url: "Admin/{controller}/{action}",
                 namespaces: new [] {"Web_Intranet.Controllers.Admin"}
            );

routes.MapRoute(
                 name: "Supply",
                 url: "Supply/{controller}/{action}",
                 namespaces: new [] {"Web_Intranet.Controllers.Supply"}
            );

问题是,如果您在浏览器 url 上键入以下内容:

localhost:4342/admin/users/showall
OR
localhost:4342/supply/users/showall

两者都可以!我假设路由会检查您是否传递了有效的“控制器”和“动作”,并选择第一个符合条件的。

如果相应的前缀不匹配,我如何创建一个无效的路由配置?

【问题讨论】:

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


    【解决方案1】:

    这是您应该为每个区域添加的配置;

    ~/Areas/Admin/AdminAreaRegistration.cs

    using System.Web.Mvc;
    
    namespace MyApp.Areas.Admin
    {
      public class AdminAreaRegistration : AreaRegistration
      {
        public override string AreaName
        {
          get
          {
            return "Admin";
          }
        }
    
        public override void RegisterArea(AreaRegistrationContext context)
        {
          context.MapRoute(
              "Admin_default",
              "Admin/{controller}/{action}/{id}",
              new { controller = "Home", action = "Index", id = UrlParameter.Optional }
          );
        }
      }
    }
    

    确保 Route_Name 是唯一的

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-07
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 2019-09-13
    相关资源
    最近更新 更多