在ASP.NET Core Web API中创建返回OData的端点

4

我正在尝试在ASP.NET Core Web API中创建OData端点。

我使用模板创建了一个新的ASP.NET Core Web API,并添加了Microsoft.AspNetCore.OData包(v7.0.0-beta1),认为这是必需的。

我找不到任何关于如何入门的文档。如果有人能告诉我如何将默认的ValuesController简单地更改为返回OData而不是Json,那就太好了。

1个回答

4
我使用模板创建了一个新的ASP.NET Core Web API,并添加了Microsoft.AspNetCore.OData包(v7.0.0-beta1),认为这是必需的。但我找不到任何关于如何入门的文档。如果有人能告诉我如何将默认的ValuesController更改为返回OData而不是Json,那就太好了。
根据您的描述,我建议您按照以下步骤创建net core odata web api。
1.安装Microsoft.AspNetCore.OData 7.0.0-beta1
2.安装Microsoft.EntityFrameworkCore 3.创建一个模型类和DBContext类。
public class Person
{
    [Key]
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    [Required]
    public int Age { get; set; }
}

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext(DbContextOptions options)
        : base(options)
    {
    }


    public DbSet<Person> Persons { get; set; }

}

4.创建一个控制器,在早期版本的OData中,您可以从ODataController继承。但在ASP.NET Core中,没有可用的OData控制器。因此,您需要创建一个带有OData属性的普通控制器。

public class PersonController : Controller
{
    private readonly ApplicationDbContext _appDbContext;
    public PersonController(ApplicationDbContext sampleODataDbContext)
    {
        _appDbContext = sampleODataDbContext;
    }

    [EnableQuery]
    public IActionResult Get()
    {
        return Ok(_appDbContext.Persons.AsQueryable());
    }
}

5. 修改启动类代码以添加OData中间件和OData路由。

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
        services.AddOData();
        services.AddMvc();

    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        //Adding Model class to OData
        var builder = GetEdmModel(app.ApplicationServices);
        builder.EntitySet<Person>(nameof(Person));

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseMvc((routebuilder =>
        {
            routebuilder.MapODataServiceRoute("odata","odata", builder.GetEdmModel());
        }));
    }

    private static ODataConventionModelBuilder GetEdmModel(IServiceProvider serviceProvider)
    {
        var builder = new ODataConventionModelBuilder(serviceProvider);
       
      return builder;
    }
}

6. 打开包管理器控制台以创建表:Add-Migration InitialCreate update-database

7. 运行应用程序

结果:

enter image description here


1
谢谢!这个需要使用Entity Framework才能工作吗?假设我想使用Dapper或另一个ORM来访问我的数据。 - Blake Rivell
和@BlakeRivell一样,我也遇到了同样的问题,我正在尝试使用dapper来处理OData。这是可能的吗?我能否编写自己的数据访问逻辑? - Faraj Farook

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接