【问题标题】:404 Error when moving ASP.NET MVC app from IIS6 to IIS7将 ASP.NET MVC 应用程序从 IIS6 移动到 IIS7 时出现 404 错误
【发布时间】:2009-08-20 15:45:39
【问题描述】:

我刚得到一个新的开发盒,但在启动和运行我的 MVC 项目时遇到了问题。我的旧盒子有 Server 2003 和 IIS6。在设置了here 中提到的通配符映射后,我能够让我的 MVC 应用程序在这个盒子上运行。我的新机器正在运行 Vista Business 和 IIS7。当我复制我的应用程序并尝试运行它时,我得到一个“http 404 找不到资源”。错误。但是,如果我创建一个新的 MVC 应用程序并运行它,一切正常。我还从旧盒子中复制了 Nerd Dinner 应用程序,效果也很好。

我已验证该应用程序在集成模式下运行,并比较了工作应用程序和非工作应用程序的 web.config 文件,但除了应用程序特定的应用程序设置外,没有发现任何不同之处。我尝试使用通配符映射集在经典模式下运行该应用程序,但这也不起作用。我也尝试过使用 Cassini 运行该应用程序,但得到了相同的结果。

【问题讨论】:

  • 您可以运行 Fiddler 并查看实际生成 404 的请求吗?
  • 这是对应用主页的初始请求。即{主机名}/{应用程序名称}/

标签: asp.net-mvc iis-7


【解决方案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 等其他扩展名,则需要使用通配符 mappngs 等技术对其进行映射。

现在,当我们迁移到 IIS7 时,支持无扩展名的 URL,这意味着 URL 可以在那里没有任何对应的物理位置。

因此,当您将 MVC 应用程序迁移到 IIS7 时,请确保 Globla.asax 中定义的默认路由没有使用 {controller}.aspx\{action method}\{Id} 等控制器定义的任何扩展,并将其更改为 \clean URL route {Controller}\{Action Method}\{ID(optional)}。 第二件事你应该记住,网站的 AppPool 的管道模式应该从经典设置为集成。

现在您的网站已准备好托管在 IIS7 上。

【讨论】:

  • 请务必仔细阅读FAQ on Self-Promotion。另请注意,每次链接到自己的网站/产品时,都需要发布免责声明。
【解决方案2】:

好的,我找到了问题所在。有问题的应用程序是作为概念验证项目的 Web 窗体应用程序到 MVC 的端口。因此,在第一次创建项目时,我们只是在项目名称的末尾添加了一个 .MVC 以使其成为 {项目名称}.MVC。现在我知道发生了什么,这并不奇怪,导致默认路由定义出现问题。我将名称更改为使用下划线而不是句点,现在一切正常。我假设它在 IIS6 下运行时运行良好,因为它是使用通配符映射设置的,因此没有 .MVC 扩展名来混淆它。

【讨论】:

    猜你喜欢
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多