首页新闻找找看学习计划

asp.net mvc AreaRegistration路由的使用??

0
[已解决问题] 解决于 2015-11-09 23:41

使用 注册了一个Area路由 如下

 public class MemberAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "Member";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "Member_default",
                "Member/{controller}/{action}/{id}",
                new { controoler="Account", action = "Login", id = UrlParameter.Optional },
                namespaces: new string[] { "SiteManage.Areas.Member.Controllers" }
            );
        }
    }

当使用 /Member/Account 的时候可以使用到上面配置的路由,

但是当只使用 /Member 时就会使用到最外面的路由 如下

 public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                namespaces: new string[] { "SiteManage.Controllers" }
            );
        }

 

问:怎么才能在使用路劲/Member 时还是使用第一个路由配置?

koi的主页 koi | 初学一级 | 园豆:3
提问于:2015-09-28 11:31
< >
分享
最佳答案
0

这好像不可以,Area是MVC2后新出的路由方式,它必须是 /Member/Account,如果你/Member 它是匹配不到,当然去找默认路由

奖励园豆:5
稳稳的河 | 老鸟四级 |园豆:4183 | 2015-09-28 11:54

是先匹配Area里的路由       匹配不到就匹配外面的路由吗??

koi | 园豆:3 (初学一级) | 2015-09-28 11:58

@koi:area的路由也是在网站启动的时候注册的,即global的start方法中执行的,调用的方法是 AreaRegistration.RegisterAllAreas();这个方法遍历程序集中个继承了AreaRegistration类的类型,然后逐个调用这些类型的RegisterArea方法。一个常见的AreaRegistration类型如下。通常如果通过visual studio添加的area都自动生成了这个类。(我这里的area是手动生成的)。那么areaRegistration会关注哪些controller呢?实际上AreaRegistration类型会将其所在的命名空间保存在DataTokens["Namespaces"]中,在接收请求的时候就只会在这些命名空间或子空间中寻找controller,如果命名空间写错了,当然就无法识别了。因此实际上area注册仅仅起到的作用是,将area的名字和命名空间关联起来。因此如果要导航area中的controller必须首先提供area名字,这样就不会找到其他命名空间下的controller了,它必须先去找你的area名字,它的机制是这样的

稳稳的河 | 园豆:4183 (老鸟四级) | 2015-09-28 12:13

@稳稳的河: 有没有办法在Area里写死掉 当访问 /Member 时  默认访问 /Member/Account

koi | 园豆:3 (初学一级) | 2015-09-28 14:15

@koi: 实现第一个跳转一次就好了

西丑扒黄 | 园豆:168 (初学一级) | 2015-09-29 16:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册