2016-01-06 92 views
0

我加入了以下路线页面:的Web API - IgnoreRoute返回奇怪404

// Ignore the alternate path to the home page 
    routes.IgnoreRoute("Home/Index"); 
    routes.IgnoreRoute("Home"); 

    routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { id = UrlParameter.Optional } 
    ); 

访问:http://localhost:60832/home (请注意HOME是一个已知的控制器,但在路由忽视,如上图所示)

404 Page - Known Controller

访问:http://localhost:60832/testme 我得到这个404页: enter image description here

他们为什么如此不同? 为什么返回的页面不一样?

请注意,这是在WebAPI和MVC Web应用程序项目上发生的,其中定义了相同的路由。

+0

它出现在'IgnoreRoute'使得该配置的修改在IIS的水平,而其他通过IIS发送到ASP.NET MVC但随后在MVC路由器内部失败。 –

+0

您是否想在没有路由框架的情况下从浏览器执行控制器,这有可能吗? – Anil

+0

我只是想'关闭''home'' home/index',但后来得到了这种奇怪的行为。 @MichaelPerrenoud - 我的猜测与你的一样,一个被视为静态文件,另一个被视为.NET,但为什么? – Dementic

回答

1

因为对于/home你忽视它处理的异常,这就是为什么你得到适当的404

对于错误Çontroller/action (testme/indexa)它正在寻找它的路由表和投掷,我还没有发现未处理的异常任何资源(URI)通过这个名字。

,为了防止路由来处理URL模式的请求,你可以使用StopRoutingHandler

routes.Add(new Route("{resource}.axd/{*pathInfo}", new StopRoutingHandler())); 
+0

只是为了让事情清楚,如果有人在这里登陆。 Anil描述的没有“例外”。 .NET正在处理路由,请看它的应该忽略它并抛出一个404。 另一个页面被解析为一个静态页面,因为根本没有为它定义任何路由,并且IIS返回404. – Dementic

+0

只是不保留这个问题没有答案,我给你奖励点。 – Dementic