我有一个应用程序在Visual Studio 2008 Sp1中作为MVC(1.0)应用程序开始生活,其中包含一堆Silverlight 3项目作为站点的一部分。没什么好看的。使用Ninject进行依赖注入(第一个版本2 beta,现在是带有MVC扩展的已发布版本2)。
随着.Net 4.0,VS2010,MVC2等的发布,我们决定将应用程序迁移到最新的平台。 VS2010中的转换向导显然处理了所有事情,但有一个例外 - 它没有将对mvc1的引用更改为现在指向mvc2,因此我必须手动执行此操作。当然,这让我想到了我的应用程序中可能缺少的其他MVC2内容,如果我执行File - >新项目......但这不是这个问题的重点。
当我将此应用程序部署到IIS 7.5服务器(在Win2008 R2 x64上运行)时,应用程序就这样工作。但是,图像,脚本和其他静态内容似乎不存在。当然它们存在于服务器上的磁盘上,但它们不会显示在客户端Web浏览器中。
我是IIS的新手,所以我知道的唯一技巧是尝试在服务器上的浏览器中打开网页,因为这可以为我提供更多信息。在这里,最后,我们遇到敌人。如果我尝试直接转到其中一个图片的网址(例如http://server/Content/someimage.jpg),我会在浏览器中收到以下错误:
IControllerFactory'Ninject.Web.Mvc.NinjectControllerFactory'没有为名为'Content'的控制器返回控制器。
啊哈。 Web服务器尝试将此请求提供给MVC,MVC的默认路由设置假定Content为控制器,并且失败。
我如何才能将Content / and Scripts /(以及其他)视为非控制器,并且只是传递静态内容?这当然可以在我的开发人员计算机上与Cassini一起使用,但是一旦部署,这个问题就会出现。
我正在使用Ninject MVC 2的最新版本,其中IoC工具应该将丢失的控制器传递给基本控制器工厂,但这显然没有帮助。我也尝试为内容等添加忽略路由,但这显然也没有效果。我甚至不确定我是否在正确的水平上解决问题。
有谁知道这个应用程序的去向?我完全控制了Web服务器,所以只要它开始工作,我就可以或多或少地做任何我想做的事。
谢谢!
答案 0 :(得分:4)
我遇到了与StructureMap和favorite.ico类似的问题,我最终做的是添加一条忽略该路径的路径。
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("favicon.ico");
请记住,我完全不知道,但另一个改变的是需要Default.aspx,如果你有任何需要映射的自定义页面。这是我对路由的唯一两个问题。
routes.RouteExistingFiles = false;
编辑:我的意思是RouteExistingFiles应该为false,否则我在MVC2中得到该异常:)
答案 1 :(得分:1)
原来这是由某些帐户设置引起的 - 我不知道IIS在Win2008 R2服务器中自动创建的IIS AppPool \ sitename帐户。在尝试“一切”后,我发现了这些信息,给出了适当的权利,并且神奇地开始工作。
调试非常困难,特别是对于IIS(IIS)经验非常有限的人(我)。