diff --git a/Controllers/AutoController.cs b/Controllers/AutoController.cs index 0f99023..04372bf 100644 --- a/Controllers/AutoController.cs +++ b/Controllers/AutoController.cs @@ -158,9 +158,9 @@ namespace NejCommon.Controllers return query; } - protected virtual Task> ApplyPagination(IQueryable query, Pagination pag) + protected virtual Task> ApplyPagination(IQueryable query, Pagination pag, CancellationToken cancellationToken = default) { - return query.ApplyPaginationRes(providers, pag); + return query.ApplyPaginationRes(providers, pag, cancellationToken: cancellationToken); } /// @@ -169,9 +169,9 @@ namespace NejCommon.Controllers /// Success /// There was an error [HttpGet] - public virtual async Task, Ok>>> GetAll([FromServices] TOwner company, [FromQuery] Pagination pag) + public virtual async Task, Ok>>> GetAll([FromServices] TOwner company, [FromQuery] Pagination pag, CancellationToken cancellationToken) { - var data = await ApplyPagination(ApplyDefaultOrdering(GetQuery(company)).AsNoTrackingWithIdentityResolution(), pag); + var data = await ApplyPagination(ApplyDefaultOrdering(GetQuery(company)).AsNoTrackingWithIdentityResolution(), pag, cancellationToken); //Console.Writeline(data.Data); diff --git a/Models/Api/ModelBinder.cs b/Models/Api/ModelBinder.cs index 88b5012..c00933e 100644 --- a/Models/Api/ModelBinder.cs +++ b/Models/Api/ModelBinder.cs @@ -81,6 +81,8 @@ namespace NejCommon.Models { throw new ArgumentNullException(nameof(bindingContext)); } + var cancellationToken = bindingContext.HttpContext.RequestAborted; + cancellationToken.ThrowIfCancellationRequested(); //get the binding parameter attributes @@ -133,7 +135,7 @@ namespace NejCommon.Models query = query.Where(compiledExp); } - var model = await query.FirstOrDefaultAsync(); + var model = await query.FirstOrDefaultAsync(cancellationToken); if (model == null) { diff --git a/Utils/Extensions.cs b/Utils/Extensions.cs index 6ecf2ab..f9a6a77 100644 --- a/Utils/Extensions.cs +++ b/Utils/Extensions.cs @@ -17,9 +17,9 @@ public static class Extensions query = query.Take(pag.Count); return query; } - public static async Task> ApplyPaginationRes(this IQueryable query, IServiceProvider providers, Pagination pag, Expression>? projector = null) where TResponseType : IAutomappedAttribute, new() + public static async Task> ApplyPaginationRes(this IQueryable query, IServiceProvider providers, Pagination pag, Expression>? projector = null, CancellationToken cancellationToken = default) where TResponseType : IAutomappedAttribute, new() { - var totalCount = await query.CountAsync(); + var totalCount = await query.CountAsync(cancellationToken); query = query.Skip(pag.Offset); query = query.Take(pag.Count); @@ -35,7 +35,7 @@ public static class Extensions }; } - public static async Task> ApplySearchPaginationRes(this IQueryable query, string? search, IServiceProvider providers, Pagination pag, List>> matchers, Expression>? projector = null) + public static async Task> ApplySearchPaginationRes(this IQueryable query, string? search, IServiceProvider providers, Pagination pag, List>> matchers, Expression>? projector = null, CancellationToken cancellationToken = default) where TType : class where TResponseType : IAutomappedAttribute, new() where TEntityBinder : EntityBinder @@ -90,7 +90,7 @@ public static class Extensions } } - return await query.ApplyPaginationRes(providers, pag, projector); + return await query.ApplyPaginationRes(providers, pag, projector, cancellationToken); } [Projectable]