2011-01-06 108 views
2

我有一个路由相当奇怪的问题。在这种情况下,为什么不使用Html.ActionLink的默认路由工作?

说回路由不必担心配置了一年后,我使用的是默认的路由,而忽略资源路线:

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

routes.MapRoute(
     "Default", 
     // Route name 
     "{controller}/{action}/{id}", 

     // URL with parameters 
     new 
     { 
      controller = "Home", 
      action = "Index", 
      id = UrlParameter.Optional 
     }); 

我有一个RulesControllerIndex和行动LoremIndex.aspx,Lorem.aspx在Views> Rules目录中。

我瞄准规则/指数maseter页面上的ActionLink的:

<li><div><%: Html.ActionLink("linkText", "Index", "Rules")%></div></li> 

链接被呈现为http://localhost:12345/Rules/和我得到一个404

当我键入Index到URL中应用程序将其路由到该操作。

当我更改默认路由操作从"Index""Lorem",动作链接被呈现为http://localhost:12345/Rules/Index添加Index,因为它是在默认路由和应用路线Index操作正确不再。

我已经使用Phil Haack's Routing Debugger,但输入url http://localhost:12345/Rules/也导致404也使用它。

我想我已经涵盖了所有的菜鸟错误,相关的SO问题和基本的RTFM。

我假设“规则”不是路由中的任何种类的保留字。 除了更新路线并将它们打散之外,我还能看到什么?

+1

你有没有定义任何IgnoreRoutes?你偶然在你的网站目录中有一个名为“规则”的文件夹? – 2011-01-06 17:34:02

+1

我确实有默认的忽略路由(现在在问题中添加)和是在文件夹上;架构师尚未为Business Objects创建另一个项目,因此在那里有一个“规则”文件夹。我会重新组织和测试。如果是这样,请添加此评论作为答案。 – StuperUser 2011-01-06 17:43:14

回答

2

确保在您的网站所在的目录中没有名为“规则”的文件夹。在其默认配置中,ASP.NET MVC路由将在路由定义之前遵循物理路径。如果定义的路由与网站中物理文件夹的路径相匹配,路由引擎将被完全绕过。

您可以通过更改RouteTable.Routes.RouteExistingFiles属性false禁用路由的物理路径,但如果你这样做,你的应用程序路径的物理资源(如图像,脚本,样式表等),你将需要适应这些具有匹配的IgnoreRoute()定义的路径。 例如:RouteTable.Routes.IgnoreRoute("content/{*pathInfo}");

相关问题