将两条路线合并为一个动作

时间:2016-10-21 12:29:00

标签: asp.net-mvc asp.net-mvc-5 asp.net-mvc-routing asp.net-routing

我想定义一个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

1 个答案:

答案 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" });