【问题标题】:Diagnosing 404 errors on IIS 7 and ASP.NET MVC诊断 IIS 7 和 ASP.NET MVC 上的 404 错误
【发布时间】:2010-10-16 20:31:16
【问题描述】:

我有一个使用 Cassini 开发和测试的 mvc 应用程序。部署到我在 GoDaddy 上的站点,默认页面正常。点击登录,我得到一个 404。

我在 IIS 7 下运行,所以这是出乎意料的。我的路线很简单:

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

        routes.MapRoute(
            "Default",                                              
            "{controller}/{action}/{id}",                           
            new { controller = "Public", action = "Index", id = "" } 
        );
        routes.MapRoute(
            "Report1",
            "Report/{action}/{start}/{end}",
            new { controller = "Report", action = "Index" }
        );
        routes.MapRoute(
            "Report2",
            "Report/{action}/{start}/{end}/{idList}",
            new { controller = "Report", action = "Index" }
        );

知道可能发生了什么或如何解决此问题?

【问题讨论】:

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


    【解决方案1】:

    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>
    

    【讨论】:

    • 这个答案也有效,并且似乎有更有效(和优雅)的方法。
    • 此方法在 ASP.NET Web API 应用程序中对我来说效果很好。该应用程序在本地运行良好,但当部署到任何其他环境时,我刚刚收到任何 Web API 请求的 404。添加了上面提到的路由模块位,一切都很好。类似问题:stackoverflow.com/questions/15389855/…。谢谢!
    • 我正在努力让 MVC 应用程序接受 HTTP DELETE 请求。这为我解决了问题。谢谢!
    • 同样的问题,如果我部署到其他环境,方法删除请求不起作用:iis 8 ok 但在其他环境(iis 7)我得到 404
    【解决方案2】:

    我也遇到了同样的问题,我上传了控制器、web.config等类但是忘记上传bin文件夹了。

    我上传 bin 文件夹后,它工作了!

    【讨论】:

      【解决方案3】:

      什么都试过了,我必须像这样设置我的网络配置,才能让它工作。

       <system.webServer>
          <validation validateIntegratedModeConfiguration="false"/>
          <modules runAllManagedModulesForAllRequests="true"/>
        </system.webServer>
      

      【讨论】:

      • 哇这真的有效!但是为什么我感觉它会回来困扰我呢?
      【解决方案4】:

      您是否在 IIS7 集成模式下运行?

      IIS7 的经典模式不会自动将无扩展名的 URL 映射到 ASP.NET(很像 IIS6)。

      还要确保您的Web.config &lt;system.webServer&gt; 标签配置正确。

      【讨论】:

      • 谢谢,梅尔达德。原来 GoDaddy 将 IIS 7 默认设置为经典模式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      相关资源
      最近更新 更多