• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

.NET Core开发日志之OData(Open Data Protocol)

asp 搞代码 4年前 (2022-01-03) 47次浏览 已收录 0个评论

这篇文章主要给大家介绍了关于.NET Core开发日志之OData(Open Data Protocol)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

简述

OData,即Open Data Protocol,是由微软在2007年推出的一款开放协议,旨在通过简单、标准的方式创建和使用查询式及交互式RESTful API。

类库

在.NET Core中想要使用OData功能的话需要添加Microsoft.AspNetCore.OData包。

 dotnet add package Microsoft.AspNetCore.OData

准备模型类

 public class Address { public string City { get; set; } public string Street { get; set; } } public enum Category { Book, Magazine, EBook } public class Press { public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } public Category Category { get; set; } } public class Book { public int Id { get; set; } public string ISBN { get; set; } public string Title { get; set; } public string Author { get; set; } public decimal Price { get; set; } public Address Address { get; set; } public Press Press { get; set; } }

创建Edm模型

OData使用EDM,即Entity Data Model来描述数据的结构。在Startup文件中添加创建方法。

 private static IEdmModel GetEdmModel() { var builder = new ODataConventionModelBuilder(); builder.EntitySet("Books"); builder.EntitySet("Presses"); return builder.GetEdmModel(); }

注册OData服务

在Startup文件的ConfigureServices方法里注册OData服务。

 services.AddOData(); services.AddMvc(options => { options.EnableEndpointRouting = false; }).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

这里要注意的是在.NET Core 2.2里,默认已经有终结点,所以要使用OData的终结点的话需要将默认选项禁用掉。

注册OData终结点

同样在Startup文件里,在其Configure方法内将原来的注册路由内容改为注册OData的终结点。

 app.UseMvc(b => { b.MapODataServiceRoute("odata", "odata", GetEdmModel()); });

显示元数据

运行程序后访问https://localhost:5001/odata/$metadata地址,可以看到所有可用模型的元数据。

            

创建Controller

本文实例中不考虑数据库的操作,故而使用hard code方式构建必要的模型对象。

 public class BooksController : ODataController { private static IList Books {get; set;} public BooksController() { Books = new List { new Book { Id = 1, ISBN = "111-0-321-56789-1", Title = "Calculus", Price = 66.6m, Address = new Address { City = "Shanghai", Street = "Beijin Xi Road" }, Press = new Press { Id = 1, Name = "Shanghai Tongji", Category = Category.Book } }, new Book { Id = 2, ISBN = "222-2-654-00000-2", Title = "Linear Algebra", Price = 53.2m, Address = new Address { City = "Shanghai", Street = "Beijin Dong Road" }, Press = new Press { Id = 2, Name = "Shanghai Fudan", Category = Category.EBook } } }; } [EnableQuery] public IActionResult Get() { return Ok(Books); } [EnableQuery] public IActionResult Get(int key) { return Ok(Books.FirstOrDefault(b => b.Id == key)); } }

EnableQuery特性在需要高级查询的场景时必须添加。

查询

加入Controller之后,访问https://localhost:5001/odata/Boo来源gao*daima.com搞@代#码网ks地址,可得到所有Book数据。

 { "@odata.context": "https://localhost:5001/odata/$metadata#Books", "value": [ { "Id": 1, "ISBN": "111-0-321-56789-1", "Title": "Calculus", "Author": null, "Price": 66.6, "Address": { "City": "Shanghai", "Street": "Beijin Xi Road" } }, { "Id": 2, "ISBN": "222-2-654-00000-2", "Title": "Linear Algebra", "Author": null, "Price": 53.2, "Address": { "City": "Shanghai", "Street": "Beijin Dong Road" } } ] }

访问https://localhost:5001/odata/Books(1)地址,可得到key值为1的Book数据。

 { "@odata.context": "https://localhost:5001/odata/$metadata#Books/$entity", "Id": 1, "ISBN": "111-0-321-56789-1", "Title": "Calculus", "Author": null, "Price": 66.6, "Address": { "City": "Shanghai", "Street": "Beijin Xi Road" } }

高级查询

如果想要使用OData查询的高级功能,可以在注册终结点时额外加上相应的配置。

 app.UseMvc(b => { b.Select().Expand().Filter().OrderBy().MaxTop(100).Count(); b.MapODataServiceRoute("odata", "odata", GetEdmModel()); });

访问网址时加上所需的查询内容:
https://localhost:5001/odata/Books?$select=Id,Title

 { "@odata.context": "https://localhost:5001/odata/$metadata#Books(Id,Title)", "value": [ { "Id": 1, "Title": "Calculus" }, { "Id": 2, "Title": "Linear Algebra" } ] }

如果想要按特定条件过滤数据内容的话也很容易:
https://localhost:5001/odata/Books?$filter=Price%20le%2060

 { "@odata.context": "https://localhost:5001/odata/$metadata#Books", "value": [ { "Id": 2, "ISBN": "222-2-654-00000-2", "Title": "Linear Algebra", "Author": null, "Price": 53.2, "Address": { "City": "Shanghai", "Street": "Beijin Dong Road" } } ] }

总结

不难看出,OData的真正魅力在于其对那些高级查询功能的支持,所以在创建RESTful API时,不妨考虑使用OData,这样应该能减少许多不必要的代码工作。

以上就是.NET Core开发日志之OData(Open Data Protocol)的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:.NET Core开发日志之OData(Open Data Protocol)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址