0

我有一个应用程序,它在 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 等添加忽略路由,但这显然也没有效果。我什至不确定我是否在正确的层面上解决了这个问题。

有谁知道在哪里可以找到这个应用程序?我可以完全控制网络服务器,所以我可以或多或少地做任何我想做的事,只要它开始工作。

谢谢!

4

2 回答 2

3

我在 StructureMap 和 favorite.ico 上遇到了类似的问题,我最终做的是添加一个路由来忽略该路径。

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("favicon.ico");

请记住,我真的完全不知道,但另一个改变是需要 Default.aspx,如果您有任何需要映射的自定义页面。这是我在路由方面仅有的两个问题。

        routes.RouteExistingFiles = false;

编辑:我的意思是 RouteExistingFiles 应该是假的,否则我在 MVC2 中得到那个异常:)

于 2010-05-02T17:27:03.470 回答
1

原来这是由某些帐户设置引起的 - 我不知道 IIS AppPool\sitename 帐户是由 IIS 在 Win2008 R2 服务器中自动创建的。在尝试了“一切”之后,我发现了这些信息,赋予了适当的权利,并且神奇地开始工作。

调试非常困难,尤其是对于 IIS 经验非常有限的人(我)。

于 2010-05-08T17:00:18.447 回答