先使用 NuGet 安裝 Sieve 套件,或是使用 .NET CLI 執行以下指令安裝:
在 Program.cs 中註冊服務:
假設我們有 User 這個類別:
我們可以建立 UserFilter ,用來儲存 User API 的過濾條件,需要繼承 SieveModel
在 API 的查詢參數中放入 UserFilter ,就可以達成分頁的功能:
在 SwaggerUI 介面上就可以看到多了查詢參數,可以使用 Page 代表第幾頁, PageSize 代表每頁數量。就可以達成自動分頁功能:
過濾範例:
Id=3 (屬性有區分大小寫)
這裡的等於需要使用「==」,其他條件可以直接查看官方範例
Id 遞增排序:
Id 遞減排序:
假設要過濾又要排序可以這樣寫:
參考資料:
github - Biarity/Sieve
dotnet add package Sieve
在 Program.cs 中註冊服務:
using Sieve.Services;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddScoped<ISieveProcessor, SieveProcessor>();
var app = builder.Build();
假設我們有 User 這個類別:
public class User
{
public int Id { get; set; }
public string Name { get; set; }
}
我們可以建立 UserFilter ,用來儲存 User API 的過濾條件,需要繼承 SieveModel
public class UserFilter : SieveModel
{
}
在 API 的查詢參數中放入 UserFilter ,就可以達成分頁的功能:
[ApiController]
[Route("[controller]")]
public class UserController : ControllerBase
{
private readonly ISieveProcessor _sieveProcessor;
public UserController(ISieveProcessor sieveProcessor)
{
_sieveProcessor = sieveProcessor;
}
[HttpGet]
public IActionResult Get([FromQuery] UserFilter filter)
{
var users = new List<User>
{
new User { Id = 1, Name = "小明", },
new User { Id = 2, Name = "大頭", },
new User { Id = 3, Name = "老王", },
}.AsQueryable();
var result = _sieveProcessor.Apply(filter, users)
.ToList();
return Ok(result);
}
}
在 SwaggerUI 介面上就可以看到多了查詢參數,可以使用 Page 代表第幾頁, PageSize 代表每頁數量。就可以達成自動分頁功能:
過濾
要過濾/篩選的話只要在 User 上面增加 Sieve Attribute,將 CanFilter 設定為 true,就可以過濾了:
public class User
{
[Sieve(CanFilter = true)]
public int Id { get; set; }
public string Name { get; set; }
}
過濾範例:
Id=3 (屬性有區分大小寫)
/User?Filters=Id==3
這裡的等於需要使用「==」,其他條件可以直接查看官方範例
排序
排序也是只要在 User 上面增加 Sieve Attribute,將 CanSort 設定為 true,就可以排序了:
public class User
{
[Sieve(CanSort = true)]
public int Id { get; set; }
public string Name { get; set; }
}
Id 遞增排序:
/User?Sorts=Id
Id 遞減排序:
/User?Sorts=-Id
假設要過濾又要排序可以這樣寫:
public class User
{
[Sieve(CanFilter = true, CanSort = true)]
public int Id { get; set; }
public string Name { get; set; }
}
參考資料:
github - Biarity/Sieve
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com