| File: ResponseCachingContext.cs | Web Access |
| Project: src\aspnetcore\src\Middleware\ResponseCaching\src\Microsoft.AspNetCore.ResponseCaching.csproj (Microsoft.AspNetCore.ResponseCaching) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #nullable disable using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; using Microsoft.Net.Http.Headers; namespace Microsoft.AspNetCore.ResponseCaching; internal sealed class ResponseCachingContext { private DateTimeOffset? _responseDate; private bool _parsedResponseDate; private DateTimeOffset? _responseExpires; private bool _parsedResponseExpires; private TimeSpan? _responseSharedMaxAge; private bool _parsedResponseSharedMaxAge; private TimeSpan? _responseMaxAge; private bool _parsedResponseMaxAge; internal ResponseCachingContext(HttpContext httpContext, ILogger logger) { HttpContext = httpContext; Logger = logger; } public HttpContext HttpContext { get; } public DateTimeOffset? ResponseTime { get; internal set; } public TimeSpan? CachedEntryAge { get; internal set; } public CachedVaryByRules CachedVaryByRules { get; set; } internal ILogger Logger { get; } internal bool ShouldCacheResponse { get; set; } internal string BaseKey { get; set; } internal string StorageVaryKey { get; set; } internal TimeSpan CachedResponseValidFor { get; set; } internal CachedResponse CachedResponse { get; set; } internal bool ResponseStarted { get; set; } internal Stream OriginalResponseStream { get; set; } internal ResponseCachingStream ResponseCachingStream { get; set; } internal IHeaderDictionary CachedResponseHeaders { get; set; } internal DateTimeOffset? ResponseDate { get { if (!_parsedResponseDate) { _parsedResponseDate = true; DateTimeOffset date; if (HeaderUtilities.TryParseDate(HttpContext.Response.Headers.Date.ToString(), out date)) { _responseDate = date; } else { _responseDate = null; } } return _responseDate; } set { // Don't reparse the response date again if it's explicitly set _parsedResponseDate = true; _responseDate = value; } } internal DateTimeOffset? ResponseExpires { get { if (!_parsedResponseExpires) { _parsedResponseExpires = true; DateTimeOffset expires; if (HeaderUtilities.TryParseDate(HttpContext.Response.Headers.Expires.ToString(), out expires)) { _responseExpires = expires; } else { _responseExpires = null; } } return _responseExpires; } } internal TimeSpan? ResponseSharedMaxAge { get { if (!_parsedResponseSharedMaxAge) { _parsedResponseSharedMaxAge = true; HeaderUtilities.TryParseSeconds(HttpContext.Response.Headers.CacheControl, CacheControlHeaderValue.SharedMaxAgeString, out _responseSharedMaxAge); } return _responseSharedMaxAge; } } internal TimeSpan? ResponseMaxAge { get { if (!_parsedResponseMaxAge) { _parsedResponseMaxAge = true; HeaderUtilities.TryParseSeconds(HttpContext.Response.Headers.CacheControl, CacheControlHeaderValue.MaxAgeString, out _responseMaxAge); } return _responseMaxAge; } } }