From 0a372ece7d253d8fdeff3f835a11a6a117a826b2 Mon Sep 17 00:00:00 2001 From: Taylor Southwick Date: Tue, 23 Aug 2022 16:13:39 -0700 Subject: [PATCH] Rename IHttpRequestAdapterFeature->IHttpResponseAdapterFeature This feature is to expose additional functionality for the response and is misnamed. --- .../BufferResponseStreamMiddleware.cs | 6 +++--- ...eature.cs => HttpResponseAdapterFeature.cs} | 14 +++++++------- .../Mvc/ResponseEndFilter.cs | 2 +- ...ature.cs => IHttpResponseAdapterFeature.cs} | 2 +- .../HttpResponse.cs | 6 +++--- .../HttpResponseTests.cs | 18 +++++++++--------- 6 files changed, 24 insertions(+), 24 deletions(-) rename src/Microsoft.AspNetCore.SystemWebAdapters.CoreServices/{HttpRequestAdapterFeature.cs => HttpResponseAdapterFeature.cs} (89%) rename src/Microsoft.AspNetCore.SystemWebAdapters/Adapters/{IHttpRequestAdapterFeature.cs => IHttpResponseAdapterFeature.cs} (88%) diff --git a/src/Microsoft.AspNetCore.SystemWebAdapters.CoreServices/BufferResponseStreamMiddleware.cs b/src/Microsoft.AspNetCore.SystemWebAdapters.CoreServices/BufferResponseStreamMiddleware.cs index 4686ecb217..4033348e69 100644 --- a/src/Microsoft.AspNetCore.SystemWebAdapters.CoreServices/BufferResponseStreamMiddleware.cs +++ b/src/Microsoft.AspNetCore.SystemWebAdapters.CoreServices/BufferResponseStreamMiddleware.cs @@ -33,10 +33,10 @@ private async Task BufferResponseStreamAsync(HttpContextCore context, BufferResp var responseBodyFeature = context.Features.GetRequired(); - await using var bufferedFeature = new HttpRequestAdapterFeature(responseBodyFeature, metadata); + await using var bufferedFeature = new HttpResponseAdapterFeature(responseBodyFeature, metadata); context.Features.Set(bufferedFeature); - context.Features.Set(bufferedFeature); + context.Features.Set(bufferedFeature); try { @@ -46,7 +46,7 @@ private async Task BufferResponseStreamAsync(HttpContextCore context, BufferResp finally { context.Features.Set(responseBodyFeature); - context.Features.Set(null); + context.Features.Set(null); } } } diff --git a/src/Microsoft.AspNetCore.SystemWebAdapters.CoreServices/HttpRequestAdapterFeature.cs b/src/Microsoft.AspNetCore.SystemWebAdapters.CoreServices/HttpResponseAdapterFeature.cs similarity index 89% rename from src/Microsoft.AspNetCore.SystemWebAdapters.CoreServices/HttpRequestAdapterFeature.cs rename to src/Microsoft.AspNetCore.SystemWebAdapters.CoreServices/HttpResponseAdapterFeature.cs index 9f31c58703..0f2e6ed9ea 100644 --- a/src/Microsoft.AspNetCore.SystemWebAdapters.CoreServices/HttpRequestAdapterFeature.cs +++ b/src/Microsoft.AspNetCore.SystemWebAdapters.CoreServices/HttpResponseAdapterFeature.cs @@ -13,7 +13,7 @@ namespace Microsoft.AspNetCore.SystemWebAdapters; /// -/// This feature implements the to expose functionality for the adapters. As part of that, +/// This feature implements the to expose functionality for the adapters. As part of that, /// it overrides the following features as well: /// /// @@ -22,7 +22,7 @@ namespace Microsoft.AspNetCore.SystemWebAdapters; /// /// /// -internal class HttpRequestAdapterFeature : Stream, IHttpResponseBodyFeature, IHttpRequestAdapterFeature +internal class HttpResponseAdapterFeature : Stream, IHttpResponseBodyFeature, IHttpResponseAdapterFeature { private enum StreamState { @@ -40,7 +40,7 @@ private enum StreamState private bool _suppressContent; private StreamState _state; - public HttpRequestAdapterFeature(IHttpResponseBodyFeature httpResponseBody, BufferResponseStreamAttribute metadata) + public HttpResponseAdapterFeature(IHttpResponseBodyFeature httpResponseBody, BufferResponseStreamAttribute metadata) { _responseBodyFeature = httpResponseBody; _metadata = metadata; @@ -73,17 +73,17 @@ Task IHttpResponseBodyFeature.StartAsync(CancellationToken cancellationToken) PipeWriter IHttpResponseBodyFeature.Writer => _pipeWriter ??= PipeWriter.Create(this, new StreamPipeWriterOptions(leaveOpen: true)); - bool IHttpRequestAdapterFeature.SuppressContent + bool IHttpResponseAdapterFeature.SuppressContent { get => _suppressContent; set => _suppressContent = value; } - Task IHttpRequestAdapterFeature.EndAsync() => CompleteAsync(); + Task IHttpResponseAdapterFeature.EndAsync() => CompleteAsync(); - bool IHttpRequestAdapterFeature.IsEnded => _state == StreamState.Complete; + bool IHttpResponseAdapterFeature.IsEnded => _state == StreamState.Complete; - void IHttpRequestAdapterFeature.ClearContent() + void IHttpResponseAdapterFeature.ClearContent() { if (_bufferedStream is not null) { diff --git a/src/Microsoft.AspNetCore.SystemWebAdapters.CoreServices/Mvc/ResponseEndFilter.cs b/src/Microsoft.AspNetCore.SystemWebAdapters.CoreServices/Mvc/ResponseEndFilter.cs index 0a0c1698f0..e4d6545bb0 100644 --- a/src/Microsoft.AspNetCore.SystemWebAdapters.CoreServices/Mvc/ResponseEndFilter.cs +++ b/src/Microsoft.AspNetCore.SystemWebAdapters.CoreServices/Mvc/ResponseEndFilter.cs @@ -20,7 +20,7 @@ public ResponseEndFilter(ILogger logger) public void OnActionExecuted(ActionExecutedContext context) { - if (context.Result is not null && context.HttpContext.Features.Get() is { IsEnded: true }) + if (context.Result is not null && context.HttpContext.Features.Get() is { IsEnded: true }) { LogClearingResult(); context.Result = null; diff --git a/src/Microsoft.AspNetCore.SystemWebAdapters/Adapters/IHttpRequestAdapterFeature.cs b/src/Microsoft.AspNetCore.SystemWebAdapters/Adapters/IHttpResponseAdapterFeature.cs similarity index 88% rename from src/Microsoft.AspNetCore.SystemWebAdapters/Adapters/IHttpRequestAdapterFeature.cs rename to src/Microsoft.AspNetCore.SystemWebAdapters/Adapters/IHttpResponseAdapterFeature.cs index 46b0d19f26..482ff7485a 100644 --- a/src/Microsoft.AspNetCore.SystemWebAdapters/Adapters/IHttpRequestAdapterFeature.cs +++ b/src/Microsoft.AspNetCore.SystemWebAdapters/Adapters/IHttpResponseAdapterFeature.cs @@ -7,7 +7,7 @@ namespace Microsoft.AspNetCore.SystemWebAdapters; -internal interface IHttpRequestAdapterFeature +internal interface IHttpResponseAdapterFeature { bool IsEnded { get; } diff --git a/src/Microsoft.AspNetCore.SystemWebAdapters/HttpResponse.cs b/src/Microsoft.AspNetCore.SystemWebAdapters/HttpResponse.cs index fb1f7953ee..0572fa6163 100644 --- a/src/Microsoft.AspNetCore.SystemWebAdapters/HttpResponse.cs +++ b/src/Microsoft.AspNetCore.SystemWebAdapters/HttpResponse.cs @@ -25,17 +25,17 @@ public class HttpResponse private NameValueCollection? _headers; private ResponseHeaders? _typedHeaders; - private IHttpRequestAdapterFeature? _adapterFeature; + private FeatureReference _adapterFeature; private TextWriter? _writer; private HttpCookieCollection? _cookies; internal HttpResponse(HttpResponseCore response) { _response = response; + _adapterFeature = FeatureReference.Default; } - private IHttpRequestAdapterFeature AdapterFeature => _adapterFeature ??= _response.HttpContext.Features.Get() - ?? throw new InvalidOperationException($"Response buffering must be enabled on this endpoint for this API via the BufferResponseStreamAttribute metadata item"); + private IHttpResponseAdapterFeature AdapterFeature => _adapterFeature.Fetch(_response.HttpContext.Features) ?? throw new InvalidOperationException($"Response buffering must be enabled on this endpoint for this API via the BufferResponseStreamAttribute metadata item"); internal ResponseHeaders TypedHeaders => _typedHeaders ??= new(_response.Headers); diff --git a/test/Microsoft.AspNetCore.SystemWebAdapters.Tests/HttpResponseTests.cs b/test/Microsoft.AspNetCore.SystemWebAdapters.Tests/HttpResponseTests.cs index 40225a92db..faf5e86f94 100644 --- a/test/Microsoft.AspNetCore.SystemWebAdapters.Tests/HttpResponseTests.cs +++ b/test/Microsoft.AspNetCore.SystemWebAdapters.Tests/HttpResponseTests.cs @@ -106,11 +106,11 @@ public void TrySkipIisCustomErrors(bool isEnabled) public void SuppressContent(bool suppressContent) { // Arrange - var feature = new Mock(); + var feature = new Mock(); feature.SetupProperty(f => f.SuppressContent); var features = new Mock(); - features.Setup(f => f.Get()).Returns(feature.Object); + features.Setup(f => f[typeof(IHttpResponseAdapterFeature)]).Returns(feature.Object); var context = new Mock(); context.Setup(c => c.Features).Returns(features.Object); @@ -133,10 +133,10 @@ public void SuppressContent(bool suppressContent) public void End() { // Arrange - var feature = new Mock(); + var feature = new Mock(); var features = new Mock(); - features.Setup(f => f.Get()).Returns(feature.Object); + features.Setup(f => f[typeof(IHttpResponseAdapterFeature)]).Returns(feature.Object); var context = new Mock(); context.Setup(c => c.Features).Returns(features.Object); @@ -258,11 +258,11 @@ public void Clear() { HeaderNames.ContentType, "application/json" }, }; - var feature = new Mock(); + var feature = new Mock(); var responseFeature = new Mock(); var features = new Mock(); - features.Setup(f => f.Get()).Returns(feature.Object); + features.Setup(f => f[typeof(IHttpResponseAdapterFeature)]).Returns(feature.Object); features.Setup(f => f.Get()).Returns(responseFeature.Object); var body = new Mock(); @@ -290,11 +290,11 @@ public void Clear() public void ClearContentsStreamNotSeekable() { // Arrange - var feature = new Mock(); + var feature = new Mock(); var body = new Mock(); var features = new Mock(); - features.Setup(f => f.Get()).Returns(feature.Object); + features.Setup(f => f[typeof(IHttpResponseAdapterFeature)]).Returns(feature.Object); var context = new Mock(); context.Setup(c => c.Features).Returns(features.Object); @@ -490,7 +490,7 @@ public void RedirectPermanent(bool? endResponse) var url = _fixture.Create(); var features = new FeatureCollection(); - var bufferedBody = new Mock(); + var bufferedBody = new Mock(); bufferedBody.SetupAllProperties(); features.Set(bufferedBody.Object);