gpt4 book ai didi

c# - 子应用程序中的 Asp.net MVC Catchall 路由

转载 作者:可可西里 更新时间:2023-11-01 07:59:19 25 4
gpt4 key购买 nike

我有一个 MVC 应用程序,其子应用程序在 IIS 中运行另一个 MVC 项目。两者使用相同的版本框架并在不同的应用程序池上运行。

我的问题是,我无法让子应用程序在根站点的这个虚拟应用程序文件夹中运行。我收到 403.14 禁止错误。如果我在子应用程序上启用目录列表,我只会得到 MVC 应用程序文件的列表。

我想,我已经将问题缩小到路由;子应用程序有一个自定义的 catchall 路由,它处理对站点的所有请求,它是一个 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 启动并尝试为请求找到匹配路由。

所以我的问题是为什么我的 catchall 路由在 IIS 的子应用程序中运行时不起作用?

注意:我已经尝试在我的自定义路由中为 url 添加虚拟应用程序文件夹的名称前缀,但它仍然不起作用,例如:

 RouteTable.Routes.Insert(0,new CmsRoute(
"subapplication/{*path}",
new RouteValueDictionary(new
{
controller = "Page",
action = "Index"
}),

new MvcRouteHandler()));

最佳答案

如果不损害您的目的,请使用子域而不是子应用程序。

但是,如果您一定要这样做,请记住,应用程序和子应用程序必须在相同版本的 .NET 上运行。

此外,与 web.configs 存在父/子关系 - 因此子应用程序将继承父 web.config,除非在配置中使用“inheritInChildApplications”告知不要这样做。但是,这也可能让您因与 child 发生冲突而头疼。如果你想尝试父子关系,这里有一个解决这个(头痛)的方法。 http://articles.runtings.co.uk/2010/04/solved-iis7-validateintegratedmodeconfi.html

关于c# - 子应用程序中的 Asp.net MVC Catchall 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39328039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com