我想知道如何在子目录中运行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。
我想知道是否有人更好地了解如何尽可能少地改变它。我不能成为第一个问这个问题的人,当谷歌搜索可能的重复项时,没有人提出合适的解决方案。
答案 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将新的应用程序(作为子目录)添加到您的站点。
请按照以下步骤操作
打开IIS管理器
右键单击默认网站,然后选择"添加应用程序"
设置虚拟路径" YourSubDireCtoryName
"和正确的
物理路径(将所有项目文件放在您想要的文件夹中;只需写出正确的路径)
答案 1 :(得分:0)
原来我的问题是由完全不同的事情引起的。
它转到了root文件夹,因为表单提交包含一个硬路径#34; / login / login"而不是"〜/ login / login"。
即使不是答案,我也建议人们查看faby的帖子,因为它确实包含了一些不应该丢失的好信息。