使用 注册了一个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 时还是使用第一个路由配置?
这好像不可以,Area是MVC2后新出的路由方式,它必须是 /Member/Account,如果你/Member 它是匹配不到,当然去找默认路由
是先匹配Area里的路由 匹配不到就匹配外面的路由吗??
@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名字,它的机制是这样的
@稳稳的河: 有没有办法在Area里写死掉 当访问 /Member 时 默认访问 /Member/Account
@koi: 实现第一个跳转一次就好了