【问题标题】:Get items count from OData api从 OData api 获取项目计数
【发布时间】:2020-04-29 14:19:06
【问题描述】:

我正在开发 ASP.NET Core 3.1 项目,我将 OData 用于其余 api。问题是,当我尝试使用以下查询获取集合中项目的计数时:http://someurl?$count=true,OData 会返回一个包含所有项目的数组,而不是计数。我阅读了很多关于 OData 的文章,但没有任何帮助,所以我很困惑。

【问题讨论】:

    标签: asp.net asp.net-core odata


    【解决方案1】:

    这是一个工作演示,你可以参考

    安装包Microsoft.AspNetCore.OData -Version 7.4.0

    模型

     public class Student
    {
    
        public Guid Id { get; set; }
        public string Name { get; set; }
        public int Score { get; set; }
    }
    

    Controller , EnableQuery 属性使端点具有 OData 功能

    [Route("api/[controller]")]
    [ApiController]
    public class StudentsController : ControllerBase
    {
        [HttpGet]
        [EnableQuery()]
        public IEnumerable<Student> Get()
        {
            return new List<Student>
            {
                new Student
                {
                    Id = Guid.NewGuid(),
                    Name = "Vishwa Goli",
                    Score = 100
                },
                new Student
                {
                    Id = Guid.NewGuid(),
                    Name = "Josh McCall",
                    Score = 120
                }
            };
        }
    }
    

    Startup.cs

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers(mvcOptions =>
                mvcOptions.EnableEndpointRouting = false);
    
            services.AddOData();
        }
    
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
    
            app.UseHttpsRedirection();
    
            app.UseRouting();
    
            app.UseAuthorization();
    
            //app.UseEndpoints(endpoints =>
            //{
            //    endpoints.MapControllers();
            //});
            app.UseMvc(routeBuilder =>
            {
               // enable Selection, Expansion, Count, Filter, OrderBy for all routes under “odata/”
                routeBuilder.Expand().Select().Count().OrderBy().Filter();
                routeBuilder.MapODataServiceRoute("odata", "odata", GetEdmModel());
            });
        }
    
        private IEdmModel GetEdmModel()
        {
            var edmBuilder = new ODataConventionModelBuilder();
            edmBuilder.EntitySet<Student>("Students");
    
            return edmBuilder.GetEdmModel();
        }
    

    结果:

    参考:

    https://devblogs.microsoft.com/odata/experimenting-with-odata-in-asp-net-core-3-1/

    https://medium.com/@sddkal/using-odata-controller-in-net-core-apis-63b688585eaf

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多