关于 ASP.NET Core 中的 OData
1. BooksController
using BooksODataService.Models;
using Microsoft.AspNet.OData;
using Microsoft.AspNet.OData.Query;
using Microsoft.EntityFrameworkCore;
using System.Linq; namespace BooksODataService.Controllers
{
public class BooksController : ODataController
{
private readonly BooksContext _booksContext;
public BooksController(BooksContext booksContext)
{
_booksContext = booksContext;
} [EnableQuery(AllowedQueryOptions = AllowedQueryOptions.All)]
public IQueryable<Book> Get(ODataQueryOptions options)
{
ODataValidationSettings settings = new ODataValidationSettings()
{
MaxExpansionDepth =
};
options.Validate(settings);
var books = _booksContext.Books.Include(b => b.Chapters);
return books;
} [EnableQuery()]
public SingleResult<Book> Get([FromODataUri] int key)
{
return SingleResult.Create(_booksContext.Books.Where(b => b.Id == key));
} } }
2. ChaptersController
using BooksODataService.Models;
using Microsoft.AspNet.OData;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; namespace BooksODataService.Controllers
{
public class ChaptersController : ODataController
{
private readonly BooksContext _booksContext;
public ChaptersController(BooksContext booksContext)
{
_booksContext = booksContext;
} public IQueryable<BookChapter> Get() =>
_booksContext.Chapters.Include(c => c.Book); [EnableQuery]
public SingleResult<BookChapter> Get([FromODataUri] int key) =>
SingleResult.Create(_booksContext.Chapters.Where(c => c.Id == key)); }
}
3. Startup.cs
using BooksODataService.Models;
using BooksODataService.Services;
using Microsoft.AspNet.OData.Builder;
using Microsoft.AspNet.OData.Extensions;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; // OData Beta 1 docu http://odata.github.io/WebApi/#14-01-netcore-beta1 namespace BooksODataService
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddTransient<CreateBooksService>();
services.AddDbContext<BooksContext>(options =>
{
string connString = Configuration.
GetConnectionString("BooksConnection");
options.UseSqlServer(connString);
});
services.AddOData();
}
public void Configure(IApplicationBuilder app,
IHostingEnvironment env, CreateBooksService sampleBooks)
{
sampleBooks.CreateDatabase();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
var builder = new ODataConventionModelBuilder(app.ApplicationServices);
builder.EntitySet<Book>("Books");
builder.EntitySet<BookChapter>("Chapters");
app.UseMvc(routeBuilder =>
{
routeBuilder.MapODataServiceRoute("ODataRoute",
"odata", builder.GetEdmModel());
routeBuilder.EnableDependencyInjection(); // workaround for Beta 1
});
}
}
}
运行截图:



代码下载:https://files.cnblogs.com/files/Music/ODataSample-In-ASPNET-Core.rar
关于 ASP.NET Core 中的 OData的更多相关文章
- ASP.NET Core 中的那些认证中间件及一些重要知识点
前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...
- Asp.net Core中使用Session
前言 2017年就这么悄无声息的开始了,2017年对我来说又是特别重要的一年. 元旦放假在家写了个Asp.net Core验证码登录, 做demo的过程中遇到两个小问题,第一是在Asp.net Cor ...
- 在ASP.NET Core中使用百度在线编辑器UEditor
在ASP.NET Core中使用百度在线编辑器UEditor 0x00 起因 最近需要一个在线编辑器,之前听人说过百度的UEditor不错,去官网下了一个.不过服务端只有ASP.NET版的,如果是为了 ...
- ASP.NET Core中的依赖注入(1):控制反转(IoC)
ASP.NET Core在启动以及后续针对每个请求的处理过程中的各个环节都需要相应的组件提供相应的服务,为了方便对这些组件进行定制,ASP.NET通过定义接口的方式对它们进行了"标准化&qu ...
- ASP.NET Core中的依赖注入(2):依赖注入(DI)
IoC主要体现了这样一种设计思想:通过将一组通用流程的控制从应用转移到框架之中以实现对流程的复用,同时采用"好莱坞原则"是应用程序以被动的方式实现对流程的定制.我们可以采用若干设计 ...
- ASP.NET Core中的依赖注入(3): 服务的注册与提供
在采用了依赖注入的应用中,我们总是直接利用DI容器直接获取所需的服务实例,换句话说,DI容器起到了一个服务提供者的角色,它能够根据我们提供的服务描述信息提供一个可用的服务对象.ASP.NET Core ...
- ASP.NET Core中的依赖注入(4): 构造函数的选择与服务生命周期管理
ServiceProvider最终提供的服务实例都是根据对应的ServiceDescriptor创建的,对于一个具体的ServiceDescriptor对象来说,如果它的ImplementationI ...
- ASP.NET Core 中文文档 第二章 指南(4.6)Controller 方法与视图
原文:Controller methods and views 作者:Rick Anderson 翻译:谢炀(Kiler) 校对:孟帅洋(书缘) .张仁建(第二年.夏) .许登洋(Seay) .姚阿勇 ...
- ASP.NET Core 中文文档 第三章 原理(1)应用程序启动
原文:Application Startup 作者:Steve Smith 翻译:刘怡(AlexLEWIS) 校对:谢炀(kiler398).许登洋(Seay) ASP.NET Core 为你的应用程 ...
随机推荐
- 十ITK读取一张dcm图像然后通过vtk显示
一.功能 通过ITK读取一张图片(dcm格式),然后通过vtk显示出来. 版本:VS2019 itk5.0.1 vtk 8.2.0 二.程序主要思路 1-读取dcm格式图片 2-转换为vtk可以读取的 ...
- doc 如何在指定的位置打印字符和颜色
编程:在屏幕中间分别显示绿色,绿底红色,白底蓝色的字符串weclome to masm! B8000H~BFFFFH共32KB 的空间,为80*25彩色字符模式的显示缓冲区. 在80*25彩色字符模式 ...
- 小程序底部tapbar
app.json "tabBar": { "color": "#ccc", "selectedColor": " ...
- Css 设置固定表格头部,内容可滚动
效果图:
- Go初学乍练 - 安装以及开发环境搭建
本文介绍主要以Windows作为开发系统环境 1.下载SDK 官方下载页:https://golang.org/dl/ 官方下载地址: 地址 类型 https://dl.google.com/go/g ...
- linux远程登入/远程上传文件
一.远程登入 1.安装 Xshell5 2.查看是否具备连接 在linux 主机上输入 chkconfig --list | grep sshd #sshd 0:关闭 1:关闭 2:启用 3:启用 4 ...
- MySQLl存储过程学习总结
1.简介 : 逻辑处理一般不是一条语句组成,需要多条之间相互配合使用 这时,存储过程就是为了以后使用而保存的的一条或多条Mysql语句的集合 2.为何 : 1)简单:将处理单 ...
- JavaScript动态加载script方式引用百度地图API 拓展---JavaScript的Promise
上一篇博客JavaScript动态加载script方式引用百度地图API,Uncaught ReferenceError: BMap is not defined 这篇文章中我接触到一个新的单词:Pr ...
- 基于 Storyboard 多种方式的页面跳转、参数传递
原文 通过按钮关联跳转 选中 Button ,然后点击 action 右边拖拽到 第二个页面 选择 "Show"即可完成跳转关联. 定义页面间 segue Id,通过代码触发跳转 ...
- Undo 相关的等待事件和已知问题 (Doc ID 1575701.1)
Undo Related Wait Events & Known Issues (Doc ID 1575701.1) APPLIES TO: Oracle Database - Enterpr ...