2013-01-17 61 views
1

我可能只是在這個時間太長凝視,或也許我只是誤解背後的WebAPI的想法,但我想看看是否有辦法使它所以路由表來響應到CUSTOMIZED行動名稱。例如,我想要:的.NET Web API路由問題

// -> /api/student/studentRecord?studentId=1 
[HttpGet] 
public Student StudentRecord(int studentId){ 
    //Do Something and return the Student Record 
} 

// -> /api/student/newStudent?name=john 
[HttpPost] 
public int NewStudent(String name){ 
    //Do whatever and return the new id 
} 

我不確定我在這裏錯過了什麼,或者它是否可以完成。我一直精練的互聯網絡一會,似乎並不能推測出來。

是的WebAPI的點只是有一個單一的PUT,POST,GET等在每個控制器,或者我可以做我想做的事情?

我打得四處路由,但我想我讓事情變得更糟!每次我嘗試調用某個東西時,我都會調用相同的方法。

這是我在路由配置文件:

 config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
+1

你如何託管您的網絡API?用MVC4?看起來你是爲你的MVC控制器配置路由,因爲Wep.API路由看起來像是'config.Routes.MapHttpRoute'(' – nemesv

+0

更新了帖子,我把錯誤的路由配置了起來,今天做了太多的事情.. – SlackerCoder

+0

如果你把這個'config.Routes.MapHttpRoute( 名稱: 「DefaultApiWithAction」, routeTemplate: 「API/{控制器}/{行動}/{ID}」, 默認:新{ID = RouteParameter.Optional} ) ; ** **之前的「DefaultApi」它理論上應該起作用。 – nemesv

回答

2

你甚至都不需要上面鏈接的 '神奇' 的行動選擇(雖然它聽起來很涼爽) - 的WebAPI允許包括action名(=控制器的方法名稱,除非被覆蓋的)中的URL。

所以,在你的榜樣:

// -> /api/student/studentRecord?studentId=1 
[HttpGet] 
public Student StudentRecord(int studentId){} 

路由模板應該是這樣的:

routeTemplate: "api/{controller}/{action}" 
  • 控制器將被解析爲學生
  • 行動studentrecord
  • 我不要以爲你需要把查詢字符串參數放在模板中(除非你希望能夠將其追加到URL部分)

曾經使用過此一讀,以獲得更多的細節: http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api