我想創建一個新的ASP.NET Core項目,使用OData和EntityFramework的「簡單」web api。我以前在舊版本的ASP.NET中使用過OData。如何正確整合OData與ASP.net核心
我已經建立了一個只有一個簡單的get函數的控制器。我設法使用基本的OData命令作爲過濾器和頂層,但我無法使擴展命令工作。我想這是因爲我無法弄清楚如何在Startup.cs中設置它。我已經嘗試了很多事情,包括以下從GitHub一些OData的樣本:
https://github.com/OData/WebApi/tree/vNext/vNext/samples/ODataSample.Web https://github.com/bigfont/WebApi/tree/master/vNext/samples/ODataSample.Web
在我的啓動文件,我嘗試排除其中有沒有效果,在所有服務類的一些屬性。所以問題可能在於我使用IDataService接口的方式。 (ApplicationContext在樣本中實現它)
要清楚我正在創建一個帶有完整.NET Framework的ASP.NET Core web api,而不僅僅是.Core框架。我目前的代碼是兩種樣本中最好/最差的混合,我可以過濾WebAPI但無法擴展或隱藏屬性。
任何人都可以看到我失蹤的og有一個ASP.NET Odata示例。我是startup.cs中的整個設置的新手?猜猜我正在找人做這項工作。
控制器
[EnableQuery]
[Route("odata/Services")]
public class ServicesController : Controller
{
private IGenericRepository<Service> _serviceRepo;
private IUnitOfWork _unitOfWork;
public ServicesController(IGenericRepository<Service> serviceRepo, IUnitOfWork unitOfWork)
{
_serviceRepo = serviceRepo;
_unitOfWork = unitOfWork;
}
[HttpGet]
public IQueryable<Service> Get()
{
var services = _serviceRepo.AsQueryable();
return services;
}
}
啓動
using Core.DomainModel;
using Core.DomainServices;
using Infrastructure.DataAccess;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Configuration;
using Microsoft.AspNetCore.OData.Extensions;
namespace Web
{
public class Startup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
if (env.IsDevelopment())
{
// This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately.
builder.AddApplicationInsightsSettings(developerMode: true);
}
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddApplicationInsightsTelemetry(Configuration);
services.AddMvc().AddWebApiConventions();
services.AddSingleton<ApplicationContext>(_ => ApplicationContext.Create());
services.AddSingleton<IDataService, ApplicationContext>();
services.AddOData<IDataService>(builder =>
{
//builder.EnableLowerCamelCase();
var service = builder.EntitySet<Service>("Services");
service.EntityType.RemoveProperty(x => x.CategoryId);
service.EntityType.RemoveProperty(x => x.PreRequisiteses);
});
services.AddSingleton<IGenericRepository<Service>, GenericRepository<Service>>();
services.AddSingleton<IUnitOfWork, UnitOfWork>();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
//ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
app.UseApplicationInsightsRequestTelemetry();
//var builder = new ODataConventionModelBuilder(app.ApplicationServices.GetRequiredService<AssembliesResolver>());
//var serviceCtrl = nameof(ServicesController).Replace("Controller", string.Empty);
//var service = builder.EntitySet<Service>(serviceCtrl);
//service.EntityType.RemoveProperty(x => x.CategoryId);
app.UseOData("odata");
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseApplicationInsightsExceptionTelemetry();
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
}
Project.json依賴性
"dependencies": {
"Microsoft.ApplicationInsights.AspNetCore": "1.0.2",
"Microsoft.AspNet.Identity.EntityFramework": "2.2.1",
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
"Microsoft.AspNetCore.Identity": "1.0.0",
"Microsoft.AspNetCore.Mvc": "1.0.1",
"Microsoft.AspNetCore.Razor.Tools": {
"version": "1.0.0-preview2-final",
"type": "build"
},
"Microsoft.AspNetCore.Routing": "1.0.1",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
"Microsoft.AspNetCore.StaticFiles": "1.0.0",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",
"Microsoft.Extensions.Logging": "1.0.0",
"Microsoft.Extensions.Logging.Console": "1.0.0",
"Microsoft.Extensions.Logging.Debug": "1.0.0",
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
"Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0",
"Microsoft.AspNetCore.OData": "1.0.0-rtm-00015",
"dnx-clr-win-x86": "1.0.0-rc1-update2",
"Microsoft.OData.Core": "7.0.0",
"Microsoft.OData.Edm": "7.0.0",
"Microsoft.Spatial": "7.0.0"
@l - '''''' - '''''''''''',嘗試使用https://github.com/voronov-格言/ OdataToEntity女巫有容器作爲客戶端,展開,選擇和其他 – itikhomi