为什么我的路线被重定向,这对我没有任何意义

时间:2010-01-28 17:27:00

标签: c# asp.net asp.net-mvc

我将这两条路线映射出来:

 routes.MapRoute(
                "Admin",
                "admin/{controller}/{action}/{id}",
                new { controller = "Admin", action = "index", id = "" }              
            );

然后我有:

 routes.MapRoute(
                "Default",                                              // Route name
                "{controller}/{action}/{id}",                           // URL with parameters
                new { controller = "Home", action = "Index", id = "" }  // Parameter defaults

            );

所以2条路线是相同的,除了第一条路线在URL中有/ admin前缀。

这就是发生的事情,我不知道如何解释这个:

当我去:

www.example.com/user/verify

重定向到

www.example.com/admin/user/complete

而不是

www.example.com/user/complete

操作验证只需重定向到完成,如下所示:

返回RedirectToAction(“完成”,“用户”);

所有完整的操作都会填充ViewModel,然后调用视图。

如何重定向并将前缀/ admin /添加到网址?

4 个答案:

答案 0 :(得分:0)

我相信它会重定向到Admin路由,因为Admin路由是第一个包含所有匹配参数的路径(在提供的情况下是控制器和操作)。如果你想使用这样的东西,你需要使用areas(MVC2)或使用命名的路由重定向。

答案 1 :(得分:0)

admin是你的控制器,你不需要管理员/控制器/动作,默认路由可以正常工作

你需要的只是一个管理员控制器,默认路由会找到它

ie {controller} / {action} / {id}

将/ admin / addproduct发送到名为admin的控制器和名为addproduct的操作 你只需要添加路线,如果你想要自定义的东西,例如

/产品/电视/ HDTV / 2

其中产品是控制器,最后3个是category,subcategory和pagenumber 在控制器上,您将其指向您的路线。

希望有意义

答案 2 :(得分:0)

不确定控制器的确切结构,但您可以向第一个MapRoute添加约束,以将其限制为您希望路径应用于的特定控制器:

routes.MapRoute( 
            "Admin", 
            "admin/{controller}/{action}/{id}", 
            new { controller = "Admin", action = "index", id = "" } ,
            new { controller = "[Some regex Expression - e.g. Admin]" }             
        ); 

这将使路线仅适用于那些与控制器相关的路线。您还可以使用this tool来调试路由。取决于你如何组织结构,但像@NickLarson所说 - 听起来像你使用MVC 2的区域功能。

答案 3 :(得分:0)

mvc在匹配路由器的同时从上到下,这就是“你为什么要处理这个问题”