我在尝试在我所在的地区工作时遇到了麻烦。
我的区域叫ABC,我在区域内有一个名为Home的控制器。如果我浏览“http:// localhost:8000 / abc”,我可以使用Home / Index命中断点但是当我尝试点击另一个名为“http:// localhost:8000 / ABC / details”的详细信息时,我得到了404。
我试过了
context.MapRoute(
"details",
"ABC/Home/{action}/{id}",
new { action = "details", id = UrlParameter.Optional },
constraints: null,
namespaces: new[] { "WebApplication.Areas.ABC.Controllers" }
);
context.MapRoute(
"ABC_Home",
"ABC/{controller}/{action}/{id}",
new { controller = "home",action="Index", id = UrlParameter.Optional },
constraints: null,
namespaces: new[] { "WebApplication.Areas.ABC.Controllers" }
);
如果我使用“http:// localhost:8000 / ABC / Home / Details”,我可以点击动作
context.MapRoute(
"details",
"Home/Home/{action}/{id}",
new {controller="home", action = "details", id = UrlParameter.Optional },
constraints: null,
namespaces: new[] { "WebApplication.Areas.ABC.Controllers" }
);
理想情况下,如果可能,我不想在网址中使用home。我究竟做错了什么?
任何帮助都会很棒!
答案 0 :(得分:3)
我认为你只需要一条路线。不要在路径中包含控制器,因为它似乎是从 / ABC 开始暗示的;只需将控制器指定为默认值:
context.MapRoute(
"ABC_Home",
"ABC/{action}/{id}",
new { controller = "home", action="Index", id = UrlParameter.Optional },
constraints: null,
namespaces: new[] { "WebApplication.Areas.ABC.Controllers" }
}
根据您的要求,这会将 / abc 路由到 / home / index ,并将 / abc / details 路由到 /家庭/细节的。
然后,如果您需要访问其他控制器,可以为其添加另一个规则,类似于默认规则:
context.MapRoute(
"Default_Route",
"{controller}/{action}/{id}",
new { id = UrlParameter.Optional }
}
答案 1 :(得分:0)
我认为您不能默认具有可变动作名称的控制器,否则无法从路由中判断出它是动作或控制器以及要匹配的路径。我认为你可以对行动进行硬编码:
Context.MapRoute(
"ABC_Home_Details",
"ABC/Details/{id}",
new { controller = "home", action="details", id = UrlParameter.Optionsl },
constraints: null,
namespaces: new [] { "WebApplication.Areas.ABC.Controllers" }
);