2012-05-02 68 views
0

在我的ASP.NET Web API項目,我已經在Global.asax定義如下路由:asp.net MVC - 不明白爲什麼路由不工作

routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "{controller}/{action}" 
      ); 

      routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}" 
      ); 

我有一個名爲UserFeedController與動作控制器以下特徵:

public UserFeedResponseViewModel GetUserFeed(int id) 

當我輸入網址http://api.mydomain.com/UserFeed/GetUserFeed/4,我收到了404爲什麼沒有第二路由規則適用?

MVC路由遠遠超出我的能力去領悟。

回答

2

你的兩條路線基本相同。 MVC找到匹配的第一條路由,並且既然你已經指定了一個控制器和一個動作,它認爲你很好走。它會忽略你指定的id(我相信它可能試圖將它作爲參數傳入)。

我建議改變你的第一條路線,包括API /開頭就像這樣:

routes.MapHttpRoute( 
      name: "DefaultApi", 
      routeTemplate: "API/{controller}/{action}" 
     ); 

     routes.MapHttpRoute( 
      name: "Default", 
      url: "{controller}/{action}/{id}" 
     ); 

這將確保你的路由正常工作。

+0

我的天!直到現在我沒有注意到代碼調用兩個單獨的方法:MapRoute()和MapHttpRoute()。爲什麼地球上的Web API控制器的路由完成不同?我已經改變了代碼總是使用'MapHttpRoute()',現在我得到了我期望的行爲...... – David

相關問題