使用ASP.Net WebAPI構建REST服務(二)——路由

REST並無像傳統的RPC服務那樣顯式指定了服務器函數的訪問路徑,而是將URL根據必定的規則映射爲服務函數入口,這個規則就稱之爲路由。Asp.Net WebAPI的路由方式和Asp.Net MVC是相同的,它支持兩種路由方式,傳統的路由映射和特性路由。 路由規則WebApiConfig.cs中定義,它的默認內容以下:web

    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.MapHttpAttributeRoutes();

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

它默認註冊了兩種路由規則,第一行註冊的是特性路由,第二行註冊的則是傳統的映射路由。默認狀況下,因爲咱們沒有編寫特性路由規則,則是按照傳統的Controller方式映射路由。 服務器

關於路由規則,MSDN文檔ASP.NET 路由介紹得很是詳細,但因爲其介紹得太詳細了,反而不容易得其門而入,這裏我只拿默認的路由規則來簡單但的介紹一下個人理解,它的uri格式是這樣的"api/{controller}/{id}",其中id是可選的。拿前文的例子來講吧, mvc

  1. 當咱們對api/products地址進行訪問的時候,系統則會首先找到名爲ProductsController的控制器。
  2. 而後,根據訪問方式查找函數,因爲這裏是Get操做,則查找Get開頭的函數, 這裏會找到Get()和Get(int id)兩個重載版本。
  3. 最後,根據參數來匹配具體的函數,由於這裏沒有帶參數id。所以匹配到了Get()函數,返回了全部的集合。

另外,這裏也有幾個經常使用的衍生規則: 函數

  1. 根據操做方式找函數的時候,只須要匹配首部便可,所以咱們編寫函數的時候寫成 Get() GetProduct()都是能夠的 。,
  2. 根據操做方式找函數的時候查找的時候不分大小寫,所以寫成 Get() 或g et() 都是能夠的

當咱們使用帶參數的版本時候,也有幾個須要注意的地方: url

  1. 參數名不分大小寫,咱們寫成id或ID都是能夠的
  2. 參數名要求嚴格匹配的,咱們寫成ID2是不行的,此時則會匹配到錯誤的結果Get()

默認的規則雖然大多數的時候仍是比較方便的,可是不少時候咱們須要手動指定個性化的路由規則。例如,咱們能夠自定義一個按名稱來查詢的url:api/products/name=xxx。這個時候則能夠用特性路由快速的實現了: spa

    [Route("api/{controller}/name={name}")]
    public IHttpActionResult GetByName(string name)
翻譯

關於特性路由,MSDN原文Attribute Routing in ASP.NET MVC 5介紹得很是詳細,國內也有很是不錯的譯文版本Attribute Routing in ASP.NET MVC 5 翻譯及補充,這裏就不作多少介紹了。 blog

相關文章
相關標籤/搜索