OData協定(Open Data Protocol)在2007年由微軟提出,中文名開放數據協定。目前已由原本1.0版本到4.0。現已被OASIS (Organization for the Advancement of Structured Information Standards)認可。該協定主要已REST原則,透過HTTP協定提供CRUD存取服務。OData也提供一些特別語法讓使用者(Http Client)來過濾(filter)資料查詢(query)和客製化data model,讓使用者不必大改程式碼就可獲得它想要的數據結構和格式,滿足客戶或使用者的需求。現在ASP.NET CORE和ASP.NET FRAMEWORK框架都支援OData。本篇文章會介紹如何讓OData實作在ASP.NET FRAMEWORK和ASP.NET CORE框架上,也會舉些OData API的實際範例。
OData語法

OData查詢選項
Odata查詢方法 | 意義 |
$top = n | 表示回傳前n筆資料 |
$skip = n | 表示略過前n筆資料 |
$Orderby | 決定資料的結果派序 |
$filter | 回傳符合條件的資料 |
ASP.NET FRAMEWORK
需先下載OData套件

接者在WebApiConfig.cs 修改如下

Controller要繼承ODataController類別

在Web API裡,記得在HTTP方法前先加上[EnableQuery]Attribute

ASP.NET CORE
想要在ASP.NET CORE框架下實作OData,和ASP.NETCORE一樣需要先下載OData套件。

再加上下面的代碼


最後記得要在HTTP方法上加上[EnableQuery]的Attribute

OData實例
以下為ODATA實用例子
Model

接者再預設好資料

執行後打上以下URL

出現畫面

若更改URL為

該URL說明我們只要求收到Product物件Name欄位,結果如以下

若我們只想要Name和Price,則query的URL為

結果為

若想要由價格低到高來排序,則語法為


結論
已上例子顯示OData的優點,我們只要稍微更改查詢語句就可得到我們想要的資料格式。若用其它Restful API方法,則可能需要大改程式碼。且要讓OData協定再ASP.NET FRAMEWORK或ASP.NET CORE框架中工作,只需下載該套件和撰寫4,5行程式碼即可。可以說OData是一個好用且易於實踐Restful API方式的Standard。