使用MVC URL路由覆盖目录列表

时间:2011-10-03 17:40:46

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

最近,我部分转换了Asp.Net Web表单应用程序以使用MVC。我们仍然在Web表单(.aspx页面)中包含应用程序的一部分,并使用MVC路由来使用控制器等。 我添加了像

这样的MVC路线
routes.MapRoute("Users", "Users/{controller}/{action}/", new { controller = "Timesheet", action = "List" });

有一个名为“Users”的文件夹,其中包含一些我们仍在使用的aspx页面。 当我点击网址http://localhost/Users/时,我会看到“用户”文件夹内容的目录列表。显然,目录列表优先于MVC URL路由,这可能会通过修改IIS7服务器设置来覆盖。

如何通过代码或web.config更改覆盖此行为?

参考文献:

http://forums.asp.net/t/1251156.aspx/1

http://learn.iis.net/page.aspx/121/iis-7-and-above-modules-overview/

2 个答案:

答案 0 :(得分:2)

在RouteCollection上设置RouteExistingFiles = true实现了这一点。它将允许ASP.NET MVC处理甚至现有目录的路由。

答案 1 :(得分:0)

使用此ignoreroute:

routes.IgnoreRoute("{WebPage}.aspx/{*pathInfo}");

列出RegisterRoutes方法

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");                         
            routes.IgnoreRoute("{WebPage}.aspx/{*pathInfo}");            

            //routes.MapPageRoute("users", "users", "~/admin/default.aspx");

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "home", action = "index", id = UrlParameter.Optional } // Parameter defaults
            );

        }

这将从路由中排除所有扩展名为“.aspx”的网页。