我在RouteConfig.cs文件中定义了两个路由。第二个用于登录,第一个是登录后的登录页面。
1 RouteConfig.cs
routes.MapRoute("TMCDefault", "{action}/{id}", new { controller = "TMC", action = "TMC", id = UrlParameter.Optional }).DataTokens.Add("area", "TMC"); ;
routes.MapRoute("Default", "{action}/{id}", new { controller = "Account", action = "LogIn", id = UrlParameter.Optional }).DataTokens.Add("area", "Account");
当我运行应用程序时,它会尝试执行第一个路径而不是默认的root.But如果我按相反顺序放置路由它会启动登录页面,但在验证用户后,登录页面会给出404错误。
以下是我的AreaRegistration文件路由
2用于登录
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Account_default",
"{action}/{id}",
new { action = "LogIn", id = UrlParameter.Optional },
new { controller = "(Account)" }
);
着陆页3
context.MapRoute(
"default_TMC",
"{action}/{id}",
new { action = "Index", id = UrlParameter.Optional },
new { controller = "(TMC)" }
);
实现的目的是删除控制器名称,并且无论区域如何,都是URLS中的名称。这意味着网址只包含操作
答案 0 :(得分:0)
要调用默认根目录,您需要在自己的中提及 App_Start.RouteConfig.cs文件如下
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { area="Account",controller = "Account", action = "LogIn", id = UrlParameter.Optional },
namespaces:new string[] {"YOUR PROJECT NAMESPACE"}
);
}
由于这两个控制器存在于两个不同的区域,所以你 需要更改您的区域AccountAreaRegistration.cs&的代码。 TMCAreaRegistration.cs文件如下
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Account_default",
"Account/{controller}/{action}/{id}",
new { area="Account",controller = "Account",action = "LogIn", id = UrlParameter.Optional }
);
TMCRegistrationArea.cs文件
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Account_default",
"TMC/{controller}/{action}/{id}",
new { area="TMC",controller = "TMC",action = "Index", id = UrlParameter.Optional }
);
答案 1 :(得分:0)
这可以完成,但不是像你暗指的那样在一次通话中完成。您需要将每个操作注册为具有相应操作/控制器/区域的路径。
实施例
context.MapRoute(
"Account_LogOff",
"LogOff",
new { action = "LogOff", controller="Account", area="Account", id = UrlParameter.Optional }
);
希望这有助于其他任何想要这样做的人。