输出缓存是自 .NET 7 以来引入的一项新功能。它使我们能够轻松地为 Web API 设置响应缓存,而无需创建自己的 IMemoryCache 实现。
本文将介绍如何在 ASP .NET Core Web API 项目中实现输出缓存。
首先,我们必须将 OutputCache 添加到 Program.cs 文件中的服务容器中:
builder.Services.AddOutputCache();
接下来,我们还需要添加 OutputCache 中间件:
app.UseOutputCache();
完整的_Program.cs_文件如下:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOutputCache();
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseOutputCache();
app.MapControllers();
app.Run();
要启用输出缓存,我们可以用以下属性修饰操作方法:[OutputCache]
[HttpGet]
[OutputCache]
public async Task<IActionResult> Get(CancellationToken ct)
{
// ...
}
默认情况下,缓存持续时间为 60 秒。要自定义缓存持续时间,我们可以设置 Duration 属性:
[HttpGet]
[OutputCache(Duration = 10)] // 10 seconds cache duration
public async Task<IActionResult> Get(CancellationToken ct)
{
// ...
}
上面的代码会将缓存持续时间设置为 10 秒。
如果我们在 10 秒内再次点击端点,它将拉出缓存的响应,而不是重新运行逻辑。
我们可以通过设置 DefaultExpirationTimeSpan 属性来自定义默认缓存过期时间:
builder.Services.AddOutputCache(opt =>
{
opt.DefaultExpirationTimeSpan = TimeSpan.FromSeconds(30);
});
我们还可以创建一个策略来自定义输出缓存。例如,我们希望将_主数据_终结点的缓存设置为 10 秒,而_将报表_终结点的缓存设置为 60 秒。
builder.Services.AddOutputCache(opt =>
{
opt.DefaultExpirationTimeSpan = TimeSpan.FromSeconds(30);
opt.AddPolicy("MasterData", builder => builder.Expire(TimeSpan.FromSeconds(10)));
opt.AddPolicy("Reports", builder => builder.Expire(TimeSpan.FromSeconds(60)));
});
若要使用该策略,我们可以在 OutputCache 属性中设置 PolicyName 属性:
[HttpGet]
[OutputCache(PolicyName = "Reports")]
public async Task<IActionResult> Get(int year, int month, CancellationToken ct)
{
// ...
}
[HttpGet]
[OutputCache(PolicyName = "MasterData")]
public async Task<IActionResult> Get(CancellationToken ct)
{
// ...
}
源代码获取:公众号回复消息【code:36435
】