File: OutputCacheContext.cs
Web Access
Project: src\src\Middleware\OutputCaching\src\Microsoft.AspNetCore.OutputCaching.csproj (Microsoft.AspNetCore.OutputCaching)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using Microsoft.AspNetCore.Http;
 
namespace Microsoft.AspNetCore.OutputCaching;
 
/// <summary>
/// Represent the current cache context for the request.
/// </summary>
public sealed class OutputCacheContext
{
    /// <summary>
    /// Constructs a new instance of <see cref="OutputCacheContext"/>.
    /// </summary>
    public OutputCacheContext()
    {
    }
 
    /// <summary>
    /// Determines whether the output caching logic should be configured for the incoming HTTP request.
    /// </summary>
    public bool EnableOutputCaching { get; set; }
 
    /// <summary>
    /// Determines whether a cache lookup is allowed for the incoming HTTP request.
    /// </summary>
    public bool AllowCacheLookup { get; set; }
 
    /// <summary>
    /// Determines whether storage of the response is allowed for the incoming HTTP request.
    /// </summary>
    public bool AllowCacheStorage { get; set; }
 
    /// <summary>
    /// Determines whether the request should be locked.
    /// </summary>
    public bool AllowLocking { get; set; }
 
    /// <summary>
    /// Gets the <see cref="HttpContext"/>.
    /// </summary>
    public required HttpContext HttpContext { get; init; }
 
    /// <summary>
    /// Gets or sets the response time.
    /// </summary>
    public DateTimeOffset? ResponseTime { get; set; }
 
    /// <summary>
    /// Gets the <see cref="CacheVaryByRules"/> instance.
    /// </summary>
    public CacheVaryByRules CacheVaryByRules { get; } = new();
 
    /// <summary>
    /// Gets the tags of the cached response.
    /// </summary>
    public HashSet<string> Tags { get; } = new();
 
    /// <summary>
    /// Gets or sets the amount of time the response should be cached for.
    /// </summary>
    public TimeSpan? ResponseExpirationTimeSpan { get; set; }
 
    internal string CacheKey { get; set; } = default!;
 
    internal TimeSpan CachedResponseValidFor { get; set; }
 
    internal bool IsCacheEntryFresh { get; set; }
 
    internal TimeSpan CachedEntryAge { get; set; }
 
    internal OutputCacheEntry? CachedResponse { get; set; }
 
    internal void ReleaseCachedResponse()
    {
        var tmp = CachedResponse;
        CachedResponse = null;
        tmp?.Dispose();
    }
 
    internal bool ResponseStarted { get; set; }
 
    internal Stream OriginalResponseStream { get; set; } = default!;
 
    internal OutputCacheStream OutputCacheStream { get; set; } = default!;
}