我们旧的 .Net 框架 API 使用 Strathweb.CacheOutput.WebApi2,它负责服务器端缓存并设置适当的客户端标头以实现一种形式的输出缓存。
在该方案中,在项目启动期间注入以下内容以创建缓存键。我们的实现有更多自定义代码附加到密钥中,但这足以开始对话。此方法使用了 RedisOutputCache。
public class CacheKeyWithHeadersGenerator : DefaultCacheKeyGenerator
{
public override string MakeCacheKey(HttpActionContext context, MediaTypeHeaderValue mediaType,
bool excludeQueryString = false)
{
const string itemSeparator = "-";
const string paramSeparator = "=";
var cacheKey = base.MakeCacheKey(context, mediaType, excludeQueryString);
var requestHeader = context.Request.GetHeaders();
cacheKey += $"{itemSeparator}isdr{paramSeparator}{requestHeader.IsDR}";
当我们迁移到 .Net 5 时,需要类似的功能,但我想知道我的选择,因为这似乎并没有太多内容。为了使它起作用,必须覆盖 Authorization 标头的存在的规则。
谁能指出我正确的方向?我应该改用分布式缓存吗?
编辑 1
这个问题可能有点难以理解。我正在尝试使用自定义缓存键在客户端缓存,以包含 .Net 5 Web api 中的 Authorization 标头(如 Strathweb 所做的)中包含的用户 ID 和其他信息。换句话说,除了通过查询发送的内容之外,通过使用自定义缓存键,数据将同时被客户端缓存和服务器缓存。