标题中说我遇到了路由和区域问题。我的项目中有一个区域部分,其中只有一个区域。它有一个Policy控制器。在项目外部有一个带有LoginController的控制器文件夹。
当我尝试访问URL“BoB / Login / ChangeSection”(BoB是项目名称,Login是控制器,ChangeSection是动作)时,它会被发送到“BoB / Policy / Login”。这意味着策略区域内的区域注册正在抓取请求并将策略前缀放在前面,不应该是。
这是我的项目RouteConfig
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "BoBHome", action = "Index", id = UrlParameter.Optional },
namespaces: new string[] { "BoB.Controllers" }
);
这是区域注册
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
name: "BoBPolicy_default",
url: "Policy/{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new string[] { "BoB.Areas.BoBPolicy.Controllers" }
);
}
我认为命名空间会阻止这种情况发生,但显然不是这样。任何帮助表示赞赏。
其他一些信息:
这来自另一个不是MVC的项目,因此Redirect看起来像这样:
Response.Redirect("/BoB/BoBLogin/ChangeSection?controller=PolicyOverview");
答案 0 :(得分:1)
我认为您的问题类似于non area route issue,这需要使用area参数来防止在使用默认路由时插入区域URL前缀:
mem_fn
注意:由于区域路由注册始终位于默认路由之上(由于其背后的原因而读取this answer),因此当区域路由约束时,路由引擎可能会错误地将默认路由请求拾取到区域路由中( s)未指定。
相关:
MVC5 Routing Go to specific Areas view when root url of site is entered