ASP.NET MVC路由配置问题

时间:2014-02-19 11:04:00

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

我有一个应用程序进入IIS 7的应用程序池。我在应用程序中添加了一个新的虚拟目录。我的应用程序在http://localhost.com/上运行,我想在http://localhost.com/VirtualDirectory/上运行我的虚拟目录。我想这样做的原因是虚拟目录用作应用程序。我想使用虚拟目录作为SubSite。我的问题是我无法访问虚拟目录下的控制器和视图。当我将ActionResult方法的返回结果更改为“return View(”/ VirtualDirectory / Views / Home / Index.cshtml“);”时,我访问它。我不想在每次返回Action结果时对VirtualDirectory进行硬编码。

我的路线配置是:

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

            routes.MapRoute(
                  name: "Home", // Route name
                  url: "{id}", // URL with parameters
                  defaults: new { controller = "Home", action = "Index" /*, id = ""*/ } // Parameter defaults
              );

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

我尝试进行下一次更改:

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

但是当我尝试加载http://localhost.com/VirtualDirectory时,我收到了消息:

HTTP错误403.14 - 禁止访问 Web服务器配置为不列出此目录的内容。

1 个答案:

答案 0 :(得分:1)

您不需要在应用程序的路由中更改任何内容以在虚拟目录中运行。

但是,您仍需要确保在整个应用程序中使用相对路径(不是基于绝对/的路径)。这与任何技术都是一样的。 /始终忽略虚拟目录。