多area时,
它会先匹配路由有没有定义路由(这点没问题)
接着
它先找路由,如果多个路由,如果有多个,再根据namespaces去筛选,(这有问题,它不是先按namespaces去筛选,再得到路由的,就可能存在,可能找到多个匹配路径,,,以及路由穿透现象,,,)
,
routes.MapRoute( name: "api", url: "api/{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, namespaces: new[] { "Storages.Areas.Api.Controllers" } );routes.MapRoute(name: "config",url: "config/{controller}/{action}/{id}",defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },namespaces: new[] { "Storages.Areas.Config.Controllers" });
控制器,
config下,有HomeController,,api下没有,
则访问 api/home/index, 可能跳到config/home/index 了,
需要改为,
areas.api 下,
1。
.Areas.Api 名空间下
2。
public class ApiAreaRegistration: AreaRegistration { public override string AreaName { get { return "Api"; } }public override void RegisterArea(AreaRegistrationContext context)
{ context.MapRoute( "route_Api", "Api/{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = "" } ); } }