我刚刚获得了一个新的开发框,并且在启动和运行我的MVC项目时遇到了问题。我的旧盒子有Server 2003和IIS6。在设置了here提到的外卡映射后,我能够让我的MVC应用程序在此框上运行。我的新盒子正在运行Vista Business和IIS7。当我复制我的应用程序并试图运行它时,我得到一个'http 404无法找到资源'。错误。但是,如果我创建一个新的MVC应用程序并运行它,一切正常。我还从我的旧盒子里复制了Nerd Dinner应用程序,并且工作正常。
我已经确认应用程序在集成模式下运行,并且比较了工作和非工作应用程序的web.config文件,但除了特定于应用程序的应用程序之外,没有看到任何不同的内容。我试图使用通配符映射集在经典模式下运行应用程序,但这也不起作用。我也尝试使用Cassini运行应用程序,但得到了相同的结果。
答案 0 :(得分:1)
我已在我的博客上发布了答案,请在
处查看http://nkitdugar.blogspot.com/2011/02/special-care-while-migrating-mvc.html
我有一个基于MVC的应用程序,早先在IIS 6上托管。现在IIS 6默认不支持无扩展URL路由,因此我们需要在定义的默认路由中添加一些扩展名到控制器名称,如{ControllerName} IIS6中的.aspx {Action method} {Id}。此外,如果我们想要使用其他扩展名,例如.mvc等,那么我们需要使用诸如通配符mappng等技术来映射它。
现在,当我们迁移到IIS7时,支持无扩展名URL,这意味着URL可以在那里没有任何相应的物理位置。
因此,当您将MVC应用程序迁移到IIS7时,请确保Globla.asax中的默认路由定义没有使用
{controller}.aspx\{action method}\{Id}
等控制器定义的任何扩展名,并将其更改为\clean URL route {Controller}\{Action Method}\{ID(optional)}
。 第二件事你应该记住,网站的AppPool的管道模式应该设置为经典的集成。现在,您的网站已准备好在IIS7上托管。
答案 1 :(得分:0)
好的,我发现了问题。有问题的应用程序是一个Web窗体应用程序的端口,而不是MVC作为概念验证项目。因此,当项目首次创建时,我们只是在项目名称的末尾添加了一个.MVC,使其成为{project name} .MVC。现在,我知道发生了什么,这并不奇怪,这导致了默认路由定义的问题。我将名称更改为使用下划线而不是句点,现在一切正常。我假设它在IIS6下运行时工作正常,因为它是使用通配符映射设置的,因此没有.MVC扩展来混淆它。