Always overwrite the VaryBy entry to ensure expiry is updated
This commit is contained in:
parent
d710e44c63
commit
7f638c1385
|
|
@ -201,7 +201,6 @@ namespace Microsoft.AspNetCore.ResponseCaching
|
|||
if (_policyProvider.IsResponseCacheable(context))
|
||||
{
|
||||
context.ShouldCacheResponse = true;
|
||||
context.BaseKey = _keyProvider.CreateBaseKey(context);
|
||||
|
||||
// Create the cache entry now
|
||||
var response = context.HttpContext.Response;
|
||||
|
|
@ -230,10 +229,11 @@ namespace Microsoft.AspNetCore.ResponseCaching
|
|||
Headers = normalizedVaryHeaderValue,
|
||||
Params = normalizedVaryParamsValue
|
||||
};
|
||||
|
||||
_store.Set(context.BaseKey, context.CachedVaryByRules, context.CachedResponseValidFor);
|
||||
}
|
||||
|
||||
// Always overwrite the CachedVaryByRules to update the expiry information
|
||||
_store.Set(context.BaseKey, context.CachedVaryByRules, context.CachedResponseValidFor);
|
||||
|
||||
context.StorageVaryKey = _keyProvider.CreateStorageVaryByKey(context);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -320,7 +320,7 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
|
|||
}
|
||||
|
||||
[Fact]
|
||||
public void FinalizeCacheHeaders_UpdateCachedVaryByRules_IfNotEquivalentToPrevious()
|
||||
public async Task FinalizeCacheHeaders_UpdateCachedVaryByRules_IfNotEquivalentToPrevious()
|
||||
{
|
||||
var store = new TestResponseCacheStore();
|
||||
var middleware = TestUtils.CreateTestMiddleware(store);
|
||||
|
|
@ -336,6 +336,7 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
|
|||
};
|
||||
context.CachedVaryByRules = cachedVaryByRules;
|
||||
|
||||
await middleware.TryServeFromCacheAsync(context);
|
||||
middleware.FinalizeCacheHeaders(context);
|
||||
|
||||
Assert.Equal(1, store.SetCount);
|
||||
|
|
@ -343,7 +344,7 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
|
|||
}
|
||||
|
||||
[Fact]
|
||||
public void FinalizeCacheHeaders_DoNotUpdateCachedVaryByRules_IfEquivalentToPrevious()
|
||||
public async Task FinalizeCacheHeaders_DoNotUpdateCachedVaryByRules_IfEquivalentToPrevious()
|
||||
{
|
||||
var store = new TestResponseCacheStore();
|
||||
var middleware = TestUtils.CreateTestMiddleware(store);
|
||||
|
|
@ -360,9 +361,11 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
|
|||
};
|
||||
context.CachedVaryByRules = cachedVaryByRules;
|
||||
|
||||
await middleware.TryServeFromCacheAsync(context);
|
||||
middleware.FinalizeCacheHeaders(context);
|
||||
|
||||
Assert.Equal(0, store.SetCount);
|
||||
// An update to the cache is always made but the entry should be the same
|
||||
Assert.Equal(1, store.SetCount);
|
||||
Assert.Same(cachedVaryByRules, context.CachedVaryByRules);
|
||||
}
|
||||
|
||||
|
|
@ -411,12 +414,13 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
|
|||
}
|
||||
|
||||
[Fact]
|
||||
public void FinalizeCachingHeaders_SplitsVaryHeaderByCommas()
|
||||
public async Task FinalizeCacheHeaders_SplitsVaryHeaderByCommas()
|
||||
{
|
||||
var middleware = TestUtils.CreateTestMiddleware();
|
||||
var context = TestUtils.CreateTestContext();
|
||||
context.HttpContext.Response.Headers[HeaderNames.Vary] = "HeaderB, heaDera";
|
||||
|
||||
await middleware.TryServeFromCacheAsync(context);
|
||||
middleware.FinalizeCacheHeaders(context);
|
||||
|
||||
Assert.Equal(new StringValues(new[] { "HEADERA", "HEADERB" }), context.CachedVaryByRules.Headers);
|
||||
|
|
|
|||
Loading…
Reference in New Issue