0

我想定義一個MapRoute,它可以將兩條不同路線映射到一個動作。將兩條路線合併爲一個動作

我有一個動作來創建地址:

public class AddressesController : BaseController 
{ 
    public ActionResult Create() 
    { 
     ... 
    } 
} 

以下兩條路線應該映射到行動:

/地址/創建 - >創建一個新的地址
/項目/ 3 /地址/創建 - >爲項目創建一個新地址,ID = 3

我嘗試下面的圖路線config來做到這一點,但沒有奏效:

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

回答

1

你不能在同一條路線上工作。

您只需要指定額外的路線,因爲ASP.NET MVC附帶了一個默認的,這將確保/地址/創建將工作:

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }); 

對於/項目/ 3 /地址/創建把這個前面的路線:

routes.MapRoute(
    name: "CreateAddress", 
    url: "Projects/{projectId}/{controller}/{action}", 
    defaults: new { controller = "Addresses", action = "Create" });