2017-09-15 19 views
7

Tôi có một Dự án Web ASP.NET Core 1.1.Cách triển khai Bộ điều khiển Tối thiểu

Tôi đã cài đặt Microsoft.OData.Core và được theo dõi liên kết "Bắt đầu" theo http://odata.github.io/.

Cả Liên kết sau đây trên trang đó là dành cho Net 45

tháng này cũ SO answer liên kết đến Microsoft.AspNetCore.OData đó là không thuộc sở hữu của Microsoft và được cập nhật lần cuối hơn một năm trước.

này SO answer ngụ ý "OData Hỗ trợ trong ASP.net cốt lõi"

Tôi thấy giải pháp này của bên thứ ba AutoODataEF.Core để tự động tạo ra bộ điều khiển tuy nhiên.

Cuối cùng, tôi thấy điều này git issue cho biết OData WebAPI cho ASP.Net Core sắp ra mắt, nhưng cuối cùng hiện không khả dụng.

Giả sử tôi có Mô hình người và EF DbContext.

Làm cách nào để triển khai Bộ điều khiển OData tối thiểu?

Trả lời

1

OData trên netcoreapp2.0 asp.net lõi, 20180216

  1. cài đặt gói Microsoft.AspNetCore.OData -Pre {7.0.0-beta1}

  2. trong 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. trong 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; 
        } 
    } 
    
Các vấn đề liên quan