C# 作为子应用程序运行MVC应用程序?

C# 作为子应用程序运行MVC应用程序?,c#,.net,asp.net,asp.net-mvc,iis-7,C#,.net,Asp.net,Asp.net Mvc,Iis 7,我正在尝试创建一个MVC应用程序作为标准Asp.NETWeb应用程序的子应用程序。这两个项目都在同一个解决方案中。虽然父应用程序似乎运行良好,但我无法让子应用程序正常工作。在对我的两个web.config进行了一些处理之后,我能够让Asp.Net运行时接受这些配置,但是我无法浏览到MVC应用程序中的任何页面/控制器,包括子应用程序的根(“”)。我不断得到404的 实际上,当我转到url“”时,确实会收到响应。它将我重定向到该文件夹中的index.aspx,并抛出以下错误: 找不到视图“索引”或其

我正在尝试创建一个MVC应用程序作为标准Asp.NETWeb应用程序的子应用程序。这两个项目都在同一个解决方案中。虽然父应用程序似乎运行良好,但我无法让子应用程序正常工作。在对我的两个web.config进行了一些处理之后,我能够让Asp.Net运行时接受这些配置,但是我无法浏览到MVC应用程序中的任何页面/控制器,包括子应用程序的根(“”)。我不断得到404的

实际上,当我转到url“”时,确实会收到响应。它将我重定向到该文件夹中的index.aspx,并抛出以下错误:

找不到视图“索引”或其主视图。下列地点 已搜索:
~/Views/Home/Index.aspx
~/Views/Home/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx

IIS(7)中的子应用程序的设置相当简单:它被设置为在与父应用程序相同的应用程序池中运行,父应用程序以集成模式运行Asp.NET2.0

我怀疑我在web.configs中有什么东西正在把它扔掉。有没有关于HTTPModules或URL授权模块等的事情,我应该确认一下,没有妨碍MVC的发展

另外,在global.asax.cs文件中,默认路由是否应该不同?默认情况下,传递给routes.MapRoute的url参数为:

"{controller}/{action}/{id}"
是否应该在前面加上子应用程序的名称,就像这样

"SubApplicationName/{controller}/{action}/{id}"
我尝试过这样的改变,但没有解决问题

任何想法都非常感谢。另外,关于将MVC web应用程序设置为子应用程序的一般信息也很有用


谢谢。

我做了类似的事情,但不同的是,我必须从单独的dll加载视图。在我的例子中,它是一个类库,不是一个不同的web应用程序,但据我所知,它的工作原理应该是一样的

您必须做的第一件事是创建一个VirtualPath提供程序,告诉路由引擎如何在子应用程序视图中查找您的内容。关于如何做到这一点,可以在这里找到一个很好的解释:


我相信这会让你开始;)

确保视图目录的名称没有拼写错误。我收到了同样的错误信息,30分钟后我意识到我把我的一个视图的文件夹名称拼错了。IDE没有以任何有意义的方式发现这一点(也就是说,如果它明确告诉我我引用的视图的路径不正确——“找不到”可能意味着一些不同的事情,那就好了)。

子应用程序不直接适合MVC web应用程序。您必须在global.asax中编写大量被黑客攻击的代码。使用子域而不是子应用程序。

谢谢!我会读到这篇文章,然后告诉你它是否对我有用。一开始看起来有点棘手,但那篇文章质量很高,你可以下载它的Visual Studio解决方案,这样你就可以到处玩;)我不认为他所描述的能解决我的问题。我想要的是一个标准的Asp.NETWeb应用程序,它有一个子应用程序,即MVC应用程序。他正在做的是,他有一个MVC应用程序引用一个DLL来使用另一个MVC DLL。但这并不能解决我正在处理的关系。。。我不这么认为。嗯,我明白了,但您显示的错误消息是:“找不到视图‘索引’或其主视图。搜索了以下位置:等。”显示它正在使用MVC路由,但它看起来是相对于主应用程序文件夹的。因此,使用VirtualPath文件夹也许你可以做到这一点。断开的链接-典型的开发人员-LOL-想让你知道他自己酿造啤酒,但没有提供真正想要的内容。