標籤:
OData是什麼
官方解釋:The Open Data Protocol (OData) is a data access protocol for the web. OData provides a uniform way to query and manipulate data sets through CRUD operations (create, read, update, and delete).
開始使用OData
要想使用OData,還有以下工作要做。
a.安裝OData的程式包。可以通過NuGet封裝管理員安裝,安裝命令:Install-Package Microsoft.AspNet.Odata
b.配置OData EndPoint。在WebApiConfig的Register方法中註冊OData路由和建立EDM,代碼如。
c.建立OData Controller和Action,代碼如。
現在可以訪問下面兩個url看看效果。
http://localhost.dev.wingontravel.com/HWAODataSite/opi?$metadata
,查看中繼資料,如
http://localhost.dev.wingontravel.com/HWAODataSite/opi/Citys?$select=CityName,CityEnglishName ,查詢CityName和CityEngLishName,多個欄位用,號分隔,如。
查詢
先來看一下OData支援哪些查詢選項,匯總如,然後來分別說明和示範。
①$select,一般用來返回指定的欄位,如url:http://localhost.dev.wingontravel.com/HWAODataSite/opi/Citys?$select=CityName,CityEnglishName
②$filter,一般用於過濾結果。如下面例子。
?http://localhost.dev.wingontravel.com/HWAODataSite/opi/Citys?$filter=CityCode eq ‘TSN’,過濾CityCode=“TSN”
?http://localhost.dev.wingontravel.com/HWAODataSite/opi/Citys?$filter=CityID lt 5,過濾CityID<5
?http://localhost.dev.wingontravel.com/HWAODataSite/opi/Citys?$filter=CityID ge 5,過濾CityID>5
?http://localhost.dev.wingontravel.com/HWAODataSite/opi/Citys?$filter=substringof(‘T’,CityCode),過濾CityCode包含”T”的,報錯’ An unknown function with name ‘substringof‘ was found’,還不知道為什麼。
重要:要使用filter功能,必須啟用它。如下代碼。
③$skip和$top,一般用於分頁。
?$skip和$top基於用戶端分頁,比如url:http://localhost.dev.wingontravel.com/HWAODataSite/opi/Citys?$top=5&$skip=5
?[PageSize]屬性,服務端分頁,如下代碼,限制介面一次只能返回10條記錄。
④$orderby,排序。比如
?http://localhost.dev.wingontravel.com/HWAODataSite/opi/Citys?$orderby= CityID desc,按CityID降序排
?http://localhost.dev.wingontravel.com/HWAODataSite/opi/Citys?$orderby= CityCode,CityID desc,組合排序
重要:要使用orderby,需要啟用。如下代碼。
3.1 一個綜合查詢的例子
需求:查詢CityID<16,取第二頁(每頁5條資料),按CityID降序排序,並且只返回CityName+CityEnglishName兩個欄位的城市資訊。
Url:
http://localhost.dev.wingontravel.com/HWAODataSite/opi/Citys?$filter=CityID lt 16&$top=5&$skip=5&$orderby=CityID desc&$select=CityName,CityEnglishName
注意:這個url放在fiddler中需要encode
OData V4特性路由
OData v4的特性路由類似於WebApi 2的特性路由,可以向Controller添加ODataRoutePrefix和向Action添加ODataRoute特性,它們都是在命名空間System.Web.OData.Routing下,而WebApi 2的特性路由在命名空間System.Web.Http下。如下代碼。
附:以上Demo已經放到GitHub上了。
1.https://github.com/mcgrady525/HelloWebAPI ,路由,序列化和模型繫結
2.https://github.com/mcgrady525/HelloWebAPI.OData ,OData和重點關注的部分
OData with List