ASP.NET MVC路由:URL落入错误的路由

ASP.NET MVC路由:URL落入错误的路由,asp.net,asp.net-mvc,asp.net-mvc-4,routing,url-routing,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Routing,Url Routing,我正在从事一个非常普通的mvc项目,我有三条不同的路线: 按id显示产品的路线 routes.MapRoute( "get-by-id", "{controller}/{id}", new { action = "GetById" }, new { id = @"\d+" } ); 按类别划分的展示产品路线 routes.MapRoute(

我正在从事一个非常普通的mvc项目,我有三条不同的路线:

按id显示产品的路线

        routes.MapRoute(
            "get-by-id",
            "{controller}/{id}",
            new { action = "GetById" },
            new { id = @"\d+" }
            );
按类别划分的展示产品路线

        routes.MapRoute(
            "get-by-category",
            "{controller}/{category}",
            new { action = "GetByCategory" },
            new { category = @"\w+" }
            );
默认路线

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
结论:我希望/products/create请求属于默认路由(因为我希望将“create”呈现为一个操作),而不是“get by category”路由(因为它将“create”作为一个字符串)。

使用它将帮助您调试路由,以确定何时调用哪些路由。在asp.net mvc上工作时,我经常使用的工具之一

顺便说一句,看看你的路线,没有一条路线可以映射到产品/创建。在这种情况下,它只会将您带到默认路线。您需要指定一个路由,该路由将映射到产品控制器,如果您想要创建一个操作,则需要有“Products/Create”,其操作指向Get by id action

routes.MapRoute(
        "get-by-id",
        "{controller}/Create/{id}",
        new { action = "GetById" },
        new { id = @"\d+" }
        );

很抱歉,我在帖子中犯了一些错误,现在请随时提供帮助。您的实际路线应该是-Product/GetById/Create-目前它正在寻找一个假定为“Create”的产品/Create是Action的名称。当创建产品后的单词时,我在get by category路由约束中使用正则表达式传递到下一个路由。。。