MVC隐藏了IIS中的虚拟目录

时间:2013-01-14 19:03:00

标签: asp.net-mvc razor

我的IIS服务器中的默认目录设置为MVC 4 Razor应用程序。我已将其设置为可以将动态操作传递到URL。例如。

www.mydomain.com/4
www.mydomain.com/5

基本上,这两个启动帐户分别为id为4和5的用户。

效果很好。

但是,我在同一台服务器上有一个名为admin的虚拟目录。我希望我可以导航到www.mydomain.com/admin但遗憾的是MVC拦截它并认为我正在查找amdin的用户ID。

有没有办法在路线中戳洞以允许虚拟目录?

提前致谢!

/埃里克

##########添加我的路线
        //route for site root
        routes.MapRoute(
        "YourRouteName", // Route name
        "{flightNumber}/{action}", // URL with parameters
        new { controller = "Home", action = "Index", flightNumber = " " } // Parameter defaults
        );

1 个答案:

答案 0 :(得分:0)

你可以限制你的路线:

routes.MapRoute(
    "YourRouteName",
    "{flightNumber}/{action}",
    new { controller = "Home", action = "Index" },
    new { flightNumber = @"\d+" }
);

现在要求您必须始终拥有flightNumber,这是一个或多个数字,后跟可选的控制器操作。

因此,/5会点击Index控制器的Home操作,并将flightNumber = 5参数传递给/5/adminAdmin会触及Home flightNumber = 5控制器传递action参数。

现在,如果您的ID不是整数,但字符串会变得复杂,因为路由引擎将无法再消除您的路由歧义。您可以使用RegEx将{{1}}部分约束到可能的操作列表,但发现这种方法有点限制,因为如果有人向Home控制器添加新操作,他还需要更新路由约束。