ASP.NET在子目录中运行应用程序

时间:2014-07-29 08:25:56

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

我想知道如何在子目录中运行MVC应用程序。问题是当在子目录中运行时,每个Action似乎都被导航到Root路径而不是子目录。

为了测试它是否可行,我在项目属性窗口中编辑了“项目URL”和“覆盖应用程序根URL”。

我已经考虑过使用可配置的路由值为web.config添加一个密钥,并创建一个可以读取此密钥的单例类,尽管我必须手动编辑所有页面以使其正常工作,但显然不会这是最好的方式,因为它需要花费很多时间,并且当愿意更改目录名称时,您必须在应用程序的所有页面上更改它。

我尝试的另一件事是编辑RouteConfig.cs文件并将其与默认路由器一起替换/添加。

routes.MapRoute(
            name: "Rooted",
            url: "{root}/{controller}/{action}/{id}",
            defaults:
                new { root = "Admin", controller = "Login", action = "Index", id = UrlParameter.Optional }
        );

可悲的是,这似乎不起作用,因为它仍然会重定向到Index / Home而不是Admin / Index / Home。

我想知道是否有人更好地了解如何尽可能少地改变它。我不能成为第一个问这个问题的人,当谷歌搜索可能的重复项时,没有人提出合适的解决方案。

2 个答案:

答案 0 :(得分:1)

我不知道你是否正在寻找,但我有一个MVC项目在主项目的子目录下运行。对于每个根,我必须用RouteConfig 2个规则来编写。 请考虑我的子目录是sport  图像示例

           routes.MapRoute(
                name: "Images",
                url: "files/images/{width}x{height}/{myID}.png",
                defaults: new { controller = "ControllerName", action = "ActionName" },
              constraints: new RouteValueDictionary { { "width", "[0-9]+" }, { "height", "[0-9]+" }, { "myID", "[0-9a-z_]+" }}
            );
            routes.MapRoute(
                name: "Images2",
                url: "sport/files/images/{width}x{height}/{myID}.png",
                defaults: new { controller = "ControllerName", action = "ActionName" },
              constraints: new RouteValueDictionary { { "width", "[0-9]+" }, { "height", "[0-9]+" }, { "myID", "[0-9a-z_]+" }}
            );

在您的情况下,如果(例如)您的子目录是以这种方式进行测试

本地的第一条规则

routes.MapRoute(
            name: "Rooted",
            url: "{controller}/{action}/{id}",
            defaults:
                new { controller = "Login", action = "Index", id = UrlParameter.Optional }
        );

2ns规则为pubblished

routes.MapRoute(
                name: "Rooted",
                url: "test/{controller}/{action}/{id}",
                defaults:
                    new { controller = "Login", action = "Index", id = UrlParameter.Optional }
            );

在执行此操作之前,您应该从IIS将新的应用程序(作为子目录)添加到您的站点。

请按照以下步骤操作

  1. 打开IIS管理器

  2. 右键单击默认网站,然后选择"添加应用程序"

  3. 设置虚拟路径" YourSubDireCtoryName"和正确的 物理路径(将所有项目文件放在您想要的文件夹中;只需写出正确的路径)

答案 1 :(得分:0)

原来我的问题是由完全不同的事情引起的。

它转到了root文件夹,因为表单提交包含一个硬路径#34; / login / login"而不是"〜/ login / login"。

即使不是答案,我也建议人们查看faby的帖子,因为它确实包含了一些不应该丢失的好信息。