我有一个ASP.NET Core 1.1 Web项目。

我已经安装了Microsoft.OData.Core,然后在http://odata.github.io/下链接了“入门”。

该页面上的以下两个链接均适用于.Net 45

  • Build an OData v4 Service with RESTier Library
  • Build an OData v4 Service with OData WebApi Library

  • 这个月的SO answer链接到Microsoft.AspNetCore.OData,它不是Microsoft拥有的,并且在一年多以前进行了更新。

    SO answer暗示“ASP.net核心中的OData支持”

    我看到这个第三方解决方案AutoODataEF.Core自动生成 Controller 。

    最后,我看到此git issue表示即将推出用于ASP.Net Core的OData WebAPI,但最终目前尚不可用。

    假设我有一个Person模型和一个EF DbContext。

    如何实现最小的OData Controller ?

    最佳答案

    asp.net核心上的odata netcoreapp2.0,20180216

  • 安装软件包Microsoft.AspNetCore.OData -Pre {7.0.0-beta1}
  • Startup.cs中的
  • :

    public virtual void ConfigureServices(IServiceCollection services)
    {
        // ...
        services.AddMvc(); // mvc first
        services.AddOData(); // odata second
    }
    
    public virtual void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        // ...
        var builder = new ODataConventionModelBuilder(serviceProvider);
        builder.EntitySet<SomeClass>(nameof(SomeClass).ToLower()).EntityType.HasKey(s => s.SomeId);
        builder.EntitySet<OtherClass>(nameof(OtherClass).ToLower()).EntityType.HasKey(s => s.OtherId).MediaType();   // etc
        var model = builder.GetEdmModel();
    
        app.UseMvc(routeBuilder =>
        {
            routeBuilder.Select().Expand().Filter().OrderBy().MaxTop(null).Count();
            routeBuilder.MapODataServiceRoute("ODataRoute", "data", model); // e.g. http://localhost:port/data/someclass?...
            // insert special bits for e.g. custom MLE here
            routeBuilder.EnableDependencyInjection();
            routeBuilder.MapRoute(name: "default", template: "{controller=Home}/{action=Index}/{id?}"); // enable mvc controllers
        });
    }
    
  • SomeClassController.cs中的
  • :

    public class SomeClassController : ODataController // or just plain Controller
    {
        [EnableQuery]
        [HttpGet]
        [ODataRoute("someclass")]
        public List<SomeClass> Get() // this should maybe be an IQueryable wrapped by an IActionResult/OkObjectResult
        {
            List<SomeClass> list = new List<SomeClass>();
            // however you do this
            return list;
        }
    }
    
  • 关于asp.net-core - 如何实现最小 Controller ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46242175/

    10-16 10:03