asp.net 带参数的 mvc 路由
asp.net mvc route with parameter
我正在尝试获取以下链接:
- /(映射到
AccountController
/ Index
)
- /account/login(映射到
AccountController
/ Login
)
- /2112/emails(映射到
EmailsController
/ Index
操作,2112 将是路由参数)
- /2112/emails/list(映射到
EmailsController
/ List
操作,212 将是路由参数)
我无法使路由正常工作,因为它们似乎相互冲突。以下使我始终拥有路由参数,这不是我需要的。如果不提供数据库参数,它将不会绑定。
routes.MapRoute(
name: "Default",
url: "{database}/{controller}/{action}",
defaults: new { database = UrlParameter.Optional, controller = "Account", action = "Index" }
);
顺序在您的路线配置中很重要。 MVC 中路由的关键是从最具体的路由开始并逐步完成。此外,由于您对电子邮件控制器有特定的路由规则,您可以在 URL 参数中专门指定控制器的名称。所以在这里你会这样做:
routes.MapRoute(
name: "Emails",
url: "{id}/Emails/{action}",
defaults: new { controller = "Emails", action = "Index" },
constraints: new { id = @"\d+" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}",
defaults: new { controller = "Account", action = "Index" }
);
我正在尝试获取以下链接:
- /(映射到
AccountController
/Index
) - /account/login(映射到
AccountController
/Login
) - /2112/emails(映射到
EmailsController
/Index
操作,2112 将是路由参数) - /2112/emails/list(映射到
EmailsController
/List
操作,212 将是路由参数)
我无法使路由正常工作,因为它们似乎相互冲突。以下使我始终拥有路由参数,这不是我需要的。如果不提供数据库参数,它将不会绑定。
routes.MapRoute(
name: "Default",
url: "{database}/{controller}/{action}",
defaults: new { database = UrlParameter.Optional, controller = "Account", action = "Index" }
);
顺序在您的路线配置中很重要。 MVC 中路由的关键是从最具体的路由开始并逐步完成。此外,由于您对电子邮件控制器有特定的路由规则,您可以在 URL 参数中专门指定控制器的名称。所以在这里你会这样做:
routes.MapRoute(
name: "Emails",
url: "{id}/Emails/{action}",
defaults: new { controller = "Emails", action = "Index" },
constraints: new { id = @"\d+" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}",
defaults: new { controller = "Account", action = "Index" }
);