2014-12-13 72 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