Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

LuPaginatedRequestBinder.cs 1.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using System.Threading.Tasks;
  2. using Luticate2.Utils.Dbo.Filter;
  3. using Luticate2.Utils.Dbo.OrderBy;
  4. using Microsoft.AspNetCore.Mvc.ModelBinding;
  5. namespace Luticate2.Utils.Dbo.PaginatedRequest
  6. {
  7. public class LuPaginatedRequestBinder : IModelBinder
  8. {
  9. public Task BindModelAsync(ModelBindingContext bindingContext)
  10. {
  11. var filterValue = bindingContext.ValueProvider.GetValue("filter");
  12. var orderByValue = bindingContext.ValueProvider.GetValue("orderBy");
  13. var pageValue = bindingContext.ValueProvider.GetValue("page");
  14. var perPageValue = bindingContext.ValueProvider.GetValue("perPage");
  15. var filter = LuFilterBinder.FromString(filterValue.FirstValue).ThrowIfNotSuccess();
  16. var orderBy = LuOrderByBinder.FromString(orderByValue.FirstValue).ThrowIfNotSuccess();
  17. var dbo = new LuPaginatedRequestDbo
  18. {
  19. Filter = filter.Data,
  20. OrderBy = orderBy.Data,
  21. Page = pageValue.FirstValue == null ? 0 : int.Parse(pageValue.FirstValue),
  22. PerPage = perPageValue.FirstValue == null ? int.MaxValue : int.Parse(perPageValue.FirstValue)
  23. };
  24. bindingContext.Result = ModelBindingResult.Success(dbo);
  25. return Task.FromResult(0);
  26. }
  27. }
  28. public class LuPaginatedRequestBinderProvider : IModelBinderProvider
  29. {
  30. public IModelBinder GetBinder(ModelBinderProviderContext context)
  31. {
  32. if (context.Metadata.ModelType == typeof(LuPaginatedRequestDbo))
  33. {
  34. return new LuPaginatedRequestBinder();
  35. }
  36. return null;
  37. }
  38. }
  39. }