| File: UpgradeFeatureLoggingDecorator.cs | Web Access |
| Project: src\aspnetcore\src\Middleware\HttpLogging\src\Microsoft.AspNetCore.HttpLogging.csproj (Microsoft.AspNetCore.HttpLogging) |
// 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.Features; using Microsoft.Extensions.Logging; namespace Microsoft.AspNetCore.HttpLogging; internal sealed class UpgradeFeatureLoggingDecorator : IHttpUpgradeFeature { private readonly IHttpUpgradeFeature _innerUpgradeFeature; private readonly HttpLoggingInterceptorContext _logContext; private readonly HttpLoggingOptions _options; private readonly IHttpLoggingInterceptor[] _interceptors; private readonly ILogger _logger; private bool _isUpgraded; public UpgradeFeatureLoggingDecorator(IHttpUpgradeFeature innerUpgradeFeature, HttpLoggingInterceptorContext logContext, HttpLoggingOptions options, IHttpLoggingInterceptor[] interceptors, ILogger logger) { _innerUpgradeFeature = innerUpgradeFeature ?? throw new ArgumentNullException(nameof(innerUpgradeFeature)); _logContext = logContext ?? throw new ArgumentNullException(nameof(logContext)); _options = options ?? throw new ArgumentNullException(nameof(options)); _interceptors = interceptors; _logger = logger ?? throw new ArgumentNullException(nameof(logger)); } public bool IsUpgradableRequest => _innerUpgradeFeature.IsUpgradableRequest; public bool IsUpgraded { get => _isUpgraded; } public async Task<Stream> UpgradeAsync() { var upgradeStream = await _innerUpgradeFeature.UpgradeAsync(); _isUpgraded = true; await HttpLoggingMiddleware.LogResponseHeadersAsync(_logContext, _options, _interceptors, _logger); return upgradeStream; } }