2013-10-16 104 views
4

WebAPIConfig的WebAPI路由表

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

我APIController:

public class TestController : ApiController 
{ 
    [HttpPost] 
    public string Send([FromBody] string id) 
    { 
     return "Got " + id; 
    } 
} 

這一切運作良好,直到我改變PARAM 「ID」 的NAME讓我們說「輸入「在我的API程序上。

MY(錯的)假設
我的印象是,通過將{XX}支架上的路由表的網址,我們真的聲稱任何1 PARAM將從請求調用中使用。

根據我的小樣本這似乎並非如此。

問題1:
這是否意味着,如果我有10種API方法(即像註冊,登錄,註銷,sendemail ...),而不是標準默認GET/POST/PUT /刪除.. ..i將需要10個單獨的路由條目爲每個?

問題2:
此外,我們如何代表在路由表中預計,一類POCO領域的API? 我們是否在MapHttpRoute上聲明每個人和單獨的字段名?

+0

問題1:你可以使用一個功能叫做混疊前:'([FromUri(NAME =「ID」)字符串輸入)'...所以你仍然可以保持'TestApi'路線,因爲它是.. –

+0

@KiranChalla是在路由上還是在控制器上? –

回答

2

如果重命名操作方法的id參數input,這個動作每次調用將不得不請求主體內通過一個名爲input參數(不id!)。

由於參數是基於名稱匹配的結合,你不能沒有更新客戶打電話重命名車身參數(如果這甚至有可能)。但是,當您更新路由定義和相應的操作方法參數時,您可以重命名路由參數佔位符。