在MVC网站上获得404错误

时间:2011-02-21 16:52:57

标签: asp.net-mvc asp.net-mvc-2 iis-7

我在Windows Server 2008上有一个IIS7.5网站,部署了一个ASP.NET MVC2网站。该网站是在Visual Studio 2008中构建的,面向.NET 3.5,并且IIS 5.1已成功配置为运行它,用于本地测试。

但是,每当我尝试导航到IIS7中运行的页面时,都会收到404错误。

我检查了以下内容:

  • IIS日志中没有相应的404日志条目。
    • 实际上,IIS日志中 404个条目。
  • 网站的应用程序池设置为使用Integrated管道。
  • “customErrors”模式设置为off。
  • .NET 3.5 SP1 is installed
  • 已安装ASP.NET MVC 2
  • 我使用MVC Diagnostics确认找到了所有MVC DLL。
  • 在IIS中启用了ASP.NET,我们已通过运行MVC诊断页面证明了这一点。
  • KB 2023146确实突出显示HTTP重定向已关闭,因此我们已将其打开,但没有任何乐趣。

修改 好的,所以我们已经安装了世界上最简单的MVC应用程序(在Visual Studio中创建新的MVC2项目时创建的应用程序),我们仍然可以在我们尝试访问的任何页面上获取404 - 例如 <my_server>/Home/About将生成404。

任何想法都将不胜感激!

14 个答案:

答案 0 :(得分:14)

这通常是由web.config中的以下缺失引起的:

<system.webServer>
   <modules runAllManagedModulesForAllRequests="true"/> 

答案 1 :(得分:10)

您只有1页的问题或整个网站无法正常工作吗?

A)1页

  • 您可以使用 RouteDebugger 来验证路线是否正确匹配

B)整个网站

  • 我假设您正在使用Windows Server - 请检查IIS中是否启用了ASP.NET - 默认情况下它是禁用的。我相信。

  • 您可以使用MvcDiagnostics页面检查是否所有dll都已正确部署。

  • 您是否在IIS7 集成模式中运行? IIS7的经典模式不会自动将无扩展名URL映射到ASP.NET(很像IIS6)

  • 确保您的 Web.config 标记配置正确。

答案 2 :(得分:8)

我们最终通过导出工作服务器的IIS配置并将其与我们的服务器进行比较来解决此问题。

这是一个非常模糊的设置,已从默认设置更改。

IIS ROOT→请求过滤→文件扩展名选项卡→编辑功能设置→允许未列出的文件扩展名

这应该勾选。

可以在IIS级别或站点级别设置。

Screenshot of IIS showing location of Request Filtering option

答案 3 :(得分:3)

很高兴解决了你的问题。其他研究此问题的人应该注意无扩展名的URL修补程序:http://support.microsoft.com/kb/980368

答案 4 :(得分:2)

结帐KB 2023146是否适用于您的方案。还可以尝试直接请求控制器操作:/yoursitename/home/index

答案 5 :(得分:2)

如果此处没有其他解决方案解决您的问题,请检查您是否有

  

Global.asax中

在您网站上的文件。这解决了我的问题。

答案 6 :(得分:1)

显然,这可能有很多不同的原因。

对我们来说,问题是DNS条目是为两个IP地址配置的,但IIS配置只会侦听其中一个IP地址。所以我们得到了不可预测的结果,有时它会工作,有时一些文件(css等)不会加载,有时整个页面都不会加载。

答案 7 :(得分:1)

对我来说,这完全是关于在服务器上安装.NET Framework 4.6.1(我的应用程序是针对该版本)

答案 8 :(得分:0)

如果你的绑定不正确,你也会得到这个。如果您没有www或子域,它将返回404。

答案 9 :(得分:0)

运行我的MVC4站点并将应用程序池设置为ASP.NET 4.0和Classic管道时遇到此问题,即使扩展处理程序已在我的web.config中设置并在IIS中正确显示。该网站在Integrated Pipeline中工作,所以我知道这是一个配置问题,但我无法确定它。我终于发现在ISAPI和CGI限制设置中为服务器禁用了ASP.NET 4。我启用了ASP.NET 4.0,它运行良好。

答案 10 :(得分:0)

除了检查您是否在集成管道模式下运行外,还要确保您的应用程序池设置为使用.NET!我最近遇到了这个问题,当我进入检查应用程序池设置时,我发现它已被设置为&#34; No Managed Code。&#34;糟糕!

enter image description here

答案 11 :(得分:0)

My Hosting公司通过这样做为我解决了这个问题(我当然删除了原来的密码值)。

  <system.webServer>
    <security>
      <authentication>
        <anonymousAuthentication password="<password>" />
      </authentication>
    </security>
  </system.webServer>

答案 12 :(得分:0)

通常,当出现路由问题时,我会遇到此问题。我将工作与非工作进行比较以解决它。

今天然而我意外地在IIS中创建了一个虚拟目录。

必须是应用程序,右键单击虚拟目录(带有文件夹图标) - &gt;转换为应用程序:

enter image description here

答案 13 :(得分:0)

Don't use runAllManagedModulesForAllRequests。您想让IIS处理图像等资源。

<system.webServer> <!-- Rather do NOT use this -->
  <modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>

相反,添加MVC路由模块

<system.webServer>
  <modules>
    <remove name="UrlRoutingModule-4.0" />
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
  </modules>
</system.webServer>