我有一个应用程序,它在 Visual Studio 2008 Sp1 中作为 MVC (1.0) 应用程序开始使用,其中包含一组 Silverlight 3 项目作为站点的一部分。一点都不花哨。使用 Ninject 进行依赖注入(第一个版本 2 测试版,现在是带有 MVC 扩展的发布版本 2)。
随着 .Net 4.0、VS2010、MVC2 等的发布,我们决定将应用程序迁移到最新的平台。VS2010 中的转换向导显然处理了所有事情,但有一个例外 - 它没有将 mvc1 的引用更改为现在指向 mvc2,所以我必须手动执行此操作。当然,这让我想到了我的应用程序中可能缺少的其他 MVC2 东西,如果我执行 File -> New Project 就会出现这些东西......但这不是这个问题的重点。
当我将此应用程序部署到 IIS 7.5 服务器(在 Win2008 R2 x64 上运行)时,该应用程序可以正常工作。但是,图像、脚本和其他静态内容似乎并不存在。当然,它们存在于服务器的磁盘上,但它们不会出现在客户端 Web 浏览器中。
我对 IIS 相当陌生,所以我知道的唯一技巧是尝试在服务器上的浏览器中打开网页,因为这可以为我提供更多信息。在这里,我们终于遇到了我们的敌人。如果我尝试直接访问其中一张图片的 URL(例如http://server/Content/someimage.jpg),我会在浏览器中收到以下错误:
IControllerFactory 'Ninject.Web.Mvc.NinjectControllerFactory' 没有为名为 'Content' 的控制器返回控制器。
啊哈。Web 服务器尝试将此请求提供给 MVC,MVC 的默认路由设置假定 Content 是控制器,但失败了。
我怎样才能让它将 Content/ 和 Scripts/ (以及其他)视为非控制器并只传递静态内容?这当然适用于我的开发人员机器上的 Cassini,但是一旦我部署,这个问题就会出现。
我正在使用最后一个版本的 Ninject MVC 2,其中 IoC 工具应该将丢失的控制器传递给基本控制器工厂,但这显然没有帮助。我也尝试为 Content 等添加忽略路由,但这显然也没有效果。我什至不确定我是否在正确的层面上解决了这个问题。
有谁知道在哪里可以找到这个应用程序?我可以完全控制网络服务器,所以我可以或多或少地做任何我想做的事,只要它开始工作。
谢谢!