首页 新闻 会员 周边

MVC路由问题

0
悬赏园豆:100 [已解决问题] 解决于 2017-07-20 17:39

我有一个MumStation控制器,然后添加了一个同名的Area 是MumStation,在这个Area里面还有一个MumStation控制器。然后我把路由配置都改成有namesapce的重载的了。然后情况如下:

1、我默认路由默认的首页是MumStation控制器的index页面,可以访问。

2、我浏览MumStation/MumStation/index页面可以浏览(Area里面的页面)。

3、我浏览MumStation/index页面报404(控制器的页面)。

这是为什么?

然后我把MumStation这个Area的路由里面的url改成了如下:

        public override void RegisterArea(AreaRegistrationContext context) 
        {
            context.MapRoute(
                "MumStation_default",
                "Mum/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional },
                new string[] { "CCP_Second.Areas.MumStation.Controllers" }
            );
        }

这个时候我访问Area里的MumStation的Index页面应该是/mum/Mumstation/index了吧?这是可以正常访问的。然后我访问控制器的Index即MumStation/index居然也可以访问了。

那么又有一个问题:

在MVC管道第7.8事件的时候通过注册的路由配置,查找是否存在对应文件。现在我有两个路由规则,一个是默认的Default还有一个是MumStation_default。这个时候程序是怎么根据这两个规则匹配的?我现在的理解是:

先按照Default的规则查找,如果找到了就结束,如果没有找到就在按照MumStation_default的找,如果还没有找到就是404了。

但是上述发生的情景和我现在理解的不一致,请问可以详细帮我解释一下原理吗?

陌陌秋雨的主页 陌陌秋雨 | 初学一级 | 园豆:2
提问于:2017-07-20 10:55
< >
分享
最佳答案
0

路由规则是在你的配置中从上往下找,找到第一个匹配的就返回了

收获园豆:50
大杯美式不加糖不加奶 | 小虾三级 |园豆:994 | 2017-07-20 11:22

补充一下:

如果现在你有ABCD4个路由规则,现在有一个url。url先去看看第一个规则,看看是否符合这个规则的要求,如果符合就这个阶段结束了,如果没有符合的就继续往下找。

找到符合规则的之后就按照这个规则来找控制器和action。如果找到了就ok。如果没有找到那么就是404.

陌陌秋雨 | 园豆:2 (初学一级) | 2017-07-21 10:13
其他回答(1)
0

一般Default是放最下面的。

收获园豆:50
盟怀部孩 | 园豆:878 (小虾三级) | 2017-07-20 16:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册