MVC 获取页面的 404 错误,但页面仍然正确显示

MVC getting a 404 error for page but page still displays correctly

我有一个非常非常奇怪的问题。在我的本地 MVC 站点上,页面加载并显示正常,但在 Firebug 控制台选项卡的第一行显示...

"NetworkError: 404 Not Found - http://localhost:11634/clay-test-3"

... 其中 clay-test-3 是页面的 URL。

我已经使用 routedebugger 检查路线,一切正常。好吧,显然它必须是,因为它正在找到正确的控制器和正确的操作并正在生成视图。

不幸的是,在生产站点上,同一页面出现的只是标准的 IIS 404 错误页面,没有 routedebugger,Elmah 中没有记录任何错误。

如果有人可以向我解释如何(在本地主机上)出现 404 错误并且页面仍然显示正常,那可能会帮助我找出问题所在。

我假设问题出在控制器内,但我还没有发现该控制器与网站上其他正常运行的控制器之间存在显着差异。

我的本机是运行IIS 10.0,生产盒IIS 8.0.

感谢您的宝贵时间!

你有路由映射来处理控制器名称中的 hyphens/dashes 吗?据我所知,您不能拥有包含 hyphens/dashes 的控制器名称,因此您必须以某种方式将 "clay-test-3" URL 映射到您的控制器。这可能无法解释为什么页面会使用 localhost 而不是在生产环境中出现,但它可以解决 404 错误。示例:

routes.MapRoute(
            "clay-test-3", // Route name
            "clay-test-3", // URL with parameters
            new { controller = "ClayTest3", action = "Index" } // Parameter defaults
         );

另见 asp mvc using dashes in controller names and routing?

好的,看起来这是两个不同的问题,一个导致在 localhost 中成功显示页面的 404 错误,另一个导致 404 错误(页面根本不显示)我的生产服务器。

第一个问题是由以下原因引起的...

因为我得到的 CSS 样式表有一个主体定义,需要为不同类型的页面设置不同的 class,即:

<body class="home_page">

...我决定将 <body></body> 标记移出布局模板,并移至视图中,以便 [=37] 中的 html 块=] 文件看起来像这样:

<html>
    ... [various other code]
    @RenderBody()
    @RenderSection("scripts", required: true)
</html>

显然这是一个禁忌。 body 标签需要在布局模板中,大约 @RenderBody().

<html>
    ... [various other code]
    <body>
        @RenderBody()
        @RenderSection("scripts", required: true)
    </body>
</html>

所以我解决了这个问题,并在视图中创建了一个容器 div,其中包含所需的 class。即:<div class="home_page">

另一个问题(导致生产服务器出现 404 错误)是从另一个项目复制的视图中的一些代码导致的,该项目的路由略有不同。

<a href="@Url.Action("ViewPage", "Page")" id="logo"><img ... etc ... ></a>

我从未在我的本地主机 Debug 版本上测试过 link,并且在 Release 中必须有一种机制来阻止页面呈现,如果不是所有 action/controller links 解决正确。

呸!这需要一些追捕。感谢您的回答和评论。