OData v4 api攻略

附上OData的官网地址:https://www.odata.org/

OData的介绍参考地址:

微软文档介绍OData

https://www.cnblogs.com/darrenji/p/4926011.html

https://www.cnblogs.com/1zhk/p/5356053.html 

https://stackoverflow.com/questions/39515218/odata-error-the-query-specified-in-the-uri-is-not-valid-the-property-cannot-be

详情请看上面的介绍地址,我主要记录记录所遇到的坑,以及如解决。

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。

源码下载:

源码下载地址

原文地址:https://www.cnblogs.com/cqxhl/p/12993306.html