2012-11-28 194 views
0

我正在尋找關於如何在Web API項目中設置路由的提示。我已成立了一個名爲居民有方法控制如下:MVC 4 Web Api路由

public ResidentModel GetResidentInfo(int resId) 
{ 
    //code to return ResidentModel object 

} 

我曾嘗試以下,以映射到route.config文件這種方法。

routes.MapRoute(
      name: "Resident", 
      url: "{controller}/{action}/{id}", 
      defaults: new { id = UrlParameter.Optional } 
      ); 

我試圖通過各種方式來訪問這個方法:

http://localhost/resident/1 or 
http://localhost/resident/GetResidentInfo/1 etc... 

我正在尋找有關設置控制器,然後映射到控制器的方法時的過程中的一些指導我嘗試訪問我創建的方法不能識別它們的方法。提前致謝。

+0

愚蠢的問題:就是您控制器「居民」或「ResidentController」?你可以嘗試將redId參數更改爲id。並使用第二個網址? – Mightymuke

+0

如果您在請求中刪除「/ 1」,並在方法中將「1」設置爲默認參數,會發生什麼情況? – jchapa

+1

實際上,對於一個Web API項目,你可能需要一個URL如'http:// localhost/api/resident/GetResidentInfo/1' – Mightymuke

回答

4

首先,你的控制器類應該叫ResidentController(不只是Resident)和繼承ApiController(它確實需要實現IHttpController,但是從該類繼承是最簡單的方法)。

其次,對於Web API控制器,您應該使用MapHttpRoute而不是MapRoute

接下來,路線上的參數id與您的操作中的參數不匹配。如果你有如下面的一個路線,你應該能夠獲得第二url:

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

,這將匹配第一個:

routes.MapHttpRoute(
    name: "DefaultAction", 
    routeTemplate: "{controller}/{resId}", 
    defaults: new { action = "GetResidentInfo" }); 
+0

感謝您的響應控制被稱爲ResidentController我想你們會拿這個給我道歉。謝謝卡洛斯這解決了我的問題我可以在跟隨你的路由後,在以下URL獲得響應。 http:// localhost/api/resident/GetResidentInformation /?resId = 1 – vikingben

+1

我會爲你投票,但我沒有足夠的代表。 :d – vikingben