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

时间:2016-09-16 02:57:20

标签: asp.net-mvc visual-studio iis entity-framework-4

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

"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。

谢谢你的时间!

2 个答案:

答案 0 :(得分:0)

您是否有路由映射来处理控制器名称中的连字符/破折号?据我所知,你不能拥有一个带有连字符/破折号的控制器名称,所以你必须以某种方式映射你的" 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?

答案 1 :(得分:0)

好吧,看起来这是两个独立的问题,一个是导致本地主机中成功显示页面的404错误,另一个导致我的生产中出现404错误(以及页面根本不显示)服务器

第一个问题是由以下原因造成的......

因为我给出的CSS样式表有一个正文定义,需要为不同类型的页面设置不同的类集,即:

<body class="home_page">

......我决定移动<body>&amp; </body>标签位于布局模板之外,并放入视图中,以便_LayoutSite.cshtml文件中的html块看起来像这样:

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

显然这是禁忌。身体标签需要在@RenderBody()附近的布局模板中。

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

所以我修复了它并在视图中创建了一个带有所需类的容器div。即:<div class="home_page">

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

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

我从未测试过localhost调试版本上的链接,而在Release中,必须有一种机制可以阻止页面呈现,如果并非所有操作/控制器链接都能正确解析。

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