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

來源:互聯網
上載者:User

標籤:style   blog   class   code   ext   color   

REST並沒有像傳統的RPC服務那樣顯式指定了伺服器函數的訪問路徑,而是將URL根據一定的規則映射為服務函數入口,這個規則就稱之為路由。Asp.Net WebAPI的路由方式和Asp.Net MVC是相同的,它支援兩種路由方式,傳統的路由映射和特性路由。 路由規則WebApiConfig.cs中定義,它的預設內容如下:

    publicstaticclassWebApiConfig
    {
        publicstaticvoid Register(HttpConfiguration config)
        {
            config.MapHttpAttributeRoutes();

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

它預設註冊了兩種路由規則,第一行註冊的是特性路由,第二行註冊的則是傳統的映射路由。預設情況下,由於我們沒有編寫特性路由規則,則是按照傳統的Controller方式映射路由。

關於路由規則,MSDN文檔ASP.NET 路由介紹得非常詳細,但由於其介紹得太詳細了,反而不容易得其門而入,這裡我只拿預設的路由規則來簡單但的介紹一下我的理解,它的uri格式是這樣的"api/{controller}/{id}",其中id是可選的。拿前文的例子來說吧,

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

另外,這裡也有幾個常用的衍生規則:

  1. 根據操作方式找函數的時候,只需要匹配首部即可,因此我們編寫函數的時候寫成Get()和GetProduct()都是可以的。,
  2. 根據操作方式找函數的時候尋找的時候不分大小寫,因此寫成Get()或get()都是可以的

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

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

預設的規則雖然大多數的時候還是比較方便的,但是很多時候我們需要手動指定個人化的路由規則。例如,我們可以自訂一個按名稱來查詢的url:api/products/name=xxx。這個時候則可以用特性路由快速的實現了:

    [Route("api/{controller}/name={name}")]
    publicIHttpActionResult GetByName(string name)

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.