ASP.NET MVC如何更好地过滤我的路线?

时间:2011-06-29 22:55:33

标签: asp.net asp.net-mvc

我在路由表中添加了一条新路由:

  routes.MapRoute(
          "ModuleRoute", // Route name
          "Module/{href}", // URL with parameters
          new { controller = "Module", action = "GetHtml" }// Parameter defaults
      );

我需要这条路线匹配以下网址结构:

  

/module/123abc.html

问题是它在这个结构上也匹配

  

/module/Launch/123abc.html

致电链接:

    <%: Html.ActionLink("Launch", "Launch", new { href = item.Href })%>   

如何阻止这种情况发生?我希望他的第二个结构继续与默认路由匹配。我认为,因为参数的数量不同,这不会是一个问题。

如何更好地过滤我的路线以防止这种情况?

谢谢!

1 个答案:

答案 0 :(得分:1)

我同意Max Toro,我已完成一些测试,且该网址与Module/{href}不匹配。

此:

<%: Html.ActionLink("Launch", "Launch", new { href = item.Href })%>

实际上正在达到默认路线。如果您将默认路线更改为以下内容,则会看到此信息(请注意,ID已更改为href

 routes.MapRoute(
     "Default", // Route name
     "{controller}/{action}/{href}", // URL with parameters
     new { controller = "Home", action = "Index", href = UrlParameter.Optional } // Parameter defaults
 );

所以,这证明它正在通过第一条路线掉落,因为它获得了正确的网址(没有查询字符串)

它正在做什么(当你有id的常用默认路线时)controlleraction匹配,但id不匹配。这没关系 - 路线仍然匹配,但不会离开id。所有其他值(例如href)都会附加为查询字符串参数,因此您最终得到:

module/Launch?href=123abc.html

解决问题的方法是添加另一条路线,类似于使用href代替id的路线

类似的东西:

 routes.MapRoute(
     "Launch",
     "Module/Launch/{href}",
     new { controller = "Module", action = "Launch", href = UrlParameter.Optional }
 );