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

Asp.net mvc MVC获取页面的404错误,但页面仍然正确显示,asp.net-mvc,visual-studio,iis,entity-framework-4,Asp.net Mvc,Visual Studio,Iis,Entity Framework 4,我有一个非常奇怪的问题。在我的localhost MVC站点上,页面加载和显示良好,但在Firebug中,控制台选项卡的第一行显示 "NetworkError: 404 Not Found - http://localhost:11634/clay-test-3" 。。。其中clay-test-3是页面的URL 我用routedebugger检查了路线,那里一切正常。很明显,它必须是这样的,因为它正在找到正确的控制器和正确的动作,并且正在生成视图 不幸的是,在生产站点上,同一页面出现的只是标准

我有一个非常奇怪的问题。在我的localhost MVC站点上,页面加载和显示良好,但在Firebug中,控制台选项卡的第一行显示

"NetworkError: 404 Not Found - http://localhost:11634/clay-test-3"
。。。其中clay-test-3是页面的URL

我用routedebugger检查了路线,那里一切正常。很明显,它必须是这样的,因为它正在找到正确的控制器和正确的动作,并且正在生成视图

不幸的是,在生产站点上,同一页面出现的只是标准的IIS404错误页面,没有RoutedBugger,Elmah中没有记录错误

如果有人能向我解释一下(在localhost上)我是如何得到404错误的,而页面仍然显示良好,这可能会帮助我找到问题所在

我假设问题发生在控制器内部,但我还没有发现该控制器与站点上其他正在运行的控制器之间的显著差异

我的本地计算机运行的是IIS 10.0,生产箱运行的是IIS 8.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
         );

另请参见。

是否有路由映射来处理控制器名称中的连字符/破折号?据我所知,控制器名称不能有连字符/破折号,因此必须以某种方式将“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
         );

另请参见。

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

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

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

<body class="home_page">
因此,我修复了这个问题,并在视图中创建了一个包含所需类的容器div。Ie:

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

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

我从未在本地主机调试版本上测试过该链接,在发行版中,如果不是所有操作/控制器链接都正确解析,则必须有一种机制阻止页面呈现


呸!这花了一点时间。感谢您的回答和评论。

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

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

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

<body class="home_page">
因此,我修复了这个问题,并在视图中创建了一个包含所需类的容器div。Ie:

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

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

我从未在本地主机调试版本上测试过该链接,在发行版中,如果不是所有操作/控制器链接都正确解析,则必须有一种机制阻止页面呈现


呸!这花了一点时间。感谢您的回答和评论。

请分享您的代码!Sunil Kumar的公正评论,但哪种代码?事实证明(请参见下面的解决方案),我的问题之一是布局模板,它只有18行长,而另一个是在我的视图中,它有477行长。路由非常简单(5行代码),但它使用了一个从IRouteContstraint派生的类。这门课有25行。控制器有17条线长。如果我把所有相关的代码都包括进去的话,它会超过500行。我想我希望有人可能有类似的问题,至少可以告诉我在所有代码中的位置。干杯,克莱,请分享你的代码!Sunil Kumar的公正评论,但哪种代码?事实证明(请参见下面的解决方案),我的问题之一是布局模板,它只有18行长,而另一个是在我的视图中,它有477行长。路由非常简单(5行代码),但它使用了一个从IRouteContstraint派生的类。这门课有25行。控制器有17条线长。如果我把所有相关的代码都包括进去的话,它会超过500行。我想我希望有人可能有类似的问题,至少可以告诉我在所有代码中的位置。干杯,克莱希·布伦奇,谢谢你的回应。我使用iroute约束。将更新我的问题,因为我无法在此评论中添加完整的代码。嗨,brench,感谢您的回复。我使用iroute约束。将更新我的问题,因为我无法在此评论中添加完整代码。