0

Я хотел бы определить один MapRoute, который может отображать два разных маршрута в одно действие.объединить два маршрута в одно действие

У меня есть действие, чтобы создать адрес:

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

Следующие два маршрута должны быть связаны с действием:

/Адреса/Создать -> Для того, чтобы создать новый адрес
/Проекты/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.

ответ

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" }); 
Смежные вопросы