AngularJS使用OData請求ASP.NET Web API資源的思路

來源:互聯網
上載者:User

標籤:

 

本篇整理AngularJS使用OData請求ASP.NET Web API資源的思路。

 

首先給ASP.NET Web API插上OData的翅膀,通過NuGet安裝OData.

 

然後,給controller中需要使用OData的Action加上EnableQuery特性,並讓Action方法返回IQueryable<T>類型。

 

public class ProductsController : ApiController{    // GET: api/Products    [EnableQuery()]    public IQueryable<Product> Get()    {        var productRepository = new ProductRepository();        return productRepository.Retrieve().AsQueryable();    }        ...}

 

以上,EnableQuery特性還可以做出很多配置,比如:

 

[EnableQuery(PageSize=50)]
[EnableQuery(AllowedQueryOptons=AllowedQueryOptions.Skip | AllowedQueryOptions.Top)]


在前端,可能先要自訂一個module,把uri路徑作為這個module的一個常量。

 

(function () {    "use strict";    angular.module("custommodule", ["ngResource"])        .constant("appSettings", {            serverPath: "http://localhost:49705/"        });}());

 

ngResource這個module來自於angular-resource.js檔案,需要引用。

 

接著可能要通過factory的方式,為custommodule這個module添加一個自訂service。

 

function () {    "use strict";    //通過工廠的方式建立了一個服務    angular.module("custommodule")        .factory("productResource", ["$resource", "appSettings", productResouce]);    function productResouce($resource, appSettings) {        return $resource(appSettings.serverPath + "/api/products/:search");    }}());

 

以上,productResource這個service返回一個完整的api請求路徑。

 

接著需要把productResource這個service注入到某個controller中去。這時候就可以把OData的文法放在一個object對象傳遞給服務端。

 

(function () {    "use strict";    angular        .module("productManagement")        .controller("ProductListCtrl",                     ProductListCtrl);    function ProductListCtrl(productResource) {        var vm = this;        vm.searchCriteria = "GDN";        productResource.query({ $orderby: "Price desc" }, function (data) {            vm.products = data;        });    }}());

 

最終呈現出的OData相關uri大致是這樣:http://localhost:52293/api/products?$filter=Price+gt+5&$orderby=Price

 

基本就是這個思路

 

有關OData的Operation:

 

$top
$skip
$orderby
$filter
$select


$filter的一些操作符:

 

$filter: "Price eq 10"
$filter: "Price ne 10"
$filter: "Price gt 10"
$filter: "Price ge 10" 大於等於
$filter: "Price lt 10"
$filter: "Price le 10" 小於或等於
$filter: "Price gt 10 and Price lt 20"
$filter: "Price eq 10 or Price eq 20"
$filter: "(Price lt 10) and not (Price eq 0)"


$filter的一些函數:

 

$filter: "Starswith(ProductCode,‘GDN‘)"
$filter: "endswith(ProductCode, ‘001‘)"
$filter: "contains(ProductCode, ‘GDN‘)"
$filter: "tolower(ProductCode) eq ‘001a‘"
$filter: "toupper(ProductCode) eq ‘001B‘"

 

$filter其它:

 

運算子:Additon, subtraction
日期:year, month, day, now, etc
運算:round, floor, etc
位置:distance, length, etc
Lamda:any, all
可空:null, etc

 

AngularJS使用OData請求ASP.NET Web API資源的思路

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.