OData
Trong hướng dẫn này sử dụng OData v4
-
Cài đặt thư viện Microsoft.AspNetCore.OData từ NuGet.
-
Nhấn chuột phải vào thư mục muốn tạo controller OData rồi chọn Add > Controller. Chọn API controller with actions, using Entity Framework để tự động tạo controller OData với các thao tác xem/thêm/xóa/sửa mặc định.
-
Sửa lại controller như sau
using Microsoft.AspNet.OData; /* Sử dụng namespace */ // ------------------- /* Đổi tên route api/ theo ý mình */ [Route("odata/[controller]")] [ApiController] public class ProductsController : ODataController /* Đổi ControllerBase thành ODataController */ { private readonly AdventureWorksContext _context; public ProductsController(AdventureWorksContext context) { _context = context; } // GET: api/Products [HttpGet] [EnableQuery] /* Thêm attribute để có thể sử dụng các cú pháp truy vấn */ public async Task<ActionResult<IEnumerable<Product>>> GetProduct() { return await _context.Product.ToListAsync(); } // GET: api/Products/5 [HttpGet("{id}")] [EnableQuery] /* Thêm attribute để có thể sử dụng các cú pháp truy vấn */ public async Task<ActionResult<Product>> GetProduct(int id) { // ----------------------- } /* */ }
- Sử dụng namespace Microsoft.AspNet.OData.
- Thay đổi lớp được kế thừa từ ControllerBase thành ODataController.
- Thêm attribute [EnableQuery] vào controller xử lý Get để có thể sử dụng các cú pháp truy vấn.
- Đổi route
api/
mặc định của controller OData thêm cài đặt của mình (ví dụ:odata/
)
-
Cấu hình ứng dụng sử dụng các controller OData
public void ConfigureServices(IServiceCollection services) { // ----------------- services.AddOData(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // --------------------- app.UseEndpoints(endpoints => { // ---------------- endpoints.Select().Filter().OrderBy().Expand().Count().MaxTop(50); endpoints.MapODataRoute("odata", "odata", GetEdmModel()); }); } // Thêm phương thức hỗ trợ build các route OData private IEdmModel GetEdmModel() { var builder = new ODataConventionModelBuilder(); builder.EntitySet<Product>("Products"); // Các EntitySet khác return builder.GetEdmModel(); }