我想定义一个MapRoute,它可以将两个不同的路由映射到一个动作。
我有动作来创建地址:
public class AddressesController : BaseController
{
public ActionResult Create()
{
...
}
}
以下两条路线应映射到动作:
/地址/创建 - >创建新地址
/ Projects / 3 /地址/创建 - >使用id = 3
我尝试了以下MapRoute配置来完成此操作,但无法正常工作:
routes.MapRoute(
name: "CreateAddress",
url: "{projects}/{projectId}/{controller}/{action}",
defaults: new { projects = "", projectId = UrlParameter.Optional, controller = "Addresses", action = "Create" },
constraints: new { project = "(Projects)?" });
使用此配置,路由/Projects/3/Addresses/Create
正在运行,但不是/Addresses/Create
。
答案 0 :(得分:1)
你不能同时使用两种方式。
您需要仅指定额外路由,因为ASP.NET MVC附带一个默认值,以确保 / Addresses / Create 能够正常工作:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });
对于 / Projects / 3 /地址/创建,请将其放在上述路线之前:
routes.MapRoute(
name: "CreateAddress",
url: "Projects/{projectId}/{controller}/{action}",
defaults: new { controller = "Addresses", action = "Create" });