我有一个ASP.NET Core 1.1 Web项目。
我已经安装了Microsoft.OData.Core,并在http://odata.github.io/下点了“使用入门”。
该页面上的以下链接均适用于.Net 45
这个月SO answer个Microsoft.AspNetCore.OData链接到SO answer,该链接不归Microsoft所有,最近一年前更新过。
这AutoODataEF.Core暗示“ASP.net核心中的OData支持”
我看到这个第三方解决方案git issue可以自动生成控制器。
最后,我看到这个script query表示ASP.Net Core的OData WebAPI即将推出,但最终目前无法使用。
假设我有一个人物模型和一个EF DbContext。
如何实现最小的OData控制器?
答案 0 :(得分:1)
od.net on asp.net core netcoreapp2.0,20180216
install-package Microsoft.AspNetCore.OData -Pre {7.0.0-beta1}
:
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
});
}
:
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;
}
}