【问题标题】:ASP.NET MVC - Running in a SubdirectoryASP.NET MVC - 在子目录中运行
【发布时间】:2010-01-20 18:52:36
【问题描述】:

我正在尝试在现有应用程序的子目录中部署 ASP.NET MVC 应用程序,但遇到了一些路由问题。我已经设置了文件夹结构,以便 MVC 应用程序的所有二进制文件和配置文件都正确位于根目录中,而其余内容位于子目录中。此外,我更新了 MVC 应用程序中的所有路由以反映子目录;但是,对应用程序的每个请求都会产生:

传入的请求不匹配 任何路线。

所有定义的路由都被忽略,包括默认路由:

routes.MapRouteLowercase(
    "Main_Default",
    "blog/{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = "" }
);

我尝试启用RouteDebug 来测试问题,但即使这样也没有被路由到。关于我还能尝试什么的任何建议?

注意:这个问题不是duplicate

【问题讨论】:

  • 您能在 global.asax 中显示您的路线设置吗?你可以让默认页面加载吗?
  • 我无法加载任何页面。我什至无法获取到 {*path} 的路线。在将应用程序移动到子目录之前,路由代码都正常运行。
  • "我已设置文件夹结构,以便 MVC 应用程序的所有二进制文件和配置文件都正确位于根目录中,而其余内容位于子目录中。" - 你故意这样做是有原因的吗?这是没有必要的(哎呀,我什至从未想过可能)。为什么不直接将 MVC 应用程序作为自包含应用程序安装在子目录中?
  • @Kurt:由于托管公司的限制阻止每个帐户拥有多个应用程序,因此我不得不采用这种不受欢迎的 hack。我必须说,让我有点想念 PHP。

标签: asp.net-mvc routing subdirectory


【解决方案1】:

尝试将其作为虚拟目录运行,而不仅仅是一个目录,否则您的路由将不会被调用。您不需要将虚拟目录的名称放在路由中。

这是我在 v-dir MVC 应用程序中设置的路线,效果很好...

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

【讨论】:

  • 很遗憾,这不是一个选项,因为托管公司不支持它。
  • MVC 是一个应用程序级别的东西。您需要在根 global.asax 文件中设置路由。您还需要将项目 dll 放在根目录下的 bin 目录中,我相信视图也必须位于根目录下(尽管可能有解决方法)。如果您希望 url 在其中包含单词 blog,您可以保留您创建的路由。请记住,除了 MVC 团队定义的一些约定之外,路由与物理文件结构没有任何关系。
【解决方案2】:

看来我发现了问题。

除了二进制文件和配置文件之外,Global.asax 还必须放在根目录中才能执行其代码。

谢谢各位。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 2015-06-13
    • 2011-09-15
    相关资源
    最近更新 更多