ASP.NET MVC路由 - 一个取消另一个

时间:2013-01-22 16:07:28

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

我有一个MVC路由问题,它通常很好但但由于某种原因,中间的语句工作正常,但最后一个路由不起作用。如果我把第三条路线放在中间,它会正常工作。我不知道为什么这两条路线互相干扰。

以下是路线:

routes.MapRoute(
           "VoucherPreviewNdddewUser", // Route name
           "{Home}/{VoucherBusinessUserEntry}/{ID}/{TokenID}", // URL with parameters
           new { controller = "Home", action = "VoucherBusinessUserEntry", id = 0, TokenID = Guid.NewGuid() } // Parameter defaults
           );

                routes.MapRoute(
                "Regdfsdfsdf", // Route name
                "{LoginReg}/{Register}/{UserTrackingID}/{IsFromScript}", // URL with parameters
                new { controller = "LoginReg", action = "Register", UserTrackingID = System.Guid.Empty
                    ,isfromscript = System.Boolean.FalseString 
                } // Parameter defaults
            );

以下是网址:

http://localhost:50839/home/VoucherBusinessUserEntry/44/7209FA62-FD5F-40AE-8239-7CF1855675E8

http://localhost:50839/LoginReg/Register/7209FA62-FD5F-40AE-8239-7CF1855675E8/true

有没有人有任何想法可能导致这个?

1 个答案:

答案 0 :(得分:4)

当你在{}之间放置一个变成变量的东西时。所以你的路线应该是这样的:

routes.MapRoute(
       "VoucherPreviewNdddewUser", // Route name
       "Home/VoucherBusinessUserEntry/{ID}/{TokenID}", // URL with parameters
       new { controller = "Home", action = "VoucherBusinessUserEntry", id = 0, TokenID = Guid.NewGuid() } // Parameter defaults
       );

routes.MapRoute(
            "Regdfsdfsdf", // Route name
            "LoginReg/Register/{UserTrackingID}/{IsFromScript}", // URL with parameters
            new { controller = "LoginReg", action = "Register", UserTrackingID = System.Guid.Empty
                ,isfromscript = System.Boolean.FalseString 
            } // Parameter defaults

你仍然需要定义你想要的控制器和动作,但这些变量不再存在于URL中,因为它们是常量而不是辩论。如果您希望它们是可变的,那么您需要在URL中使用{controller}和{action},默认值为LoginReg,如第二条路线所示。