2017-09-15 59 views
7

ASP.NET Core 1.1 Web Project'im var.Minimal Denetleyici Nasıl Uygulanır

Microsoft.OData.Core'u yükledim ve http://odata.github.io/'un altında "Başlarken" bağlantısına bağlandım.

o sayfada aşağıdaki Linkler Hem .Net 45

Bu aylık SO answer bağlantılar Microsoft tarafından sahip olunan DEĞİLDİR hangi ve son bir yıl önce güncellendi. Bu SO answer

Ben ancak denetleyicileri oluşturmak oto için bu üçüncü taraf çözümü AutoODataEF.Core bkz "ASP.net çekirdek OData Destek"

ima eder.

Son olarak, bunun göründüğünü görüyorum, git issue, ASP.Net için OData WebAPI'yi gösteriyor Çekirdek ileri geliyor, ancak şu anda mevcut değil.

Bir Kişi Modeline ve bir EF DbContext'e sahip olduğumu varsayarsak.

En az bir OData Denetleyicisini nasıl uygularım?

cevap

1

asp.net çekirdek netcoreapp2.0 ile OData, 20180216

  1. gerekmektedir paket Microsoft.AspNetCore.OData -Ön {7.0.0-beta1}

    Startup.cs içinde
  2. : SomeClassController.cs içinde

    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 
        });  
    } 
    
  3. :

    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; 
        } 
    }