2017-09-15 1 views
7

Ich habe ein ASP.NET Core 1.1-Webprojekt.Implementieren des Minimalcontrollers

Ich habe Microsoft.OData.Core installiert und folgte verknüpften "Getting Started" unter http://odata.github.io/.

Sowohl die folgenden Links auf dieser Seite ist für .Net 45

In diesem Monat alt SO answer Links zu Microsoft.AspNetCore.OData, die von Microsoft ist nicht im Besitz und wurde zuletzt vor über einem Jahr aktualisiert.

Diese SO answer bedeutet „OData Unterstützung in ASP.net Kern“

ich diese dritte Partei Lösung sehen AutoODataEF.Core zur automatischen Steuerungen erzeugen jedoch.

Schließlich sehe ich git issue zeigt OData WebAPI für ASP.Net Core ist her kommend, aber letztlich nicht zur Zeit verfügbar.

Angenommen, ich habe ein Personenmodell und einen EF DbContext.

Wie implementiere ich einen minimalen OData Controller?

Antwort

1

OData auf asp.net Kern netcoreapp2.0, 20180216

  1. installieren-Paket Microsoft.AspNetCore.OData -Pre {7.0.0-beta 1}

  2. in 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. in 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; 
        } 
    } 
    
Verwandte Themen