2014-12-13 73 views
0

为什么:ASP.NET路由没有被击中正确的映射

@Url.Action("Divisions", "Widgets", new {version = 1, eventId = Model.Event.Id, slug = Model.Event.Slug}) 

生成这样的:

http://localhost:2227/widgets/divisions?version=1&eventid=36295&slug=notifications 

当我的路线是这样的。

routes.MapRoute(
       "DefaultWidget", 
       "widgets/v{version}/{action}", 
       new { controller = "Widgets", action = "NotFound", version = 1, slug = "event"}, 
       new { version = @"\d+" } 
       ); 

和行动是这样的WidgetsController

public virtual ActionResult Divisions(int version, int? eventId, string slug) 
     { 
      return GetDivisions(eventId, new WidgetEventViewModel(version)); 
     } 

路线应该是这样的:

http://localhost:2227/widgets/v1/divisions?eventid=36295 
+0

你'@ Url.Action()'不匹配那条路线。你期待的网址看起来像什么? – 2014-12-13 06:17:05

+0

我想这会很聪明地添加''http:// localhost:2227/widgets/v1/divisions?eventid = 36295' – 2014-12-13 06:36:58

+0

您还显示了'ActionResult Event()'(你的意思是'ActionResult divisions() '?你是否想要'eventid'和'slug'为查询字符串('/ widgets/v1/divisions?eventid = 36295&slug = MySlug')或'/ widgets/v1/divisions/36295/MySlug' – 2014-12-13 06:41:59

回答

0

路由定义中删除slug = "event"(你不必在一个占位符url所以路由不匹配)

URL参数或者改变

"widgets/v{version}/{action}/{eventid}/{slug}", 

这将产生(假设版本= 1,事件ID = 36295和蛞蝓= “MySlug”)

/widgets/v1/divisions/36295/MySlug