【发布时间】:2017-01-12 16:10:07
【问题描述】:
我有一个 MVC 应用程序,其中一个子应用程序在 IIS 中运行另一个 MVC 项目。两者都使用相同的版本框架并在不同的应用程序池上运行。
我的问题是,我无法让子应用程序在根站点的这个虚拟应用程序文件夹中工作。我收到 403.14 禁止错误。如果我在子应用程序上启用目录列表,我只会得到 MVC 应用程序文件的列表。
我认为,我已将问题范围缩小到路由;子应用程序有一个自定义的包罗万象的路由,它处理对站点的所有请求,它是一个 CMS 应用程序。没有注册其他路线。这是我的自定义路线的代码:
RouteTable.Routes.Insert(0,new CmsRoute(
"{*path}",
new RouteValueDictionary(new
{
controller = "Page",
action = "Index"
}),
new MvcRouteHandler()));
在自己站点的主根应用程序之外运行此应用程序,它工作正常,所有请求都由我的自定义路由处理。但是,一旦我尝试将其作为子应用程序运行,路由处理程序就永远不会被命中。 如果我添加开箱即用的标准默认 MVC 路由:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
然后 MVC 启动并尝试为请求找到匹配路由。
所以我的问题是为什么在 IIS 的子应用程序中运行时我的包罗万象的路由不起作用?
注意:我已经尝试在自定义路由中的 url 前加上虚拟应用程序文件夹的名称,但它仍然不起作用,例如:
RouteTable.Routes.Insert(0,new CmsRoute(
"subapplication/{*path}",
new RouteValueDictionary(new
{
controller = "Page",
action = "Index"
}),
new MvcRouteHandler()));
【问题讨论】:
-
如果不损害您的目的,请使用子域而不是子应用程序。
-
是的,这是一种解决方案,但我需要在主域之外的子文件夹中运行它。但我们最终可能不得不退回到子域。
标签: c# .net asp.net-mvc asp.net-mvc-routing