2017-09-15 33 views
7

Mam projekt sieci Web ASP.NET Core 1.1.Jak wdrożyć kontroler minimalny

Zainstalowałem Microsoft.OData.Core i zainstalowałem "Pierwsze kroki" pod numerem http://odata.github.io/.

Oba poniższe linki na tej stronie są dla .Net 45

Ten miesięczne SO answer linki do Microsoft.AspNetCore.OData który nie jest własnością firmy Microsoft i był ostatnio aktualizowany ponad rok temu.

Ten SO answer zakłada "OData Wsparcie w ASP.NET Core"

widzę to trzecie rozwiązanie partii AutoODataEF.Core do automatycznego generowania kontrolerów jednak.

Wreszcie widzę, że to git issue wskazuje, że ODATA WebAPI dla ASP.Net Core jest już dostępny, ale ostatecznie nie jest obecnie dostępny.

Zakładając, że mam model osoby i kontekst Db EF.

Jak mogę wdrożyć minimalny kontroler OData?

Odpowiedz

1

OData na podstawowej asp.net netcoreapp2.0, 20180216

  1. instalacji przetwarzającymi Microsoft.AspNetCore.OData -Pre {7.0.0-b1}

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