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

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

我想知道如何在子目录中运行 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 添加一个新的应用程序(作为子目录)到您的站点。

按照以下步骤操作

  1. 打开 IIS 管理器

  2. 右键单击“默认网站”并选择“添加应用程序”

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

关于c# - ASP.NET 在子目录中运行应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25011073/

相关文章:

c# - 通过smtp服务器异步发送电子邮件-多线程发送电子邮件

c# - 适用于 Android 的单声道 - OutOfMemoryError

c# - 错误 : Multiple object sets per type are not supported

c# - 如何从列表/数组中删除对象属性?

字符串中的 C# Razor 语法

c# - 不支持文化

c# - 在 ASP Net.Core 2.2 中使用自动属性扩展 AnchorTagHelper

c# - 在 chrome 中滚动 ListBox 时回发

c# - Bootstrap 表单不显示内联 (C#)

c# - 如何在mvc中获取网页的特定部分?