我想知道如何在子目录中运行 MVC 应用程序。问题是,当在子目录中运行时,每个操作似乎都导航到根路径而不是子目录。
为了测试它是否有效,我在项目属性窗口中编辑了“项目 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。
我想知道是否有人有更好的想法如何让它在尽可能少的改变下工作。我不是第一个问这个问题的人,当谷歌搜索可能的重复项时,没有人找到合适的解决方案。
最佳答案
我不知道是否是您正在寻找的内容,但我有一个 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 规则
routes.MapRoute(
name: "Rooted",
url: "test/{controller}/{action}/{id}",
defaults:
new { controller = "Login", action = "Index", id = UrlParameter.Optional }
);
在执行此操作之前,您应该从 IIS 添加一个新的应用程序(作为子目录)到您的站点。
按照以下步骤操作
打开 IIS 管理器
右键单击“默认网站”并选择“添加应用程序”
设置虚拟路径“
YourSubDireCtoryName
”和正确的路径 物理路径(将所有项目文件放在你想要的文件夹中;只需写出正确的路径)
关于c# - ASP.NET 在子目录中运行应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25011073/