JCo*_*r23 14 .net c# asp.net-mvc asp.net-mvc-routing
我有一个MVC应用程序,其子应用程序在IIS中运行另一个MVC项目.两者都使用相同的版本框架并在单独的应用程序池上运行.
我的问题是,我无法让子应用程序在根站点的这个虚拟应用程序文件夹中工作.我收到403.14 Forbidden错误.如果我在子应用程序上启用目录列表,我只需获取MVC应用程序文件的列表.
我想,我已将问题缩小到路由; 子应用程序有一个自定义catchall路由,它处理对站点的所有请求,它是一个CMS应用程序.没有注册其他路线.这是我的自定义路线的代码:
RouteTable.Routes.Insert(0,new CmsRoute(
"{*path}",
new RouteValueDictionary(new
{
controller = "Page",
action = "Index"
}),
new MvcRouteHandler()));
Run Code Online (Sandbox Code Playgroud)
在自己的站点中的主根应用程序之外运行此应用程序,它工作正常,所有请求都由我的自定义路由处理.但是当我尝试将其作为子应用程序运行时,路由处理程序永远不会被命中.如果我添加开箱即用的标准默认MVC路由:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
然后MVC启动并尝试为请求找到匹配路由.
所以我的问题是为什么我的catchall路由在IIS中的子应用程序中运行时不起作用?
注意:我尝试使用虚拟应用程序文件夹的名称为我的自定义路由中的url添加前缀,但它仍然不起作用,例如:
RouteTable.Routes.Insert(0,new CmsRoute(
"subapplication/{*path}",
new RouteValueDictionary(new
{
controller = "Page",
action = "Index"
}),
new MvcRouteHandler()));
Run Code Online (Sandbox Code Playgroud)
如果不损害您的目的,请使用子域而不是子应用程序。
但是,如果您一定要这样做,请记住应用程序和子应用程序必须在同一版本的 .NET 上运行。
此外,与 web.configs 存在父/子关系 - 因此子应用程序将继承父级 web.config,除非在配置中使用“inheritInChildApplications”被告知不要这样做。但是,这也可能会让你因与孩子发生冲突而头痛。如果您想尝试父子关系,这里有一个解决方案(令人头疼)。http://articles.runtings.co.uk/2010/04/solved-iis7-validateintegratedmodeconfi.html
| 归档时间: |
|
| 查看次数: |
1310 次 |
| 最近记录: |