【问题标题】:combine two routes to one action将两条路线组合成一个动作
【发布时间】:2017-03-03 18:28:25
【问题描述】:

我想定义一个 MapRoute,它可以将两条不同的路线映射到一个动作。

我有一个创建地址的操作:

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

以下两条路线应该映射到动作:

/Addresses/Create -> 创建一个新地址
/Projects/3/Addresses/Create -> 为 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 不行。

【问题讨论】:

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


    【解决方案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/Addresses/Create 将其放在上述路由之前:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-22
      • 1970-01-01
      • 2020-11-10
      • 2021-08-19
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      相关资源
      最近更新 更多