附上OData的官网地址:https://www.odata.org/
OData的介绍参考地址:
https://www.cnblogs.com/darrenji/p/4926011.html
https://www.cnblogs.com/1zhk/p/5356053.html
详情请看上面的介绍地址,我主要记录记录所遇到的坑,以及如解决。
1、创建WEBAPI项目,不用多说
2、Nuget添加Odata
运行命令:Install-Package Microsoft.AspNet.Odata 。自动添加最新版本
3、添加EntityFramwork
运行命令:Install-Package EntityFramework 。自动添加最新版本 (本人使用的静态定义数据)
4、配置路由
public static void Register(HttpConfiguration config)
{
// Web API 配置和服务
// Web API 路由
config.MapHttpAttributeRoutes();
ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Product>("Products");
config.MapODataServiceRoute(
routeName: "OData",
routePrefix: "odata",
model: builder.GetEdmModel());
//config.Routes.MapHttpRoute(
// name: "DefaultApi",
// routeTemplate: "api/{controller}/{id}",
// defaults: new { id = RouteParameter.Optional }
//);
}
5、添加控制器
会自动创建CRUD方法。接下来测试Odata方法。
6、测试Odata API
出现问题:
这个问题我查阅资料,使用过[EnableQuery]属性中添加配置,AllowedArithmeticOperators = AllowedArithmeticOperators.Add,但是经过测试还是不行。
说明一下,使用过时的[Queryable]属性和在config中配置config.EnableQuerySupport()方法可以成功。但是[Queryable]仅支持 $filter、$orderby、$top 和 $skip。
最终在stackoverflow上找到解决方案。在配置中添加api方法config.Count().Filter().OrderBy().Expand().Select().MaxTop(null)。
在Odata扩展方法中:
最后测试结果:
其他api测试照样成功,这里就不一一截图了。经过一天的折腾终于完成了Odata的简单DEMO。
源码下载: