From f31fd63b2fcdc618c8adef120c798d84d9fd3d48 Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Mon, 26 Apr 2021 19:39:45 +0100 Subject: [PATCH] Use default interfaces for getting and setting headers --- .../src/Internal/DefaultAntiforgery.cs | 10 +- .../test/DefaultAntiforgeryTest.cs | 14 +- .../test/DefaultAntiforgeryTokenStoreTest.cs | 2 +- ...ureAdB2COpenIDConnectEventHandlersTests.cs | 6 +- .../Startup.cs | 2 +- .../samples/AzureAppServicesSample/Startup.cs | 2 +- .../Server/src/ContentEncodingNegotiator.cs | 4 +- .../Controllers/PersonController.cs | 2 +- .../Hosting/src/Internal/ErrorPageBuilder.cs | 4 +- .../Internal/HostingApplicationDiagnostics.cs | 8 +- .../TestHost/test/ClientHandlerTests.cs | 6 +- .../TestHost/test/HttpContextBuilderTests.cs | 4 +- src/Hosting/TestHost/test/TestServerTests.cs | 2 +- src/Http/Headers/src/HeaderNames.cs | 8 +- src/Http/Headers/src/PublicAPI.Unshipped.txt | 4 +- .../Http.Extensions/src/RequestHeaders.cs | 6 +- .../Http.Extensions/src/ResponseExtensions.cs | 2 +- .../Http.Extensions/src/ResponseHeaders.cs | 2 +- .../HeaderDictionaryTypeExtensionsTest.cs | 8 +- .../test/ResponseExtensionTests.cs | 2 +- .../src/IHeaderDictionary.Keyed.cs | 274 + .../Http.Features/src/IHeaderDictionary.cs | 2 +- .../Microsoft.AspNetCore.Http.Features.csproj | 1 + .../Http.Features/src/PublicAPI.Unshipped.txt | 176 + .../src/Features/RequestCookiesFeature.cs | 10 +- src/Http/Http/src/FormFile.cs | 8 +- .../Http/src/Internal/DefaultHttpRequest.cs | 8 +- .../Http/src/Internal/DefaultHttpResponse.cs | 8 +- src/Http/Http/src/Internal/ResponseCookies.cs | 8 +- src/Http/Http/test/ResponseCookiesTest.cs | 28 +- .../src/Matching/HttpMethodMatcherPolicy.cs | 2 +- .../AutoRedirectEndSessionEndpointTests.cs | 10 +- .../src/HostFilteringMiddleware.cs | 2 +- .../test/HostFilteringMiddlewareTests.cs | 8 +- .../test/ForwardedHeadersMiddlewareTest.cs | 6 +- .../HttpsPolicy/src/HstsMiddleware.cs | 2 +- .../src/HttpsRedirectionMiddleware.cs | 2 +- .../StartupContentLanguageHeader.cs | 2 +- .../samples/ResponseCachingSample/Startup.cs | 2 +- .../src/ResponseCachingContext.cs | 8 +- .../src/ResponseCachingMiddleware.cs | 14 +- .../src/ResponseCachingPolicyProvider.cs | 12 +- .../test/ResponseCachingMiddlewareTests.cs | 54 +- .../ResponseCachingPolicyProviderTests.cs | 82 +- .../test/ResponseCachingTests.cs | 22 +- .../ResponseCompressionProviderBenchmark.cs | 2 +- .../src/ResponseCompressionProvider.cs | 4 +- .../test/ResponseCompressionBodyTest.cs | 4 +- .../test/ResponseCompressionMiddlewareTest.cs | 30 +- src/Middleware/Rewrite/src/RedirectRule.cs | 2 +- .../Rewrite/src/RedirectToHttpsRule.cs | 2 +- .../Rewrite/src/RedirectToWwwHelper.cs | 2 +- .../Rewrite/src/RewriteMiddleware.cs | 2 +- .../Rewrite/src/UrlActions/RedirectAction.cs | 8 +- .../test/IISUrlRewrite/MiddleWareTests.cs | 4 +- .../test/IISUrlRewrite/ServerVariableTests.cs | 10 +- .../PatternSegments/HeaderSegmentTests.cs | 2 +- .../UrlActions/ChangeCookieActionTests.cs | 6 +- src/Middleware/StaticFiles/src/Helpers.cs | 2 +- .../StaticFiles/src/StaticFileContext.cs | 4 +- .../test/UnitTests/RangeHelperTests.cs | 6 +- .../WebSockets/src/WebSocketMiddleware.cs | 4 +- .../ResponseCachingBenchmark.cs | 4 +- .../Mvc.Core/src/AcceptedAtActionResult.cs | 2 +- src/Mvc/Mvc.Core/src/AcceptedAtRouteResult.cs | 2 +- src/Mvc/Mvc.Core/src/AcceptedResult.cs | 2 +- src/Mvc/Mvc.Core/src/CreatedAtActionResult.cs | 2 +- src/Mvc/Mvc.Core/src/CreatedAtRouteResult.cs | 2 +- src/Mvc/Mvc.Core/src/CreatedResult.cs | 2 +- .../src/Formatters/TextOutputFormatter.cs | 2 +- .../DefaultOutputFormatterSelector.cs | 2 +- .../Infrastructure/FileResultExecutorBase.cs | 4 +- .../LocalRedirectResultExecutor.cs | 2 +- .../Infrastructure/RedirectResultExecutor.cs | 2 +- .../RedirectToActionResultExecutor.cs | 2 +- .../RedirectToPageResultExecutor.cs | 2 +- .../RedirectToRouteResultExecutor.cs | 2 +- .../Mvc.Core/test/FileContentResultTest.cs | 54 +- src/Mvc/Mvc.Core/test/FileResultTest.cs | 6 +- src/Mvc/Mvc.Core/test/FileStreamResultTest.cs | 62 +- .../ResponseCacheFilterExecutorTest.cs | 2 +- .../Formatters/JsonOutputFormatterTestBase.cs | 2 +- .../Formatters/TextOutputFormatterTests.cs | 8 +- .../DefaultOutputFormatterSelectorTest.cs | 16 +- .../ObjectResultExecutorTest.cs | 22 +- .../Mvc.Core/test/LocalRedirectResultTest.cs | 2 +- .../Mvc.Core/test/PhysicalFileResultTest.cs | 50 +- src/Mvc/Mvc.Core/test/RedirectResultTest.cs | 4 +- .../Mvc.Core/test/VirtualFileResultTest.cs | 48 +- .../src/RazorComponents/ComponentRenderer.cs | 4 +- .../test/CookieTempDataProviderTest.cs | 8 +- .../RazorComponents/ComponentRendererTest.cs | 6 +- .../BasicWebSite/RequestIdMiddleware.cs | 2 +- .../Cookies/src/CookieAuthenticationEvents.cs | 10 +- .../src/CookieAuthenticationHandler.cs | 6 +- .../samples/JwtBearerSample/Startup.cs | 2 +- .../JwtBearer/src/JwtBearerHandler.cs | 2 +- .../Negotiate/src/NegotiateHandler.cs | 2 +- .../test/Negotiate.Test/EventTests.cs | 32 +- .../Negotiate.Test/NegotiateHandlerTests.cs | 24 +- .../Authentication/OAuth/src/OAuthHandler.cs | 4 +- .../OpenIdConnect/src/OpenIdConnectHandler.cs | 16 +- .../samples/CookiePolicySample/Startup.cs | 2 +- .../CookiePolicy/test/CookieConsentTests.cs | 54 +- .../HttpSys/src/AuthenticationManager.cs | 5 +- .../HttpSys/src/RequestProcessing/Request.cs | 5 +- .../RequestHeaders.Generated.tt | 25 +- .../HttpSys/src/RequestProcessing/Response.cs | 16 +- .../test/FunctionalTests/Http2Tests.cs | 8 +- .../IIS/IIS/src/Core/IISHttpContext.cs | 3 +- .../testassets/InProcessWebSite/Startup.cs | 2 +- .../Internal/Http/HttpHeaders.Generated.cs | 17304 ++++++++++------ .../Http/HttpProtocol.FeatureCollection.cs | 2 +- .../Internal/Http2/Http2HeaderEnumerator.cs | 18 +- .../Kestrel/Core/test/Http1ConnectionTests.cs | 10 +- .../Core/test/Http2HPackEncoderTests.cs | 20 +- .../Core/test/Http2HeadersEnumeratorTests.cs | 36 +- .../Core/test/HttpRequestHeadersTests.cs | 4 +- .../HPackHeaderWriterBenchmark.cs | 34 +- .../HeaderCollectionBenchmark.cs | 379 + .../Http2ConnectionBenchmarkBase.cs | 10 +- .../Http2FrameWriterBenchmark.cs | 9 +- .../Http2HeadersEnumeratorBenchmark.cs | 34 +- .../ResponseHeadersWritingBenchmark.cs | 32 +- src/Servers/Kestrel/shared/KnownHeaders.cs | 101 +- src/Servers/Kestrel/shared/test/TestApp.cs | 4 +- .../Http2/Http2ConnectionTests.cs | 4 +- .../Http2/Http2TestBase.cs | 2 +- .../Http3/Http3TestBase.cs | 2 +- .../InMemory.FunctionalTests/UpgradeTests.cs | 2 +- .../StartupResponses.cs | 8 +- .../RequestProcessing/HeaderCollection.cs | 6 +- .../RequestProcessing/HttpKnownHeaderNames.cs | 72 - .../RequestHeaders.Generated.cs | 631 +- .../RequestProcessing/RequestHeaders.cs | 6 +- src/Shared/RangeHelper/RangeHelper.cs | 2 +- .../clients/ts/FunctionalTests/Startup.cs | 14 +- .../ServerSentEventsServerTransport.cs | 6 +- 138 files changed, 12680 insertions(+), 7563 deletions(-) create mode 100644 src/Http/Http.Features/src/IHeaderDictionary.Keyed.cs create mode 100644 src/Servers/Kestrel/perf/Microbenchmarks/HeaderCollectionBenchmark.cs delete mode 100644 src/Shared/HttpSys/RequestProcessing/HttpKnownHeaderNames.cs diff --git a/src/Antiforgery/src/Internal/DefaultAntiforgery.cs b/src/Antiforgery/src/Internal/DefaultAntiforgery.cs index 37f368830db3..3eeac224a2d8 100644 --- a/src/Antiforgery/src/Internal/DefaultAntiforgery.cs +++ b/src/Antiforgery/src/Internal/DefaultAntiforgery.cs @@ -266,7 +266,7 @@ private void SaveCookieTokenAndHeader(HttpContext httpContext, string cookieToke // Adding X-Frame-Options header to prevent ClickJacking. See // http://tools.ietf.org/html/draft-ietf-websec-x-frame-options-10 // for more information. - httpContext.Response.Headers[HeaderNames.XFrameOptions] = "SAMEORIGIN"; + httpContext.Response.Headers.XFrameOptions = "SAMEORIGIN"; } } @@ -387,12 +387,12 @@ protected virtual void SetDoNotCacheHeaders(HttpContext httpContext) if (!cacheControlHeaderValue.NoCache || !cacheControlHeaderValue.NoStore) { logWarning = true; - responseHeaders[HeaderNames.CacheControl] = "no-cache, no-store"; + responseHeaders.CacheControl = "no-cache, no-store"; } } else { - responseHeaders[HeaderNames.CacheControl] = "no-cache, no-store"; + responseHeaders.CacheControl = "no-cache, no-store"; } if (responseHeaders.TryGetValue(HeaderNames.Pragma, out var pragmaHeader) && pragmaHeader.Count > 0) @@ -401,12 +401,12 @@ protected virtual void SetDoNotCacheHeaders(HttpContext httpContext) if (!string.Equals(pragmaHeader[0], "no-cache", StringComparison.OrdinalIgnoreCase)) { logWarning = true; - httpContext.Response.Headers[HeaderNames.Pragma] = "no-cache"; + httpContext.Response.Headers.Pragma = "no-cache"; } } else { - httpContext.Response.Headers[HeaderNames.Pragma] = "no-cache"; + httpContext.Response.Headers.Pragma = "no-cache"; } // Since antiforgery token generation is not very obvious to the end users (ex: MVC's form tag generates them diff --git a/src/Antiforgery/test/DefaultAntiforgeryTest.cs b/src/Antiforgery/test/DefaultAntiforgeryTest.cs index 5fee9d5462b6..4a566190a76c 100644 --- a/src/Antiforgery/test/DefaultAntiforgeryTest.cs +++ b/src/Antiforgery/test/DefaultAntiforgeryTest.cs @@ -313,8 +313,8 @@ public void GetAndStoreTokens_ExistingValidCookieToken_NotOverriden_AndSetsDoNot Assert.NotNull(antiforgeryFeature); Assert.Equal(context.TestTokenSet.OldCookieToken, antiforgeryFeature.CookieToken); - Assert.Equal("no-cache, no-store", context.HttpContext.Response.Headers[HeaderNames.CacheControl]); - Assert.Equal("no-cache", context.HttpContext.Response.Headers[HeaderNames.Pragma]); + Assert.Equal("no-cache, no-store", context.HttpContext.Response.Headers.CacheControl); + Assert.Equal("no-cache", context.HttpContext.Response.Headers.Pragma); } [Fact] @@ -328,7 +328,7 @@ public void GetAndStoreTokens_ExistingCachingHeaders_Overriden() isOldCookieValid: true, antiforgeryFeature: antiforgeryFeature); var antiforgery = GetAntiforgery(context); - context.HttpContext.Response.Headers["Cache-Control"] = "public"; + context.HttpContext.Response.Headers.CacheControl = "public"; // Act var tokenSet = antiforgery.GetAndStoreTokens(context.HttpContext); @@ -344,8 +344,8 @@ public void GetAndStoreTokens_ExistingCachingHeaders_Overriden() Assert.NotNull(antiforgeryFeature); Assert.Equal(context.TestTokenSet.OldCookieToken, antiforgeryFeature.CookieToken); - Assert.Equal("no-cache, no-store", context.HttpContext.Response.Headers[HeaderNames.CacheControl]); - Assert.Equal("no-cache", context.HttpContext.Response.Headers[HeaderNames.Pragma]); + Assert.Equal("no-cache, no-store", context.HttpContext.Response.Headers.CacheControl); + Assert.Equal("no-cache", context.HttpContext.Response.Headers.Pragma); } private string GetAndStoreTokens_CacheHeadersArrangeAct(TestSink testSink, string headerName, string headerValue) @@ -506,8 +506,8 @@ public void GetAndStoreTokens_NoExistingCookieToken_Saved_AndSetsDoNotCacheHeade Assert.NotNull(antiforgeryFeature); Assert.True(antiforgeryFeature.HaveDeserializedCookieToken); Assert.Equal(context.TestTokenSet.OldCookieToken, antiforgeryFeature.CookieToken); - Assert.Equal("no-cache, no-store", context.HttpContext.Response.Headers[HeaderNames.CacheControl]); - Assert.Equal("no-cache", context.HttpContext.Response.Headers[HeaderNames.Pragma]); + Assert.Equal("no-cache, no-store", context.HttpContext.Response.Headers.CacheControl); + Assert.Equal("no-cache", context.HttpContext.Response.Headers.Pragma); } [Fact] diff --git a/src/Antiforgery/test/DefaultAntiforgeryTokenStoreTest.cs b/src/Antiforgery/test/DefaultAntiforgeryTokenStoreTest.cs index 8456ee318ad1..bd00a7361ac9 100644 --- a/src/Antiforgery/test/DefaultAntiforgeryTokenStoreTest.cs +++ b/src/Antiforgery/test/DefaultAntiforgeryTokenStoreTest.cs @@ -460,7 +460,7 @@ public void SaveCookieToken_NonNullAntiforgeryOptionsConfigureCookieOptionsDomai private HttpContext GetHttpContext(string cookieName, string cookieValue) { var context = GetHttpContext(); - context.Request.Headers[HeaderNames.Cookie] = $"{cookieName}={cookieValue}"; + context.Request.Headers.Cookie = $"{cookieName}={cookieValue}"; return context; } diff --git a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/test/AzureAdB2COpenIDConnectEventHandlersTests.cs b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/test/AzureAdB2COpenIDConnectEventHandlersTests.cs index 7a9a4367f3e9..17f236868d23 100644 --- a/src/Azure/AzureAD/Authentication.AzureADB2C.UI/test/AzureAdB2COpenIDConnectEventHandlersTests.cs +++ b/src/Azure/AzureAD/Authentication.AzureADB2C.UI/test/AzureAdB2COpenIDConnectEventHandlersTests.cs @@ -114,7 +114,7 @@ public async Task OnRemoteError_HandlesResponseWhenTryingToResetPasswordFromTheL // Assert Assert.Equal(StatusCodes.Status302Found, remoteFailureContext.Response.StatusCode); - Assert.Equal("/AzureADB2C/Account/ResetPassword/AzureADB2C", remoteFailureContext.Response.Headers[HeaderNames.Location]); + Assert.Equal("/AzureADB2C/Account/ResetPassword/AzureADB2C", remoteFailureContext.Response.Headers.Location); Assert.True(remoteFailureContext.Result.Handled); } @@ -141,7 +141,7 @@ public async Task OnRemoteError_HandlesResponseWhenUserCancelsFlowFromTheAzureAD // Assert Assert.Equal(StatusCodes.Status302Found, remoteFailureContext.Response.StatusCode); - Assert.Equal("/", remoteFailureContext.Response.Headers[HeaderNames.Location]); + Assert.Equal("/", remoteFailureContext.Response.Headers.Location); Assert.True(remoteFailureContext.Result.Handled); } @@ -168,7 +168,7 @@ public async Task OnRemoteError_HandlesResponseWhenErrorIsUnknown() // Assert Assert.Equal(StatusCodes.Status302Found, remoteFailureContext.Response.StatusCode); - Assert.Equal("/AzureADB2C/Account/Error", remoteFailureContext.Response.Headers[HeaderNames.Location]); + Assert.Equal("/AzureADB2C/Account/Error", remoteFailureContext.Response.Headers.Location); Assert.True(remoteFailureContext.Result.Handled); } } diff --git a/src/Azure/samples/AzureAppServicesHostingStartupSample/Startup.cs b/src/Azure/samples/AzureAppServicesHostingStartupSample/Startup.cs index 09de3fb3f062..1b914973492b 100644 --- a/src/Azure/samples/AzureAppServicesHostingStartupSample/Startup.cs +++ b/src/Azure/samples/AzureAppServicesHostingStartupSample/Startup.cs @@ -25,7 +25,7 @@ public void Configure(IApplicationBuilder app, ILoggerFactory loggerfactory) await context.Response.WriteAsync("Address:" + Environment.NewLine); await context.Response.WriteAsync("Scheme: " + context.Request.Scheme + Environment.NewLine); - await context.Response.WriteAsync("Host: " + context.Request.Headers["Host"] + Environment.NewLine); + await context.Response.WriteAsync("Host: " + context.Request.Headers.Host + Environment.NewLine); await context.Response.WriteAsync("PathBase: " + context.Request.PathBase.Value + Environment.NewLine); await context.Response.WriteAsync("Path: " + context.Request.Path.Value + Environment.NewLine); await context.Response.WriteAsync("Query: " + context.Request.QueryString.Value + Environment.NewLine); diff --git a/src/Azure/samples/AzureAppServicesSample/Startup.cs b/src/Azure/samples/AzureAppServicesSample/Startup.cs index 2347a3cb37cb..2f92a5e01f24 100644 --- a/src/Azure/samples/AzureAppServicesSample/Startup.cs +++ b/src/Azure/samples/AzureAppServicesSample/Startup.cs @@ -37,7 +37,7 @@ public void Configure(IApplicationBuilder app, ILoggerFactory loggerfactory) await context.Response.WriteAsync("Address:" + Environment.NewLine); await context.Response.WriteAsync("Scheme: " + context.Request.Scheme + Environment.NewLine); - await context.Response.WriteAsync("Host: " + context.Request.Headers["Host"] + Environment.NewLine); + await context.Response.WriteAsync("Host: " + context.Request.Headers.Host + Environment.NewLine); await context.Response.WriteAsync("PathBase: " + context.Request.PathBase.Value + Environment.NewLine); await context.Response.WriteAsync("Path: " + context.Request.Path.Value + Environment.NewLine); await context.Response.WriteAsync("Query: " + context.Request.QueryString.Value + Environment.NewLine); diff --git a/src/Components/WebAssembly/Server/src/ContentEncodingNegotiator.cs b/src/Components/WebAssembly/Server/src/ContentEncodingNegotiator.cs index 7caddb2f7575..79309aee2708 100644 --- a/src/Components/WebAssembly/Server/src/ContentEncodingNegotiator.cs +++ b/src/Components/WebAssembly/Server/src/ContentEncodingNegotiator.cs @@ -41,7 +41,7 @@ public Task InvokeAsync(HttpContext context) private void NegotiateEncoding(HttpContext context) { - var accept = context.Request.Headers[HeaderNames.AcceptEncoding]; + var accept = context.Request.Headers.AcceptEncoding; if (StringValues.IsNullOrEmpty(accept)) { @@ -91,7 +91,7 @@ private void NegotiateEncoding(HttpContext context) if (_encodingExtensionMap.TryGetValue(selectedEncoding, out var extension)) { context.Request.Path = context.Request.Path + extension; - context.Response.Headers[HeaderNames.ContentEncoding] = selectedEncoding.Value; + context.Response.Headers.ContentEncoding = selectedEncoding.Value; context.Response.Headers.Append(HeaderNames.Vary, HeaderNames.ContentEncoding); } diff --git a/src/Components/test/testassets/TestServer/Controllers/PersonController.cs b/src/Components/test/testassets/TestServer/Controllers/PersonController.cs index 9b5bd6f2301f..33d5d4e655fd 100644 --- a/src/Components/test/testassets/TestServer/Controllers/PersonController.cs +++ b/src/Components/test/testassets/TestServer/Controllers/PersonController.cs @@ -34,7 +34,7 @@ public async Task Post() [HttpGet("referrer")] public string GetReferer() { - return $"The referrer is: {Request.Headers["Referer"].ToString()}"; + return $"The referrer is: {Request.Headers.Referer.ToString()}"; } // PUT api/person diff --git a/src/Hosting/Hosting/src/Internal/ErrorPageBuilder.cs b/src/Hosting/Hosting/src/Internal/ErrorPageBuilder.cs index c3da3758ac86..0920be4d5e37 100644 --- a/src/Hosting/Hosting/src/Internal/ErrorPageBuilder.cs +++ b/src/Hosting/Hosting/src/Internal/ErrorPageBuilder.cs @@ -33,8 +33,8 @@ public static RequestDelegate BuildErrorPageApplication( return context => { context.Response.StatusCode = 500; - context.Response.Headers[HeaderNames.CacheControl] = "no-cache,no-store"; - context.Response.Headers[HeaderNames.Pragma] = "no-cache"; + context.Response.Headers.CacheControl = "no-cache,no-store"; + context.Response.Headers.Pragma = "no-cache"; context.Response.ContentType = "text/html; charset=utf-8"; return errorPage.ExecuteAsync(context); }; diff --git a/src/Hosting/Hosting/src/Internal/HostingApplicationDiagnostics.cs b/src/Hosting/Hosting/src/Internal/HostingApplicationDiagnostics.cs index 373bf65542fa..bc02325778b5 100644 --- a/src/Hosting/Hosting/src/Internal/HostingApplicationDiagnostics.cs +++ b/src/Hosting/Hosting/src/Internal/HostingApplicationDiagnostics.cs @@ -264,15 +264,17 @@ private static void RecordRequestStartEventLog(HttpContext httpContext) } var headers = httpContext.Request.Headers; - if (!headers.TryGetValue(HeaderNames.TraceParent, out var requestId)) + var requestId = headers.TraceParent; + if (requestId.Count == 0) { - headers.TryGetValue(HeaderNames.RequestId, out requestId); + requestId = headers.RequestId; } if (!StringValues.IsNullOrEmpty(requestId)) { activity.SetParentId(requestId); - if (headers.TryGetValue(HeaderNames.TraceState, out var traceState)) + var traceState = headers.TraceState; + if (traceState.Count > 0) { activity.TraceStateString = traceState; } diff --git a/src/Hosting/TestHost/test/ClientHandlerTests.cs b/src/Hosting/TestHost/test/ClientHandlerTests.cs index cd368192b7b4..b99abefa061b 100644 --- a/src/Hosting/TestHost/test/ClientHandlerTests.cs +++ b/src/Hosting/TestHost/test/ClientHandlerTests.cs @@ -95,7 +95,7 @@ public Task UserAgentHeaderWorks() var userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0"; var handler = new ClientHandler(new PathString(""), new DummyApplication(context => { - var actualResult = context.Request.Headers[HeaderNames.UserAgent]; + var actualResult = context.Request.Headers.UserAgent; Assert.Equal(userAgent, actualResult); return Task.CompletedTask; @@ -147,7 +147,7 @@ public Task ContentLengthWithImplicitChunkedTransferEncodingWorks() { Assert.True(context.Request.CanHaveBody()); Assert.Null(context.Request.ContentLength); - Assert.Equal("chunked", context.Request.Headers[HeaderNames.TransferEncoding]); + Assert.Equal("chunked", context.Request.Headers.TransferEncoding); return Task.CompletedTask; })); @@ -164,7 +164,7 @@ public Task ContentLengthWithExplicitChunkedTransferEncodingWorks() { Assert.True(context.Request.CanHaveBody()); Assert.Null(context.Request.ContentLength); - Assert.Equal("chunked", context.Request.Headers[HeaderNames.TransferEncoding]); + Assert.Equal("chunked", context.Request.Headers.TransferEncoding); return Task.CompletedTask; })); diff --git a/src/Hosting/TestHost/test/HttpContextBuilderTests.cs b/src/Hosting/TestHost/test/HttpContextBuilderTests.cs index 99ae9cd4b034..2ed9e8f02a08 100644 --- a/src/Hosting/TestHost/test/HttpContextBuilderTests.cs +++ b/src/Hosting/TestHost/test/HttpContextBuilderTests.cs @@ -59,10 +59,10 @@ public async Task UserAgentHeaderWorks() server.BaseAddress = new Uri("https://example.com/"); var context = await server.SendAsync(c => { - c.Request.Headers[HeaderNames.UserAgent] = userAgent; + c.Request.Headers.UserAgent = userAgent; }); - var actualResult = context.Request.Headers[HeaderNames.UserAgent]; + var actualResult = context.Request.Headers.UserAgent; Assert.Equal(userAgent, actualResult); } diff --git a/src/Hosting/TestHost/test/TestServerTests.cs b/src/Hosting/TestHost/test/TestServerTests.cs index 7717ae8006b0..6a00e4851b7f 100644 --- a/src/Hosting/TestHost/test/TestServerTests.cs +++ b/src/Hosting/TestHost/test/TestServerTests.cs @@ -771,7 +771,7 @@ public async Task ExceptionDiagnosticAvailable() public async Task ManuallySetHostWinsOverInferredHostFromRequestUri(string uri) { RequestDelegate appDelegate = ctx => - ctx.Response.WriteAsync(ctx.Request.Headers[HeaderNames.Host]); + ctx.Response.WriteAsync(ctx.Request.Headers.Host); var builder = new WebHostBuilder().Configure(app => app.Run(appDelegate)); var server = new TestServer(builder); diff --git a/src/Http/Headers/src/HeaderNames.cs b/src/Http/Headers/src/HeaderNames.cs index ca48a8ab0e82..ebff78541f76 100644 --- a/src/Http/Headers/src/HeaderNames.cs +++ b/src/Http/Headers/src/HeaderNames.cs @@ -283,10 +283,16 @@ public static class HeaderNames /// Gets the X-Frame-Options HTTP header name. public static readonly string XFrameOptions = "X-Frame-Options"; + /// Gets the X-Powered-By HTTP header name. + public static readonly string XPoweredBy = "X-Powered-By"; + /// Gets the X-Requested-With HTTP header name. public static readonly string XRequestedWith = "X-Requested-With"; + /// Gets the X-UA-Compatible HTTP header name. + public static readonly string XUACompatible = "X-UA-Compatible"; + /// Gets the X-XSS-Protection HTTP header name. - public static readonly string XXssProtection = "X-XSS-Protection"; + public static readonly string XXSSProtection = "X-XSS-Protection"; } } diff --git a/src/Http/Headers/src/PublicAPI.Unshipped.txt b/src/Http/Headers/src/PublicAPI.Unshipped.txt index d7014272fd7c..9035747ce6c4 100644 --- a/src/Http/Headers/src/PublicAPI.Unshipped.txt +++ b/src/Http/Headers/src/PublicAPI.Unshipped.txt @@ -6,4 +6,6 @@ static readonly Microsoft.Net.Http.Headers.HeaderNames.Baggage -> string! static readonly Microsoft.Net.Http.Headers.HeaderNames.Link -> string! static readonly Microsoft.Net.Http.Headers.HeaderNames.ProxyConnection -> string! static readonly Microsoft.Net.Http.Headers.HeaderNames.XContentTypeOptions -> string! -static readonly Microsoft.Net.Http.Headers.HeaderNames.XXssProtection -> string! +static readonly Microsoft.Net.Http.Headers.HeaderNames.XPoweredBy -> string! +static readonly Microsoft.Net.Http.Headers.HeaderNames.XUACompatible -> string! +static readonly Microsoft.Net.Http.Headers.HeaderNames.XXSSProtection -> string! diff --git a/src/Http/Http.Extensions/src/RequestHeaders.cs b/src/Http/Http.Extensions/src/RequestHeaders.cs index 57e0806f5f62..7f4890ae6e6d 100644 --- a/src/Http/Http.Extensions/src/RequestHeaders.cs +++ b/src/Http/Http.Extensions/src/RequestHeaders.cs @@ -219,11 +219,11 @@ public HostString Host { get { - return HostString.FromUriComponent(Headers[HeaderNames.Host]); + return HostString.FromUriComponent(Headers.Host); } set { - Headers[HeaderNames.Host] = value.ToUriComponent(); + Headers.Host = value.ToUriComponent(); } } @@ -339,7 +339,7 @@ public Uri? Referer { get { - if (Uri.TryCreate(Headers[HeaderNames.Referer], UriKind.RelativeOrAbsolute, out var uri)) + if (Uri.TryCreate(Headers.Referer, UriKind.RelativeOrAbsolute, out var uri)) { return uri; } diff --git a/src/Http/Http.Extensions/src/ResponseExtensions.cs b/src/Http/Http.Extensions/src/ResponseExtensions.cs index 1dd780a03a59..a8503b83e484 100644 --- a/src/Http/Http.Extensions/src/ResponseExtensions.cs +++ b/src/Http/Http.Extensions/src/ResponseExtensions.cs @@ -52,7 +52,7 @@ public static void Redirect(this HttpResponse response, string location, bool pe response.StatusCode = permanent ? StatusCodes.Status301MovedPermanently : StatusCodes.Status302Found; } - response.Headers[HeaderNames.Location] = location; + response.Headers.Location = location; } } } diff --git a/src/Http/Http.Extensions/src/ResponseHeaders.cs b/src/Http/Http.Extensions/src/ResponseHeaders.cs index fef9d19a1576..6bfb3d0a4074 100644 --- a/src/Http/Http.Extensions/src/ResponseHeaders.cs +++ b/src/Http/Http.Extensions/src/ResponseHeaders.cs @@ -174,7 +174,7 @@ public Uri? Location { get { - if (Uri.TryCreate(Headers[HeaderNames.Location], UriKind.RelativeOrAbsolute, out var uri)) + if (Uri.TryCreate(Headers.Location, UriKind.RelativeOrAbsolute, out var uri)) { return uri; } diff --git a/src/Http/Http.Extensions/test/HeaderDictionaryTypeExtensionsTest.cs b/src/Http/Http.Extensions/test/HeaderDictionaryTypeExtensionsTest.cs index 2ca3c36e277e..5686c05a667b 100644 --- a/src/Http/Http.Extensions/test/HeaderDictionaryTypeExtensionsTest.cs +++ b/src/Http/Http.Extensions/test/HeaderDictionaryTypeExtensionsTest.cs @@ -15,7 +15,7 @@ public class HeaderDictionaryTypeExtensionsTest public void GetT_KnownTypeWithValidValue_Success() { var context = new DefaultHttpContext(); - context.Request.Headers[HeaderNames.ContentType] = "text/plain"; + context.Request.Headers.ContentType = "text/plain"; var result = context.Request.GetTypedHeaders().Get(HeaderNames.ContentType); @@ -37,7 +37,7 @@ public void GetT_KnownTypeWithMissingValue_Null() public void GetT_KnownTypeWithInvalidValue_Null() { var context = new DefaultHttpContext(); - context.Request.Headers[HeaderNames.ContentType] = "invalid"; + context.Request.Headers.ContentType = "invalid"; var result = context.Request.GetTypedHeaders().Get(HeaderNames.ContentType); @@ -86,7 +86,7 @@ public void GetT_UnknownTypeWithoutTryParse_Throws() public void GetListT_KnownTypeWithValidValue_Success() { var context = new DefaultHttpContext(); - context.Request.Headers[HeaderNames.Accept] = "text/plain; q=0.9, text/other, */*"; + context.Request.Headers.Accept = "text/plain; q=0.9, text/other, */*"; var result = context.Request.GetTypedHeaders().GetList(HeaderNames.Accept); @@ -112,7 +112,7 @@ public void GetListT_KnownTypeWithMissingValue_EmptyList() public void GetListT_KnownTypeWithInvalidValue_EmptyList() { var context = new DefaultHttpContext(); - context.Request.Headers[HeaderNames.Accept] = "invalid"; + context.Request.Headers.Accept = "invalid"; var result = context.Request.GetTypedHeaders().GetList(HeaderNames.Accept); diff --git a/src/Http/Http.Extensions/test/ResponseExtensionTests.cs b/src/Http/Http.Extensions/test/ResponseExtensionTests.cs index aae590024248..576db15b6b01 100644 --- a/src/Http/Http.Extensions/test/ResponseExtensionTests.cs +++ b/src/Http/Http.Extensions/test/ResponseExtensionTests.cs @@ -51,7 +51,7 @@ public void Redirect_SetsResponseCorrectly(bool permanent, bool preserveMethod, context.Response.Redirect(location, permanent, preserveMethod); - Assert.Equal(location, context.Response.Headers[HeaderNames.Location].First()); + Assert.Equal(location, context.Response.Headers.Location.First()); Assert.Equal(expectedStatusCode, context.Response.StatusCode); } diff --git a/src/Http/Http.Features/src/IHeaderDictionary.Keyed.cs b/src/Http/Http.Features/src/IHeaderDictionary.Keyed.cs new file mode 100644 index 000000000000..7f7739599ad9 --- /dev/null +++ b/src/Http/Http.Features/src/IHeaderDictionary.Keyed.cs @@ -0,0 +1,274 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using Microsoft.Extensions.Primitives; +using Microsoft.Net.Http.Headers; + +namespace Microsoft.AspNetCore.Http +{ + public partial interface IHeaderDictionary + { + /// Gets or sets the Accept HTTP header. + StringValues Accept { get => this[HeaderNames.Accept]; set => this[HeaderNames.Accept] = value; } + + /// Gets or sets the Accept-Charset HTTP header. + StringValues AcceptCharset { get => this[HeaderNames.AcceptCharset]; set => this[HeaderNames.AcceptCharset] = value; } + + /// Gets or sets the Accept-Encoding HTTP header. + StringValues AcceptEncoding { get => this[HeaderNames.AcceptEncoding]; set => this[HeaderNames.AcceptEncoding] = value; } + + /// Gets or sets the Accept-Language HTTP header. + StringValues AcceptLanguage { get => this[HeaderNames.AcceptLanguage]; set => this[HeaderNames.AcceptLanguage] = value; } + + /// Gets or sets the Accept-Ranges HTTP header. + StringValues AcceptRanges { get => this[HeaderNames.AcceptRanges]; set => this[HeaderNames.AcceptRanges] = value; } + + /// Gets or sets the Access-Control-Allow-Credentials HTTP header. + StringValues AccessControlAllowCredentials { get => this[HeaderNames.AccessControlAllowCredentials]; set => this[HeaderNames.AccessControlAllowCredentials] = value; } + + /// Gets or sets the Access-Control-Allow-Headers HTTP header. + StringValues AccessControlAllowHeaders { get => this[HeaderNames.AccessControlAllowHeaders]; set => this[HeaderNames.AccessControlAllowHeaders] = value; } + + /// Gets or sets the Access-Control-Allow-Methods HTTP header. + StringValues AccessControlAllowMethods { get => this[HeaderNames.AccessControlAllowMethods]; set => this[HeaderNames.AccessControlAllowMethods] = value; } + + /// Gets or sets the Access-Control-Allow-Origin HTTP header. + StringValues AccessControlAllowOrigin { get => this[HeaderNames.AccessControlAllowOrigin]; set => this[HeaderNames.AccessControlAllowOrigin] = value; } + + /// Gets or sets the Access-Control-Expose-Headers HTTP header. + StringValues AccessControlExposeHeaders { get => this[HeaderNames.AccessControlExposeHeaders]; set => this[HeaderNames.AccessControlExposeHeaders] = value; } + + /// Gets or sets the Access-Control-Max-Age HTTP header. + StringValues AccessControlMaxAge { get => this[HeaderNames.AccessControlMaxAge]; set => this[HeaderNames.AccessControlMaxAge] = value; } + + /// Gets or sets the Access-Control-Request-Headers HTTP header. + StringValues AccessControlRequestHeaders { get => this[HeaderNames.AccessControlRequestHeaders]; set => this[HeaderNames.AccessControlRequestHeaders] = value; } + + /// Gets or sets the Access-Control-Request-Method HTTP header. + StringValues AccessControlRequestMethod { get => this[HeaderNames.AccessControlRequestMethod]; set => this[HeaderNames.AccessControlRequestMethod] = value; } + + /// Gets or sets the Age HTTP header. + StringValues Age { get => this[HeaderNames.Age]; set => this[HeaderNames.Age] = value; } + + /// Gets or sets the Allow HTTP header. + StringValues Allow { get => this[HeaderNames.Allow]; set => this[HeaderNames.Allow] = value; } + + /// Gets or sets the Alt-Svc HTTP header. + StringValues AltSvc { get => this[HeaderNames.AltSvc]; set => this[HeaderNames.AltSvc] = value; } + + /// Gets or sets the Authorization HTTP header. + StringValues Authorization { get => this[HeaderNames.Authorization]; set => this[HeaderNames.Authorization] = value; } + + /// Gets or sets the baggage HTTP header. + StringValues Baggage { get => this[HeaderNames.Baggage]; set => this[HeaderNames.Baggage] = value; } + + /// Gets or sets the Cache-Control HTTP header. + StringValues CacheControl { get => this[HeaderNames.CacheControl]; set => this[HeaderNames.CacheControl] = value; } + + /// Gets or sets the Connection HTTP header. + StringValues Connection { get => this[HeaderNames.Connection]; set => this[HeaderNames.Connection] = value; } + + /// Gets or sets the Content-Disposition HTTP header. + StringValues ContentDisposition { get => this[HeaderNames.ContentDisposition]; set => this[HeaderNames.ContentDisposition] = value; } + + /// Gets or sets the Content-Encoding HTTP header. + StringValues ContentEncoding { get => this[HeaderNames.ContentEncoding]; set => this[HeaderNames.ContentEncoding] = value; } + + /// Gets or sets the Content-Language HTTP header. + StringValues ContentLanguage { get => this[HeaderNames.ContentLanguage]; set => this[HeaderNames.ContentLanguage] = value; } + + /// Gets or sets the Content-Location HTTP header. + StringValues ContentLocation { get => this[HeaderNames.ContentLocation]; set => this[HeaderNames.ContentLocation] = value; } + + /// Gets or sets the Content-MD5 HTTP header. + StringValues ContentMD5 { get => this[HeaderNames.ContentMD5]; set => this[HeaderNames.ContentMD5] = value; } + + /// Gets or sets the Content-Range HTTP header. + StringValues ContentRange { get => this[HeaderNames.ContentRange]; set => this[HeaderNames.ContentRange] = value; } + + /// Gets or sets the Content-Security-Policy HTTP header. + StringValues ContentSecurityPolicy { get => this[HeaderNames.ContentSecurityPolicy]; set => this[HeaderNames.ContentSecurityPolicy] = value; } + + /// Gets or sets the Content-Security-Policy-Report-Only HTTP header. + StringValues ContentSecurityPolicyReportOnly { get => this[HeaderNames.ContentSecurityPolicyReportOnly]; set => this[HeaderNames.ContentSecurityPolicyReportOnly] = value; } + + /// Gets or sets the Content-Type HTTP header. + StringValues ContentType { get => this[HeaderNames.ContentType]; set => this[HeaderNames.ContentType] = value; } + + /// Gets or sets the Correlation-Context HTTP header. + StringValues CorrelationContext { get => this[HeaderNames.CorrelationContext]; set => this[HeaderNames.CorrelationContext] = value; } + + /// Gets or sets the Cookie HTTP header. + StringValues Cookie { get => this[HeaderNames.Cookie]; set => this[HeaderNames.Cookie] = value; } + + /// Gets or sets the Date HTTP header. + StringValues Date { get => this[HeaderNames.Date]; set => this[HeaderNames.Date] = value; } + + /// Gets or sets the ETag HTTP header. + StringValues ETag { get => this[HeaderNames.ETag]; set => this[HeaderNames.ETag] = value; } + + /// Gets or sets the Expires HTTP header. + StringValues Expires { get => this[HeaderNames.Expires]; set => this[HeaderNames.Expires] = value; } + + /// Gets or sets the Expect HTTP header. + StringValues Expect { get => this[HeaderNames.Expect]; set => this[HeaderNames.Expect] = value; } + + /// Gets or sets the From HTTP header. + StringValues From { get => this[HeaderNames.From]; set => this[HeaderNames.From] = value; } + + /// Gets or sets the Grpc-Accept-Encoding HTTP header. + StringValues GrpcAcceptEncoding { get => this[HeaderNames.GrpcAcceptEncoding]; set => this[HeaderNames.GrpcAcceptEncoding] = value; } + + /// Gets or sets the Grpc-Encoding HTTP header. + StringValues GrpcEncoding { get => this[HeaderNames.GrpcEncoding]; set => this[HeaderNames.GrpcEncoding] = value; } + + /// Gets or sets the Grpc-Message HTTP header. + StringValues GrpcMessage { get => this[HeaderNames.GrpcMessage]; set => this[HeaderNames.GrpcMessage] = value; } + + /// Gets or sets the Grpc-Status HTTP header. + StringValues GrpcStatus { get => this[HeaderNames.GrpcStatus]; set => this[HeaderNames.GrpcStatus] = value; } + + /// Gets or sets the Grpc-Timeout HTTP header. + StringValues GrpcTimeout { get => this[HeaderNames.GrpcTimeout]; set => this[HeaderNames.GrpcTimeout] = value; } + + /// Gets or sets the Host HTTP header. + StringValues Host { get => this[HeaderNames.Host]; set => this[HeaderNames.Host] = value; } + + /// Gets or sets the Keep-Alive HTTP header. + StringValues KeepAlive { get => this[HeaderNames.KeepAlive]; set => this[HeaderNames.KeepAlive] = value; } + + /// Gets or sets the If-Match HTTP header. + StringValues IfMatch { get => this[HeaderNames.IfMatch]; set => this[HeaderNames.IfMatch] = value; } + + /// Gets or sets the If-Modified-Since HTTP header. + StringValues IfModifiedSince { get => this[HeaderNames.IfModifiedSince]; set => this[HeaderNames.IfModifiedSince] = value; } + + /// Gets or sets the If-None-Match HTTP header. + StringValues IfNoneMatch { get => this[HeaderNames.IfNoneMatch]; set => this[HeaderNames.IfNoneMatch] = value; } + + /// Gets or sets the If-Range HTTP header. + StringValues IfRange { get => this[HeaderNames.IfRange]; set => this[HeaderNames.IfRange] = value; } + + /// Gets or sets the If-Unmodified-Since HTTP header. + StringValues IfUnmodifiedSince { get => this[HeaderNames.IfUnmodifiedSince]; set => this[HeaderNames.IfUnmodifiedSince] = value; } + + /// Gets or sets the Last-Modified HTTP header. + StringValues LastModified { get => this[HeaderNames.LastModified]; set => this[HeaderNames.LastModified] = value; } + + /// Gets or sets the Link HTTP header. + StringValues Link { get => this[HeaderNames.Link]; set => this[HeaderNames.Link] = value; } + + /// Gets or sets the Location HTTP header. + StringValues Location { get => this[HeaderNames.Location]; set => this[HeaderNames.Location] = value; } + + /// Gets or sets the Max-Forwards HTTP header. + StringValues MaxForwards { get => this[HeaderNames.MaxForwards]; set => this[HeaderNames.MaxForwards] = value; } + + /// Gets or sets the Origin HTTP header. + StringValues Origin { get => this[HeaderNames.Origin]; set => this[HeaderNames.Origin] = value; } + + /// Gets or sets the Pragma HTTP header. + StringValues Pragma { get => this[HeaderNames.Pragma]; set => this[HeaderNames.Pragma] = value; } + + /// Gets or sets the Proxy-Authenticate HTTP header. + StringValues ProxyAuthenticate { get => this[HeaderNames.ProxyAuthenticate]; set => this[HeaderNames.ProxyAuthenticate] = value; } + + /// Gets or sets the Proxy-Authorization HTTP header. + StringValues ProxyAuthorization { get => this[HeaderNames.ProxyAuthorization]; set => this[HeaderNames.ProxyAuthorization] = value; } + + /// Gets or sets the Proxy-Connection HTTP header. + StringValues ProxyConnection { get => this[HeaderNames.ProxyConnection]; set => this[HeaderNames.ProxyConnection] = value; } + + /// Gets or sets the Range HTTP header. + StringValues Range { get => this[HeaderNames.Range]; set => this[HeaderNames.Range] = value; } + + /// Gets or sets the Referer HTTP header. + StringValues Referer { get => this[HeaderNames.Referer]; set => this[HeaderNames.Referer] = value; } + + /// Gets or sets the Retry-After HTTP header. + StringValues RetryAfter { get => this[HeaderNames.RetryAfter]; set => this[HeaderNames.RetryAfter] = value; } + + /// Gets or sets the Request-Id HTTP header. + StringValues RequestId { get => this[HeaderNames.RequestId]; set => this[HeaderNames.RequestId] = value; } + + /// Gets or sets the Sec-WebSocket-Accept HTTP header. + StringValues SecWebSocketAccept { get => this[HeaderNames.SecWebSocketAccept]; set => this[HeaderNames.SecWebSocketAccept] = value; } + + /// Gets or sets the Sec-WebSocket-Key HTTP header. + StringValues SecWebSocketKey { get => this[HeaderNames.SecWebSocketKey]; set => this[HeaderNames.SecWebSocketKey] = value; } + + /// Gets or sets the Sec-WebSocket-Protocol HTTP header. + StringValues SecWebSocketProtocol { get => this[HeaderNames.SecWebSocketProtocol]; set => this[HeaderNames.SecWebSocketProtocol] = value; } + + /// Gets or sets the Sec-WebSocket-Version HTTP header. + StringValues SecWebSocketVersion { get => this[HeaderNames.SecWebSocketVersion]; set => this[HeaderNames.SecWebSocketVersion] = value; } + + /// Gets or sets the Server HTTP header. + StringValues Server { get => this[HeaderNames.Server]; set => this[HeaderNames.Server] = value; } + + /// Gets or sets the Set-Cookie HTTP header. + StringValues SetCookie { get => this[HeaderNames.SetCookie]; set => this[HeaderNames.SetCookie] = value; } + + /// Gets or sets the Strict-Transport-Security HTTP header. + StringValues StrictTransportSecurity { get => this[HeaderNames.StrictTransportSecurity]; set => this[HeaderNames.StrictTransportSecurity] = value; } + + /// Gets or sets the TE HTTP header. + StringValues TE { get => this[HeaderNames.TE]; set => this[HeaderNames.TE] = value; } + + /// Gets or sets the Trailer HTTP header. + StringValues Trailer { get => this[HeaderNames.Trailer]; set => this[HeaderNames.Trailer] = value; } + + /// Gets or sets the Transfer-Encoding HTTP header. + StringValues TransferEncoding { get => this[HeaderNames.TransferEncoding]; set => this[HeaderNames.TransferEncoding] = value; } + + /// Gets or sets the Translate HTTP header. + StringValues Translate { get => this[HeaderNames.Translate]; set => this[HeaderNames.Translate] = value; } + + /// Gets or sets the traceparent HTTP header. + StringValues TraceParent { get => this[HeaderNames.TraceParent]; set => this[HeaderNames.TraceParent] = value; } + + /// Gets or sets the tracestate HTTP header. + StringValues TraceState { get => this[HeaderNames.TraceState]; set => this[HeaderNames.TraceState] = value; } + + /// Gets or sets the Upgrade HTTP header. + StringValues Upgrade { get => this[HeaderNames.Upgrade]; set => this[HeaderNames.Upgrade] = value; } + + /// Gets or sets the Upgrade-Insecure-Requests HTTP header. + StringValues UpgradeInsecureRequests { get => this[HeaderNames.UpgradeInsecureRequests]; set => this[HeaderNames.UpgradeInsecureRequests] = value; } + + /// Gets or sets the User-Agent HTTP header. + StringValues UserAgent { get => this[HeaderNames.UserAgent]; set => this[HeaderNames.UserAgent] = value; } + + /// Gets or sets the Vary HTTP header. + StringValues Vary { get => this[HeaderNames.Vary]; set => this[HeaderNames.Vary] = value; } + + /// Gets or sets the Via HTTP header. + StringValues Via { get => this[HeaderNames.Via]; set => this[HeaderNames.Via] = value; } + + /// Gets or sets the Warning HTTP header. + StringValues Warning { get => this[HeaderNames.Warning]; set => this[HeaderNames.Warning] = value; } + + /// Gets or sets the Sec-WebSocket-Protocol HTTP header. + StringValues WebSocketSubProtocols { get => this[HeaderNames.WebSocketSubProtocols]; set => this[HeaderNames.WebSocketSubProtocols] = value; } + + /// Gets or sets the WWW-Authenticate HTTP header. + StringValues WWWAuthenticate { get => this[HeaderNames.WWWAuthenticate]; set => this[HeaderNames.WWWAuthenticate] = value; } + + /// Gets or sets the X-Content-Type-Options HTTP header. + StringValues XContentTypeOptions { get => this[HeaderNames.XContentTypeOptions]; set => this[HeaderNames.XContentTypeOptions] = value; } + + /// Gets or sets the X-Frame-Options HTTP header. + StringValues XFrameOptions { get => this[HeaderNames.XFrameOptions]; set => this[HeaderNames.XFrameOptions] = value; } + + /// Gets or sets the X-Powered-By HTTP header. + StringValues XPoweredBy { get => this[HeaderNames.XPoweredBy]; set => this[HeaderNames.XPoweredBy] = value; } + + /// Gets or sets the X-Requested-With HTTP header. + StringValues XRequestedWith { get => this[HeaderNames.XRequestedWith]; set => this[HeaderNames.XRequestedWith] = value; } + + /// Gets or sets the X-UA-Compatible HTTP header. + StringValues XUACompatible { get => this[HeaderNames.XUACompatible]; set => this[HeaderNames.XUACompatible] = value; } + + /// Gets or sets the X-XSS-Protection HTTP header. + StringValues XXSSProtection { get => this[HeaderNames.XXSSProtection]; set => this[HeaderNames.XXSSProtection] = value; } + } +} diff --git a/src/Http/Http.Features/src/IHeaderDictionary.cs b/src/Http/Http.Features/src/IHeaderDictionary.cs index dfde3f33e31e..8762f532a108 100644 --- a/src/Http/Http.Features/src/IHeaderDictionary.cs +++ b/src/Http/Http.Features/src/IHeaderDictionary.cs @@ -9,7 +9,7 @@ namespace Microsoft.AspNetCore.Http /// /// Represents HttpRequest and HttpResponse headers /// - public interface IHeaderDictionary : IDictionary + public partial interface IHeaderDictionary : IDictionary { /// /// IHeaderDictionary has a different indexer contract than IDictionary, where it will return StringValues.Empty for missing entries. diff --git a/src/Http/Http.Features/src/Microsoft.AspNetCore.Http.Features.csproj b/src/Http/Http.Features/src/Microsoft.AspNetCore.Http.Features.csproj index e99431c56d8a..787ed9e942ad 100644 --- a/src/Http/Http.Features/src/Microsoft.AspNetCore.Http.Features.csproj +++ b/src/Http/Http.Features/src/Microsoft.AspNetCore.Http.Features.csproj @@ -13,6 +13,7 @@ + diff --git a/src/Http/Http.Features/src/PublicAPI.Unshipped.txt b/src/Http/Http.Features/src/PublicAPI.Unshipped.txt index 96694545899d..6911dbe5b627 100644 --- a/src/Http/Http.Features/src/PublicAPI.Unshipped.txt +++ b/src/Http/Http.Features/src/PublicAPI.Unshipped.txt @@ -37,6 +37,182 @@ *REMOVED*static readonly Microsoft.AspNetCore.Http.Features.FeatureReference.Default -> Microsoft.AspNetCore.Http.Features.FeatureReference *REMOVED*virtual Microsoft.AspNetCore.Http.Features.FeatureCollection.Revision.get -> int Microsoft.AspNetCore.Http.Features.IServerVariablesFeature.this[string! variableName].get -> string? +Microsoft.AspNetCore.Http.IHeaderDictionary.Accept.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.Accept.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.AcceptCharset.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.AcceptCharset.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.AcceptEncoding.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.AcceptEncoding.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.AcceptLanguage.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.AcceptLanguage.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.AcceptRanges.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.AcceptRanges.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.AccessControlAllowCredentials.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.AccessControlAllowCredentials.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.AccessControlAllowHeaders.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.AccessControlAllowHeaders.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.AccessControlAllowMethods.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.AccessControlAllowMethods.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.AccessControlAllowOrigin.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.AccessControlAllowOrigin.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.AccessControlExposeHeaders.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.AccessControlExposeHeaders.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.AccessControlMaxAge.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.AccessControlMaxAge.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.AccessControlRequestHeaders.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.AccessControlRequestHeaders.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.AccessControlRequestMethod.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.AccessControlRequestMethod.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.Age.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.Age.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.Allow.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.Allow.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.AltSvc.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.AltSvc.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.Authorization.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.Authorization.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.Baggage.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.Baggage.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.CacheControl.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.CacheControl.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.Connection.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.Connection.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.ContentDisposition.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.ContentDisposition.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.ContentEncoding.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.ContentEncoding.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.ContentLanguage.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.ContentLanguage.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.ContentLocation.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.ContentLocation.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.ContentMD5.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.ContentMD5.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.ContentRange.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.ContentRange.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.ContentSecurityPolicy.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.ContentSecurityPolicy.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.ContentSecurityPolicyReportOnly.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.ContentSecurityPolicyReportOnly.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.ContentType.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.ContentType.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.Cookie.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.Cookie.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.CorrelationContext.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.CorrelationContext.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.Date.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.Date.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.ETag.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.ETag.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.Expect.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.Expect.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.Expires.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.Expires.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.From.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.From.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.GrpcAcceptEncoding.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.GrpcAcceptEncoding.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.GrpcEncoding.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.GrpcEncoding.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.GrpcMessage.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.GrpcMessage.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.GrpcStatus.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.GrpcStatus.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.GrpcTimeout.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.GrpcTimeout.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.Host.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.Host.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.IfMatch.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.IfMatch.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.IfModifiedSince.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.IfModifiedSince.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.IfNoneMatch.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.IfNoneMatch.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.IfRange.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.IfRange.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.IfUnmodifiedSince.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.IfUnmodifiedSince.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.KeepAlive.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.KeepAlive.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.LastModified.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.LastModified.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.Link.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.Link.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.Location.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.Location.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.MaxForwards.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.MaxForwards.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.Origin.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.Origin.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.Pragma.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.Pragma.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.ProxyAuthenticate.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.ProxyAuthenticate.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.ProxyAuthorization.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.ProxyAuthorization.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.ProxyConnection.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.ProxyConnection.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.Range.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.Range.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.Referer.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.Referer.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.RequestId.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.RequestId.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.RetryAfter.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.RetryAfter.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.SecWebSocketAccept.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.SecWebSocketAccept.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.SecWebSocketKey.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.SecWebSocketKey.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.SecWebSocketProtocol.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.SecWebSocketProtocol.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.SecWebSocketVersion.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.SecWebSocketVersion.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.Server.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.Server.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.SetCookie.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.SetCookie.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.StrictTransportSecurity.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.StrictTransportSecurity.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.TE.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.TE.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.TraceParent.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.TraceParent.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.TraceState.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.TraceState.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.Trailer.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.Trailer.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.TransferEncoding.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.TransferEncoding.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.Translate.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.Translate.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.Upgrade.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.Upgrade.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.UpgradeInsecureRequests.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.UpgradeInsecureRequests.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.UserAgent.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.UserAgent.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.Vary.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.Vary.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.Via.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.Via.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.WWWAuthenticate.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.WWWAuthenticate.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.Warning.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.Warning.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.WebSocketSubProtocols.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.WebSocketSubProtocols.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.XContentTypeOptions.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.XContentTypeOptions.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.XFrameOptions.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.XFrameOptions.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.XPoweredBy.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.XPoweredBy.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.XRequestedWith.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.XRequestedWith.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.XUACompatible.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.XUACompatible.set -> void +Microsoft.AspNetCore.Http.IHeaderDictionary.XXSSProtection.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Http.IHeaderDictionary.XXSSProtection.set -> void Microsoft.AspNetCore.Http.ISession.TryGetValue(string! key, out byte[]? value) -> bool Microsoft.AspNetCore.Http.IResponseCookies.Append(System.ReadOnlySpan> keyValuePairs, Microsoft.AspNetCore.Http.CookieOptions! options) -> void Microsoft.AspNetCore.Http.Features.IFeatureCollection (forwarded, contained in Microsoft.Extensions.Features) diff --git a/src/Http/Http/src/Features/RequestCookiesFeature.cs b/src/Http/Http/src/Features/RequestCookiesFeature.cs index 16c0758fbaf8..e5d36d3bf8dd 100644 --- a/src/Http/Http/src/Features/RequestCookiesFeature.cs +++ b/src/Http/Http/src/Features/RequestCookiesFeature.cs @@ -66,11 +66,7 @@ public IRequestCookieCollection Cookies } var headers = HttpRequestFeature.Headers; - StringValues current; - if (!headers.TryGetValue(HeaderNames.Cookie, out current)) - { - current = string.Empty; - } + var current = headers.Cookie; if (_parsedValues == null || _original != current) { @@ -88,7 +84,7 @@ public IRequestCookieCollection Cookies { if (_parsedValues == null || _parsedValues.Count == 0) { - HttpRequestFeature.Headers.Remove(HeaderNames.Cookie); + HttpRequestFeature.Headers.Cookie = default; } else { @@ -98,7 +94,7 @@ public IRequestCookieCollection Cookies headers.Add(new CookieHeaderValue(pair.Key, pair.Value).ToString()); } _original = headers.ToArray(); - HttpRequestFeature.Headers[HeaderNames.Cookie] = _original; + HttpRequestFeature.Headers.Cookie = _original; } } } diff --git a/src/Http/Http/src/FormFile.cs b/src/Http/Http/src/FormFile.cs index 6a0dc1daf7d1..a70350954278 100644 --- a/src/Http/Http/src/FormFile.cs +++ b/src/Http/Http/src/FormFile.cs @@ -42,8 +42,8 @@ public FormFile(Stream baseStream, long baseStreamOffset, long length, string na /// public string ContentDisposition { - get { return Headers[HeaderNames.ContentDisposition]; } - set { Headers[HeaderNames.ContentDisposition] = value; } + get { return Headers.ContentDisposition; } + set { Headers.ContentDisposition = value; } } /// @@ -51,8 +51,8 @@ public string ContentDisposition /// public string ContentType { - get { return Headers[HeaderNames.ContentType]; } - set { Headers[HeaderNames.ContentType] = value; } + get { return Headers.ContentType; } + set { Headers.ContentType = value; } } /// diff --git a/src/Http/Http/src/Internal/DefaultHttpRequest.cs b/src/Http/Http/src/Internal/DefaultHttpRequest.cs index 80ba2bd63104..e47030909806 100644 --- a/src/Http/Http/src/Internal/DefaultHttpRequest.cs +++ b/src/Http/Http/src/Internal/DefaultHttpRequest.cs @@ -119,8 +119,8 @@ public override bool IsHttps public override HostString Host { - get { return HostString.FromUriComponent(Headers[HeaderNames.Host]); } - set { Headers[HeaderNames.Host] = value.ToUriComponent(); } + get { return HostString.FromUriComponent(Headers.Host); } + set { Headers.Host = value.ToUriComponent(); } } public override IQueryCollection Query @@ -148,8 +148,8 @@ public override IRequestCookieCollection Cookies public override string ContentType { - get { return Headers[HeaderNames.ContentType]; } - set { Headers[HeaderNames.ContentType] = value; } + get { return Headers.ContentType; } + set { Headers.ContentType = value; } } public override bool HasFormContentType diff --git a/src/Http/Http/src/Internal/DefaultHttpResponse.cs b/src/Http/Http/src/Internal/DefaultHttpResponse.cs index 554616bd7536..6803d9421c19 100644 --- a/src/Http/Http/src/Internal/DefaultHttpResponse.cs +++ b/src/Http/Http/src/Internal/DefaultHttpResponse.cs @@ -94,17 +94,17 @@ public override string ContentType { get { - return Headers[HeaderNames.ContentType]; + return Headers.ContentType; } set { if (string.IsNullOrEmpty(value)) { - HttpResponseFeature.Headers.Remove(HeaderNames.ContentType); + HttpResponseFeature.Headers.ContentType = default; } else { - HttpResponseFeature.Headers[HeaderNames.ContentType] = value; + HttpResponseFeature.Headers.ContentType = value; } } } @@ -155,7 +155,7 @@ public override void Redirect(string location, bool permanent) HttpResponseFeature.StatusCode = 302; } - Headers[HeaderNames.Location] = location; + Headers.Location = location; } public override Task StartAsync(CancellationToken cancellationToken = default) diff --git a/src/Http/Http/src/Internal/ResponseCookies.cs b/src/Http/Http/src/Internal/ResponseCookies.cs index e7466c6a6ecb..26c1de655ebb 100644 --- a/src/Http/Http/src/Internal/ResponseCookies.cs +++ b/src/Http/Http/src/Internal/ResponseCookies.cs @@ -44,7 +44,7 @@ public void Append(string key, string value) }; var cookieValue = setCookieHeaderValue.ToString(); - Headers[HeaderNames.SetCookie] = StringValues.Concat(Headers[HeaderNames.SetCookie], cookieValue); + Headers.SetCookie = StringValues.Concat(Headers.SetCookie, cookieValue); } /// @@ -85,7 +85,7 @@ public void Append(string key, string value, CookieOptions options) var cookieValue = setCookieHeaderValue.ToString(); - Headers[HeaderNames.SetCookie] = StringValues.Concat(Headers[HeaderNames.SetCookie], cookieValue); + Headers.SetCookie = StringValues.Concat(Headers.SetCookie, cookieValue); } /// @@ -175,7 +175,7 @@ public void Delete(string key, CookieOptions options) rejectPredicate = (value, encKeyPlusEquals, opts) => value.StartsWith(encKeyPlusEquals, StringComparison.OrdinalIgnoreCase); } - var existingValues = Headers[HeaderNames.SetCookie]; + var existingValues = Headers.SetCookie; if (!StringValues.IsNullOrEmpty(existingValues)) { var values = existingValues.ToArray(); @@ -189,7 +189,7 @@ public void Delete(string key, CookieOptions options) } } - Headers[HeaderNames.SetCookie] = new StringValues(newValues.ToArray()); + Headers.SetCookie = new StringValues(newValues.ToArray()); } Append(key, string.Empty, new CookieOptions diff --git a/src/Http/Http/test/ResponseCookiesTest.cs b/src/Http/Http/test/ResponseCookiesTest.cs index 5acf74b09464..a0a224b29fd9 100644 --- a/src/Http/Http/test/ResponseCookiesTest.cs +++ b/src/Http/Http/test/ResponseCookiesTest.cs @@ -27,7 +27,7 @@ private IFeatureCollection MakeFeatures(IHeaderDictionary headers) [Fact] public void AppendSameSiteNoneWithoutSecureLogsWarning() { - var headers = new HeaderDictionary(); + var headers = (IHeaderDictionary)new HeaderDictionary(); var features = MakeFeatures(headers); var services = new ServiceCollection(); @@ -46,7 +46,7 @@ public void AppendSameSiteNoneWithoutSecureLogsWarning() SameSite = SameSiteMode.None, }); - var cookieHeaderValues = headers[HeaderNames.SetCookie]; + var cookieHeaderValues = headers.SetCookie; Assert.Single(cookieHeaderValues); Assert.StartsWith(testCookie, cookieHeaderValues[0]); Assert.Contains("path=/", cookieHeaderValues[0]); @@ -60,14 +60,14 @@ public void AppendSameSiteNoneWithoutSecureLogsWarning() [Fact] public void DeleteCookieShouldSetDefaultPath() { - var headers = new HeaderDictionary(); + var headers = (IHeaderDictionary)new HeaderDictionary(); var features = MakeFeatures(headers); var cookies = new ResponseCookies(features); var testCookie = "TestCookie"; cookies.Delete(testCookie); - var cookieHeaderValues = headers[HeaderNames.SetCookie]; + var cookieHeaderValues = headers.SetCookie; Assert.Single(cookieHeaderValues); Assert.StartsWith(testCookie, cookieHeaderValues[0]); Assert.Contains("path=/", cookieHeaderValues[0]); @@ -77,7 +77,7 @@ public void DeleteCookieShouldSetDefaultPath() [Fact] public void DeleteCookieWithCookieOptionsShouldKeepPropertiesOfCookieOptions() { - var headers = new HeaderDictionary(); + var headers = (IHeaderDictionary)new HeaderDictionary(); var features = MakeFeatures(headers); var cookies = new ResponseCookies(features); var testCookie = "TestCookie"; @@ -94,7 +94,7 @@ public void DeleteCookieWithCookieOptionsShouldKeepPropertiesOfCookieOptions() cookies.Delete(testCookie, options); - var cookieHeaderValues = headers[HeaderNames.SetCookie]; + var cookieHeaderValues = headers.SetCookie; Assert.Single(cookieHeaderValues); Assert.StartsWith(testCookie, cookieHeaderValues[0]); Assert.Contains("path=/", cookieHeaderValues[0]); @@ -107,7 +107,7 @@ public void DeleteCookieWithCookieOptionsShouldKeepPropertiesOfCookieOptions() [Fact] public void NoParamsDeleteRemovesCookieCreatedByAdd() { - var headers = new HeaderDictionary(); + var headers = (IHeaderDictionary)new HeaderDictionary(); var features = MakeFeatures(headers); var cookies = new ResponseCookies(features); var testCookie = "TestCookie"; @@ -115,7 +115,7 @@ public void NoParamsDeleteRemovesCookieCreatedByAdd() cookies.Append(testCookie, testCookie); cookies.Delete(testCookie); - var cookieHeaderValues = headers[HeaderNames.SetCookie]; + var cookieHeaderValues = headers.SetCookie; Assert.Single(cookieHeaderValues); Assert.StartsWith(testCookie, cookieHeaderValues[0]); Assert.Contains("path=/", cookieHeaderValues[0]); @@ -125,7 +125,7 @@ public void NoParamsDeleteRemovesCookieCreatedByAdd() [Fact] public void ProvidesMaxAgeWithCookieOptionsArgumentExpectMaxAgeToBeSet() { - var headers = new HeaderDictionary(); + var headers = (IHeaderDictionary)new HeaderDictionary(); var features = MakeFeatures(headers); var cookies = new ResponseCookies(features); var cookieOptions = new CookieOptions(); @@ -135,7 +135,7 @@ public void ProvidesMaxAgeWithCookieOptionsArgumentExpectMaxAgeToBeSet() cookies.Append(testCookie, testCookie, cookieOptions); - var cookieHeaderValues = headers[HeaderNames.SetCookie]; + var cookieHeaderValues = headers.SetCookie; Assert.Single(cookieHeaderValues); Assert.Contains($"max-age={maxAgeTime.TotalSeconds}", cookieHeaderValues[0]); } @@ -147,13 +147,13 @@ public void ProvidesMaxAgeWithCookieOptionsArgumentExpectMaxAgeToBeSet() [InlineData("QUI+REU/Rw==", "key=QUI%2BREU%2FRw%3D%3D")] public void EscapesValuesBeforeSettingCookie(string value, string expected) { - var headers = new HeaderDictionary(); + var headers = (IHeaderDictionary)new HeaderDictionary(); var features = MakeFeatures(headers); var cookies = new ResponseCookies(features); cookies.Append("key", value); - var cookieHeaderValues = headers[HeaderNames.SetCookie]; + var cookieHeaderValues = headers.SetCookie; Assert.Single(cookieHeaderValues); Assert.StartsWith(expected, cookieHeaderValues[0]); } @@ -177,14 +177,14 @@ public void InvalidKeysThrow(string key) [InlineData("base64", "QUI+REU/Rw==", "base64=QUI%2BREU%2FRw%3D%3D")] public void AppContextSwitchEscapesKeysAndValuesBeforeSettingCookie(string key, string value, string expected) { - var headers = new HeaderDictionary(); + var headers = (IHeaderDictionary)new HeaderDictionary(); var features = MakeFeatures(headers); var cookies = new ResponseCookies(features); cookies._enableCookieNameEncoding = true; cookies.Append(key, value); - var cookieHeaderValues = headers[HeaderNames.SetCookie]; + var cookieHeaderValues = headers.SetCookie; Assert.Single(cookieHeaderValues); Assert.StartsWith(expected, cookieHeaderValues[0]); } diff --git a/src/Http/Routing/src/Matching/HttpMethodMatcherPolicy.cs b/src/Http/Routing/src/Matching/HttpMethodMatcherPolicy.cs index 2560e2408a23..8624af97a7ab 100644 --- a/src/Http/Routing/src/Matching/HttpMethodMatcherPolicy.cs +++ b/src/Http/Routing/src/Matching/HttpMethodMatcherPolicy.cs @@ -414,7 +414,7 @@ private Endpoint CreateRejectionEndpoint(IEnumerable httpMethods) // Prevent ArgumentException from duplicate key if header already added, such as when the // request is re-executed by an error handler (see https://github.com/dotnet/aspnetcore/issues/6415) - context.Response.Headers[HeaderNames.Allow] = allow; + context.Response.Headers.Allow = allow; return Task.CompletedTask; }, diff --git a/src/Identity/ApiAuthorization.IdentityServer/test/Extensions/AutoRedirectEndSessionEndpointTests.cs b/src/Identity/ApiAuthorization.IdentityServer/test/Extensions/AutoRedirectEndSessionEndpointTests.cs index ee8f1334ebf5..389e83621787 100644 --- a/src/Identity/ApiAuthorization.IdentityServer/test/Extensions/AutoRedirectEndSessionEndpointTests.cs +++ b/src/Identity/ApiAuthorization.IdentityServer/test/Extensions/AutoRedirectEndSessionEndpointTests.cs @@ -63,7 +63,7 @@ public async Task AutoRedirectSessionEndpoint_AutoRedirectsValidatedPostLogoutRe Assert.Equal("https://www.example.com/logout", redirect.Url); await response.ExecuteAsync(ctx); Assert.Equal(StatusCodes.Status302Found, ctx.Response.StatusCode); - Assert.Equal("https://www.example.com/logout", ctx.Response.Headers[HeaderNames.Location]); + Assert.Equal("https://www.example.com/logout", ctx.Response.Headers.Location); } [Fact] @@ -106,7 +106,7 @@ public async Task AutoRedirectSessionEndpoint_AutoRedirectsValidatedGetLogoutReq await response.ExecuteAsync(ctx); Assert.Equal(StatusCodes.Status302Found, ctx.Response.StatusCode); - Assert.Equal("https://www.example.com/logout?state=appState", ctx.Response.Headers[HeaderNames.Location]); + Assert.Equal("https://www.example.com/logout?state=appState", ctx.Response.Headers.Location); } [Fact] @@ -144,7 +144,7 @@ public async Task AutoRedirectSessionEndpoint_RedirectsToError_WhenValidationFai Assert.Equal("/Identity/Error", redirect.Url); await response.ExecuteAsync(ctx); Assert.Equal(StatusCodes.Status302Found, ctx.Response.StatusCode); - Assert.Equal("/Identity/Error", ctx.Response.Headers[HeaderNames.Location]); + Assert.Equal("/Identity/Error", ctx.Response.Headers.Location); } [Fact] @@ -185,7 +185,7 @@ public async Task AutoRedirectSessionEndpoint_RedirectsToLogoutUri_WhenClientDoe Assert.Equal("/Identity/Account/Logout", redirect.Url); await response.ExecuteAsync(ctx); Assert.Equal(StatusCodes.Status302Found, ctx.Response.StatusCode); - Assert.Equal("/Identity/Account/Logout", ctx.Response.Headers[HeaderNames.Location]); + Assert.Equal("/Identity/Account/Logout", ctx.Response.Headers.Location); } [Fact] @@ -223,7 +223,7 @@ public async Task AutoRedirectSessionEndpoint_RedirectsToLogoutUri_WhenTheValida Assert.Equal("/Identity/Account/Logout", redirect.Url); await response.ExecuteAsync(ctx); Assert.Equal(StatusCodes.Status302Found, ctx.Response.StatusCode); - Assert.Equal("/Identity/Account/Logout", ctx.Response.Headers[HeaderNames.Location]); + Assert.Equal("/Identity/Account/Logout", ctx.Response.Headers.Location); } [Theory] diff --git a/src/Middleware/HostFiltering/src/HostFilteringMiddleware.cs b/src/Middleware/HostFiltering/src/HostFilteringMiddleware.cs index 749d83391787..8241d1cba7b9 100644 --- a/src/Middleware/HostFiltering/src/HostFilteringMiddleware.cs +++ b/src/Middleware/HostFiltering/src/HostFilteringMiddleware.cs @@ -160,7 +160,7 @@ private bool IsTopLevelWildcard(string host) [MethodImpl(MethodImplOptions.AggressiveInlining)] private bool CheckHost(HttpContext context, IList allowedHosts) { - var host = context.Request.Headers[HeaderNames.Host].ToString(); + var host = context.Request.Headers.Host.ToString(); if (host.Length == 0) { diff --git a/src/Middleware/HostFiltering/test/HostFilteringMiddlewareTests.cs b/src/Middleware/HostFiltering/test/HostFilteringMiddlewareTests.cs index 4076b5bd6bf9..b8a20a71fc47 100644 --- a/src/Middleware/HostFiltering/test/HostFilteringMiddlewareTests.cs +++ b/src/Middleware/HostFiltering/test/HostFilteringMiddlewareTests.cs @@ -101,7 +101,7 @@ public async Task AllowsEmptyHost(bool allowed, int status) { app.Use((ctx, next) => { - ctx.Request.Headers[HeaderNames.Host] = ""; + ctx.Request.Headers.Host = ""; return next(ctx); }); app.UseHostFiltering(); @@ -158,7 +158,7 @@ public async Task AllowsSpecifiedHost(string hosturl, string allowedHost) { // TestHost's ClientHandler doesn't let you set the host header, only the host in the URI // and that would over-normalize some of our test conditions like casing. - ctx.Request.Headers[HeaderNames.Host] = hosturl; + ctx.Request.Headers.Host = hosturl; return next(ctx); }); app.UseHostFiltering(); @@ -210,7 +210,7 @@ public async Task RejectsMismatchedHosts(string hosturl, string allowedHost) { // TestHost's ClientHandler doesn't let you set the host header, only the host in the URI // and that would reject some of our test conditions. - ctx.Request.Headers[HeaderNames.Host] = hosturl; + ctx.Request.Headers.Host = hosturl; return next(ctx); }); app.UseHostFiltering(); @@ -249,7 +249,7 @@ public async Task SupportsDynamicOptionsReload() { app.Use((ctx, next) => { - ctx.Request.Headers[HeaderNames.Host] = currentHost; + ctx.Request.Headers.Host = currentHost; return next(ctx); }); app.UseHostFiltering(); diff --git a/src/Middleware/HttpOverrides/test/ForwardedHeadersMiddlewareTest.cs b/src/Middleware/HttpOverrides/test/ForwardedHeadersMiddlewareTest.cs index 71c78b79926f..1ea6cc11a384 100644 --- a/src/Middleware/HttpOverrides/test/ForwardedHeadersMiddlewareTest.cs +++ b/src/Middleware/HttpOverrides/test/ForwardedHeadersMiddlewareTest.cs @@ -502,7 +502,7 @@ public async Task XForwardedHostAllowsSpecifiedHost(string hostHeader, string al }); app.Run(context => { - Assert.Equal(hostHeader, context.Request.Headers[HeaderNames.Host]); + Assert.Equal(hostHeader, context.Request.Headers.Host); assertsExecuted = true; return Task.FromResult(0); }); @@ -553,7 +553,7 @@ public async Task XForwardedHostFailsMismatchedHosts(string hostHeader, string a }); app.Run(context => { - Assert.NotEqual(hostHeader, context.Request.Headers[HeaderNames.Host]); + Assert.NotEqual(hostHeader, context.Request.Headers.Host); assertsExecuted = true; return Task.FromResult(0); }); @@ -589,7 +589,7 @@ public async Task XForwardedHostStopsAtFirstUnspecifiedHost() }); app.Run(context => { - Assert.Equal("bar.foo.com:432", context.Request.Headers[HeaderNames.Host]); + Assert.Equal("bar.foo.com:432", context.Request.Headers.Host); assertsExecuted = true; return Task.FromResult(0); }); diff --git a/src/Middleware/HttpsPolicy/src/HstsMiddleware.cs b/src/Middleware/HttpsPolicy/src/HstsMiddleware.cs index 7deeb2ff0881..ec36df97ee3d 100644 --- a/src/Middleware/HttpsPolicy/src/HstsMiddleware.cs +++ b/src/Middleware/HttpsPolicy/src/HstsMiddleware.cs @@ -80,7 +80,7 @@ public Task Invoke(HttpContext context) return _next(context); } - context.Response.Headers[HeaderNames.StrictTransportSecurity] = _strictTransportSecurityValue; + context.Response.Headers.StrictTransportSecurity = _strictTransportSecurityValue; _logger.AddingHstsHeader(); return _next(context); diff --git a/src/Middleware/HttpsPolicy/src/HttpsRedirectionMiddleware.cs b/src/Middleware/HttpsPolicy/src/HttpsRedirectionMiddleware.cs index 215507912f3e..6646b3396b42 100644 --- a/src/Middleware/HttpsPolicy/src/HttpsRedirectionMiddleware.cs +++ b/src/Middleware/HttpsPolicy/src/HttpsRedirectionMiddleware.cs @@ -110,7 +110,7 @@ public Task Invoke(HttpContext context) request.QueryString); context.Response.StatusCode = _statusCode; - context.Response.Headers[HeaderNames.Location] = redirectUrl; + context.Response.Headers.Location = redirectUrl; _logger.RedirectingToHttps(redirectUrl); diff --git a/src/Middleware/Localization/testassets/LocalizationWebsite/StartupContentLanguageHeader.cs b/src/Middleware/Localization/testassets/LocalizationWebsite/StartupContentLanguageHeader.cs index 849743184c1e..8df0ed19aeb3 100644 --- a/src/Middleware/Localization/testassets/LocalizationWebsite/StartupContentLanguageHeader.cs +++ b/src/Middleware/Localization/testassets/LocalizationWebsite/StartupContentLanguageHeader.cs @@ -38,7 +38,7 @@ public void Configure( app.Run(async (context) => { var hasContentLanguageHeader = context.Response.Headers.ContainsKey(HeaderNames.ContentLanguage); - var contentLanguage = context.Response.Headers[HeaderNames.ContentLanguage].ToString(); + var contentLanguage = context.Response.Headers.ContentLanguage.ToString(); await context.Response.WriteAsync(hasContentLanguageHeader.ToString()); await context.Response.WriteAsync(" "); diff --git a/src/Middleware/ResponseCaching/samples/ResponseCachingSample/Startup.cs b/src/Middleware/ResponseCaching/samples/ResponseCachingSample/Startup.cs index 3d691a3db4f0..5ca8a27ae16c 100644 --- a/src/Middleware/ResponseCaching/samples/ResponseCachingSample/Startup.cs +++ b/src/Middleware/ResponseCaching/samples/ResponseCachingSample/Startup.cs @@ -30,7 +30,7 @@ public void Configure(IApplicationBuilder app) Public = true, MaxAge = TimeSpan.FromSeconds(10) }; - context.Response.Headers[HeaderNames.Vary] = new string[] { "Accept-Encoding" }; + context.Response.Headers.Vary = new string[] { "Accept-Encoding" }; await context.Response.WriteAsync("Hello World! " + DateTime.UtcNow); }); diff --git a/src/Middleware/ResponseCaching/src/ResponseCachingContext.cs b/src/Middleware/ResponseCaching/src/ResponseCachingContext.cs index 88e18d42b069..4cc789aa6ff7 100644 --- a/src/Middleware/ResponseCaching/src/ResponseCachingContext.cs +++ b/src/Middleware/ResponseCaching/src/ResponseCachingContext.cs @@ -65,7 +65,7 @@ internal DateTimeOffset? ResponseDate { _parsedResponseDate = true; DateTimeOffset date; - if (HeaderUtilities.TryParseDate(HttpContext.Response.Headers[HeaderNames.Date].ToString(), out date)) + if (HeaderUtilities.TryParseDate(HttpContext.Response.Headers.Date.ToString(), out date)) { _responseDate = date; } @@ -92,7 +92,7 @@ internal DateTimeOffset? ResponseExpires { _parsedResponseExpires = true; DateTimeOffset expires; - if (HeaderUtilities.TryParseDate(HttpContext.Response.Headers[HeaderNames.Expires].ToString(), out expires)) + if (HeaderUtilities.TryParseDate(HttpContext.Response.Headers.Expires.ToString(), out expires)) { _responseExpires = expires; } @@ -112,7 +112,7 @@ internal TimeSpan? ResponseSharedMaxAge if (!_parsedResponseSharedMaxAge) { _parsedResponseSharedMaxAge = true; - HeaderUtilities.TryParseSeconds(HttpContext.Response.Headers[HeaderNames.CacheControl], CacheControlHeaderValue.SharedMaxAgeString, out _responseSharedMaxAge); + HeaderUtilities.TryParseSeconds(HttpContext.Response.Headers.CacheControl, CacheControlHeaderValue.SharedMaxAgeString, out _responseSharedMaxAge); } return _responseSharedMaxAge; } @@ -125,7 +125,7 @@ internal TimeSpan? ResponseMaxAge if (!_parsedResponseMaxAge) { _parsedResponseMaxAge = true; - HeaderUtilities.TryParseSeconds(HttpContext.Response.Headers[HeaderNames.CacheControl], CacheControlHeaderValue.MaxAgeString, out _responseMaxAge); + HeaderUtilities.TryParseSeconds(HttpContext.Response.Headers.CacheControl, CacheControlHeaderValue.MaxAgeString, out _responseMaxAge); } return _responseMaxAge; } diff --git a/src/Middleware/ResponseCaching/src/ResponseCachingMiddleware.cs b/src/Middleware/ResponseCaching/src/ResponseCachingMiddleware.cs index ad8998dcd3a7..2a58756cff5c 100644 --- a/src/Middleware/ResponseCaching/src/ResponseCachingMiddleware.cs +++ b/src/Middleware/ResponseCaching/src/ResponseCachingMiddleware.cs @@ -199,7 +199,7 @@ internal async Task TryServeCachedResponseAsync(ResponseCachingContext con // Note: int64 division truncates result and errors may be up to 1 second. This reduction in // accuracy of age calculation is considered appropriate since it is small compared to clock // skews and the "Age" header is an estimate of the real age of cached content. - response.Headers[HeaderNames.Age] = HeaderUtilities.FormatNonNegativeInt64(context.CachedEntryAge.Value.Ticks / TimeSpan.TicksPerSecond); + response.Headers.Age = HeaderUtilities.FormatNonNegativeInt64(context.CachedEntryAge.Value.Ticks / TimeSpan.TicksPerSecond); // Copy the cached response body var body = context.CachedResponse.Body; @@ -248,7 +248,7 @@ internal async Task TryServeFromCacheAsync(ResponseCachingContext context) } } - if (HeaderUtilities.ContainsCacheDirective(context.HttpContext.Request.Headers[HeaderNames.CacheControl], CacheControlHeaderValue.OnlyIfCachedString)) + if (HeaderUtilities.ContainsCacheDirective(context.HttpContext.Request.Headers.CacheControl, CacheControlHeaderValue.OnlyIfCachedString)) { _logger.GatewayTimeoutServed(); context.HttpContext.Response.StatusCode = StatusCodes.Status504GatewayTimeout; @@ -319,7 +319,7 @@ private bool OnFinalizeCacheHeaders(ResponseCachingContext context) { context.ResponseDate = context.ResponseTime!.Value; // Setting the date on the raw response headers. - context.HttpContext.Response.Headers[HeaderNames.Date] = HeaderUtilities.FormatDate(context.ResponseDate.Value); + context.HttpContext.Response.Headers.Date = HeaderUtilities.FormatDate(context.ResponseDate.Value); } // Store the response on the state @@ -365,9 +365,9 @@ internal void FinalizeCacheBody(ResponseCachingContext context) { var response = context.HttpContext.Response; // Add a content-length if required - if (!response.ContentLength.HasValue && StringValues.IsNullOrEmpty(response.Headers[HeaderNames.TransferEncoding])) + if (!response.ContentLength.HasValue && StringValues.IsNullOrEmpty(response.Headers.TransferEncoding)) { - context.CachedResponse.Headers[HeaderNames.ContentLength] = HeaderUtilities.FormatNonNegativeInt64(cachedResponseBody.Length); + context.CachedResponse.Headers.ContentLength = cachedResponseBody.Length; } context.CachedResponse.Body = cachedResponseBody; @@ -449,7 +449,7 @@ internal static void UnshimResponseStream(ResponseCachingContext context) internal static bool ContentIsNotModified(ResponseCachingContext context) { var cachedResponseHeaders = context.CachedResponseHeaders; - var ifNoneMatchHeader = context.HttpContext.Request.Headers[HeaderNames.IfNoneMatch]; + var ifNoneMatchHeader = context.HttpContext.Request.Headers.IfNoneMatch; if (!StringValues.IsNullOrEmpty(ifNoneMatchHeader)) { @@ -477,7 +477,7 @@ internal static bool ContentIsNotModified(ResponseCachingContext context) } else { - var ifModifiedSince = context.HttpContext.Request.Headers[HeaderNames.IfModifiedSince]; + var ifModifiedSince = context.HttpContext.Request.Headers.IfModifiedSince; if (!StringValues.IsNullOrEmpty(ifModifiedSince)) { DateTimeOffset modified; diff --git a/src/Middleware/ResponseCaching/src/ResponseCachingPolicyProvider.cs b/src/Middleware/ResponseCaching/src/ResponseCachingPolicyProvider.cs index 48b1895c453c..6e1090852992 100644 --- a/src/Middleware/ResponseCaching/src/ResponseCachingPolicyProvider.cs +++ b/src/Middleware/ResponseCaching/src/ResponseCachingPolicyProvider.cs @@ -22,7 +22,7 @@ public virtual bool AttemptResponseCaching(ResponseCachingContext context) } // Verify existence of authorization headers - if (!StringValues.IsNullOrEmpty(request.Headers[HeaderNames.Authorization])) + if (!StringValues.IsNullOrEmpty(request.Headers.Authorization)) { context.Logger.RequestWithAuthorizationNotCacheable(); return false; @@ -61,12 +61,12 @@ public virtual bool AllowCacheLookup(ResponseCachingContext context) public virtual bool AllowCacheStorage(ResponseCachingContext context) { // Check request no-store - return !HeaderUtilities.ContainsCacheDirective(context.HttpContext.Request.Headers[HeaderNames.CacheControl], CacheControlHeaderValue.NoStoreString); + return !HeaderUtilities.ContainsCacheDirective(context.HttpContext.Request.Headers.CacheControl, CacheControlHeaderValue.NoStoreString); } public virtual bool IsResponseCacheable(ResponseCachingContext context) { - var responseCacheControlHeader = context.HttpContext.Response.Headers[HeaderNames.CacheControl]; + var responseCacheControlHeader = context.HttpContext.Response.Headers.CacheControl; // Only cache pages explicitly marked with public if (!HeaderUtilities.ContainsCacheDirective(responseCacheControlHeader, CacheControlHeaderValue.PublicString)) @@ -92,14 +92,14 @@ public virtual bool IsResponseCacheable(ResponseCachingContext context) var response = context.HttpContext.Response; // Do not cache responses with Set-Cookie headers - if (!StringValues.IsNullOrEmpty(response.Headers[HeaderNames.SetCookie])) + if (!StringValues.IsNullOrEmpty(response.Headers.SetCookie)) { context.Logger.ResponseWithSetCookieNotCacheable(); return false; } // Do not cache responses varying by * - var varyHeader = response.Headers[HeaderNames.Vary]; + var varyHeader = response.Headers.Vary; if (varyHeader.Count == 1 && string.Equals(varyHeader, "*", StringComparison.OrdinalIgnoreCase)) { context.Logger.ResponseWithVaryStarNotCacheable(); @@ -168,7 +168,7 @@ public virtual bool IsCachedEntryFresh(ResponseCachingContext context) { var age = context.CachedEntryAge!.Value; var cachedCacheControlHeaders = context.CachedResponseHeaders[HeaderNames.CacheControl]; - var requestCacheControlHeaders = context.HttpContext.Request.Headers[HeaderNames.CacheControl]; + var requestCacheControlHeaders = context.HttpContext.Request.Headers.CacheControl; // Add min-fresh requirements if (HeaderUtilities.TryParseSeconds(requestCacheControlHeaders, CacheControlHeaderValue.MinFreshString, out var minFresh)) diff --git a/src/Middleware/ResponseCaching/test/ResponseCachingMiddlewareTests.cs b/src/Middleware/ResponseCaching/test/ResponseCachingMiddlewareTests.cs index d0f732da6199..4a475691b3f3 100644 --- a/src/Middleware/ResponseCaching/test/ResponseCachingMiddlewareTests.cs +++ b/src/Middleware/ResponseCaching/test/ResponseCachingMiddlewareTests.cs @@ -23,7 +23,7 @@ public async Task TryServeFromCacheAsync_OnlyIfCached_Serves504() var sink = new TestSink(); var middleware = TestUtils.CreateTestMiddleware(testSink: sink, cache: cache, keyProvider: new TestResponseCachingKeyProvider()); var context = TestUtils.CreateTestContext(); - context.HttpContext.Request.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Request.Headers.CacheControl = new CacheControlHeaderValue() { OnlyIfCached = true }.ToString(); @@ -158,7 +158,7 @@ public async Task TryServeFromCacheAsync_CachedResponseFound_Serves304IfPossible var sink = new TestSink(); var middleware = TestUtils.CreateTestMiddleware(testSink: sink, cache: cache, keyProvider: new TestResponseCachingKeyProvider("BaseKey")); var context = TestUtils.CreateTestContext(); - context.HttpContext.Request.Headers[HeaderNames.IfNoneMatch] = "*"; + context.HttpContext.Request.Headers.IfNoneMatch = "*"; cache.Set( "BaseKey", @@ -194,7 +194,7 @@ public void ContentIsNotModified_IfModifiedSince_FallsbackToDateHeader() var context = TestUtils.CreateTestContext(sink); context.CachedResponseHeaders = new HeaderDictionary(); - context.HttpContext.Request.Headers[HeaderNames.IfModifiedSince] = HeaderUtilities.FormatDate(utcNow); + context.HttpContext.Request.Headers.IfModifiedSince = HeaderUtilities.FormatDate(utcNow); // Verify modifications in the past succeeds context.CachedResponseHeaders[HeaderNames.Date] = HeaderUtilities.FormatDate(utcNow - TimeSpan.FromSeconds(10)); @@ -225,7 +225,7 @@ public void ContentIsNotModified_IfModifiedSince_LastModifiedOverridesDateHeader var context = TestUtils.CreateTestContext(sink); context.CachedResponseHeaders = new HeaderDictionary(); - context.HttpContext.Request.Headers[HeaderNames.IfModifiedSince] = HeaderUtilities.FormatDate(utcNow); + context.HttpContext.Request.Headers.IfModifiedSince = HeaderUtilities.FormatDate(utcNow); // Verify modifications in the past succeeds context.CachedResponseHeaders[HeaderNames.Date] = HeaderUtilities.FormatDate(utcNow + TimeSpan.FromSeconds(10)); @@ -260,10 +260,10 @@ public void ContentIsNotModified_IfNoneMatch_Overrides_IfModifiedSince_ToTrue() context.CachedResponseHeaders = new HeaderDictionary(); // This would fail the IfModifiedSince checks - context.HttpContext.Request.Headers[HeaderNames.IfModifiedSince] = HeaderUtilities.FormatDate(utcNow); + context.HttpContext.Request.Headers.IfModifiedSince = HeaderUtilities.FormatDate(utcNow); context.CachedResponseHeaders[HeaderNames.LastModified] = HeaderUtilities.FormatDate(utcNow + TimeSpan.FromSeconds(10)); - context.HttpContext.Request.Headers[HeaderNames.IfNoneMatch] = EntityTagHeaderValue.Any.ToString(); + context.HttpContext.Request.Headers.IfNoneMatch = EntityTagHeaderValue.Any.ToString(); Assert.True(ResponseCachingMiddleware.ContentIsNotModified(context)); TestUtils.AssertLoggedMessages( sink.Writes, @@ -279,10 +279,10 @@ public void ContentIsNotModified_IfNoneMatch_Overrides_IfModifiedSince_ToFalse() context.CachedResponseHeaders = new HeaderDictionary(); // This would pass the IfModifiedSince checks - context.HttpContext.Request.Headers[HeaderNames.IfModifiedSince] = HeaderUtilities.FormatDate(utcNow); + context.HttpContext.Request.Headers.IfModifiedSince = HeaderUtilities.FormatDate(utcNow); context.CachedResponseHeaders[HeaderNames.LastModified] = HeaderUtilities.FormatDate(utcNow - TimeSpan.FromSeconds(10)); - context.HttpContext.Request.Headers[HeaderNames.IfNoneMatch] = "\"E1\""; + context.HttpContext.Request.Headers.IfNoneMatch = "\"E1\""; Assert.False(ResponseCachingMiddleware.ContentIsNotModified(context)); Assert.Empty(sink.Writes); } @@ -293,7 +293,7 @@ public void ContentIsNotModified_IfNoneMatch_AnyWithoutETagInResponse_False() var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); context.CachedResponseHeaders = new HeaderDictionary(); - context.HttpContext.Request.Headers[HeaderNames.IfNoneMatch] = "\"E1\""; + context.HttpContext.Request.Headers.IfNoneMatch = "\"E1\""; Assert.False(ResponseCachingMiddleware.ContentIsNotModified(context)); Assert.Empty(sink.Writes); @@ -321,7 +321,7 @@ public void ContentIsNotModified_IfNoneMatch_ExplicitWithMatch_True(EntityTagHe var context = TestUtils.CreateTestContext(sink); context.CachedResponseHeaders = new HeaderDictionary(); context.CachedResponseHeaders[HeaderNames.ETag] = responseETag.ToString(); - context.HttpContext.Request.Headers[HeaderNames.IfNoneMatch] = requestETag.ToString(); + context.HttpContext.Request.Headers.IfNoneMatch = requestETag.ToString(); Assert.True(ResponseCachingMiddleware.ContentIsNotModified(context)); TestUtils.AssertLoggedMessages( @@ -336,7 +336,7 @@ public void ContentIsNotModified_IfNoneMatch_ExplicitWithoutMatch_False() var context = TestUtils.CreateTestContext(sink); context.CachedResponseHeaders = new HeaderDictionary(); context.CachedResponseHeaders[HeaderNames.ETag] = "\"E2\""; - context.HttpContext.Request.Headers[HeaderNames.IfNoneMatch] = "\"E1\""; + context.HttpContext.Request.Headers.IfNoneMatch = "\"E1\""; Assert.False(ResponseCachingMiddleware.ContentIsNotModified(context)); Assert.Empty(sink.Writes); @@ -349,7 +349,7 @@ public void ContentIsNotModified_IfNoneMatch_MatchesAtLeastOneValue_True() var context = TestUtils.CreateTestContext(sink); context.CachedResponseHeaders = new HeaderDictionary(); context.CachedResponseHeaders[HeaderNames.ETag] = "\"E2\""; - context.HttpContext.Request.Headers[HeaderNames.IfNoneMatch] = new string[] { "\"E0\", \"E1\"", "\"E1\", \"E2\"" }; + context.HttpContext.Request.Headers.IfNoneMatch = new string[] { "\"E0\", \"E1\"", "\"E1\", \"E2\"" }; Assert.True(ResponseCachingMiddleware.ContentIsNotModified(context)); TestUtils.AssertLoggedMessages( @@ -408,7 +408,7 @@ public void FinalizeCacheHeadersAsync_UpdateShouldCacheResponse_IfResponseCachea var middleware = TestUtils.CreateTestMiddleware(testSink: sink, policyProvider: new ResponseCachingPolicyProvider()); var context = TestUtils.CreateTestContext(); - context.HttpContext.Response.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Response.Headers.CacheControl = new CacheControlHeaderValue() { Public = true }.ToString(); @@ -464,7 +464,7 @@ public void FinalizeCacheHeadersAsync_ResponseValidity_UseExpiryIfAvailable() var context = TestUtils.CreateTestContext(); context.ResponseTime = clock.UtcNow; - context.HttpContext.Response.Headers[HeaderNames.Expires] = HeaderUtilities.FormatDate(clock.UtcNow + TimeSpan.FromSeconds(11)); + context.HttpContext.Response.Headers.Expires = HeaderUtilities.FormatDate(clock.UtcNow + TimeSpan.FromSeconds(11)); middleware.FinalizeCacheHeaders(context); @@ -487,12 +487,12 @@ public void FinalizeCacheHeadersAsync_ResponseValidity_UseMaxAgeIfAvailable() var context = TestUtils.CreateTestContext(); context.ResponseTime = clock.UtcNow; - context.HttpContext.Response.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Response.Headers.CacheControl = new CacheControlHeaderValue() { MaxAge = TimeSpan.FromSeconds(12) }.ToString(); - context.HttpContext.Response.Headers[HeaderNames.Expires] = HeaderUtilities.FormatDate(clock.UtcNow + TimeSpan.FromSeconds(11)); + context.HttpContext.Response.Headers.Expires = HeaderUtilities.FormatDate(clock.UtcNow + TimeSpan.FromSeconds(11)); middleware.FinalizeCacheHeaders(context); @@ -515,12 +515,12 @@ public void FinalizeCacheHeadersAsync_ResponseValidity_UseSharedMaxAgeIfAvailabl var context = TestUtils.CreateTestContext(); context.ResponseTime = clock.UtcNow; - context.HttpContext.Response.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Response.Headers.CacheControl = new CacheControlHeaderValue() { MaxAge = TimeSpan.FromSeconds(12), SharedMaxAge = TimeSpan.FromSeconds(13) }.ToString(); - context.HttpContext.Response.Headers[HeaderNames.Expires] = HeaderUtilities.FormatDate(clock.UtcNow + TimeSpan.FromSeconds(11)); + context.HttpContext.Response.Headers.Expires = HeaderUtilities.FormatDate(clock.UtcNow + TimeSpan.FromSeconds(11)); middleware.FinalizeCacheHeaders(context); @@ -536,7 +536,7 @@ public void FinalizeCacheHeadersAsync_UpdateCachedVaryByRules_IfNotEquivalentToP var middleware = TestUtils.CreateTestMiddleware(testSink: sink, cache: cache); var context = TestUtils.CreateTestContext(); - context.HttpContext.Response.Headers[HeaderNames.Vary] = new StringValues(new[] { "headerA", "HEADERB", "HEADERc" }); + context.HttpContext.Response.Headers.Vary = new StringValues(new[] { "headerA", "HEADERB", "HEADERc" }); context.HttpContext.Features.Set(new ResponseCachingFeature() { VaryByQueryKeys = new StringValues(new[] { "queryB", "QUERYA" }) @@ -565,7 +565,7 @@ public void FinalizeCacheHeadersAsync_UpdateCachedVaryByRules_IfEquivalentToPrev var middleware = TestUtils.CreateTestMiddleware(testSink: sink, cache: cache); var context = TestUtils.CreateTestContext(); - context.HttpContext.Response.Headers[HeaderNames.Vary] = new StringValues(new[] { "headerA", "HEADERB" }); + context.HttpContext.Response.Headers.Vary = new StringValues(new[] { "headerA", "HEADERB" }); context.HttpContext.Features.Set(new ResponseCachingFeature() { VaryByQueryKeys = new StringValues(new[] { "queryB", "QUERYA" }) @@ -615,7 +615,7 @@ public void FinalizeCacheHeadersAsync_UpdateCachedVaryByRules_NullOrEmptyRules(S var middleware = TestUtils.CreateTestMiddleware(testSink: sink, cache: cache); var context = TestUtils.CreateTestContext(); - context.HttpContext.Response.Headers[HeaderNames.Vary] = vary; + context.HttpContext.Response.Headers.Vary = vary; context.HttpContext.Features.Set(new ResponseCachingFeature() { VaryByQueryKeys = vary @@ -638,11 +638,11 @@ public void FinalizeCacheHeadersAsync_AddsDate_IfNoneSpecified() // ResponseTime is the actual value that's used to set the Date header in FinalizeCacheHeadersAsync context.ResponseTime = utcNow; - Assert.True(StringValues.IsNullOrEmpty(context.HttpContext.Response.Headers[HeaderNames.Date])); + Assert.True(StringValues.IsNullOrEmpty(context.HttpContext.Response.Headers.Date)); middleware.FinalizeCacheHeaders(context); - Assert.Equal(HeaderUtilities.FormatDate(utcNow), context.HttpContext.Response.Headers[HeaderNames.Date]); + Assert.Equal(HeaderUtilities.FormatDate(utcNow), context.HttpContext.Response.Headers.Date); Assert.Empty(sink.Writes); } @@ -654,14 +654,14 @@ public void FinalizeCacheHeadersAsync_DoNotAddDate_IfSpecified() var middleware = TestUtils.CreateTestMiddleware(testSink: sink); var context = TestUtils.CreateTestContext(); - context.HttpContext.Response.Headers[HeaderNames.Date] = HeaderUtilities.FormatDate(utcNow); + context.HttpContext.Response.Headers.Date = HeaderUtilities.FormatDate(utcNow); context.ResponseTime = utcNow + TimeSpan.FromSeconds(10); - Assert.Equal(HeaderUtilities.FormatDate(utcNow), context.HttpContext.Response.Headers[HeaderNames.Date]); + Assert.Equal(HeaderUtilities.FormatDate(utcNow), context.HttpContext.Response.Headers.Date); middleware.FinalizeCacheHeaders(context); - Assert.Equal(HeaderUtilities.FormatDate(utcNow), context.HttpContext.Response.Headers[HeaderNames.Date]); + Assert.Equal(HeaderUtilities.FormatDate(utcNow), context.HttpContext.Response.Headers.Date); Assert.Empty(sink.Writes); } @@ -687,7 +687,7 @@ public void FinalizeCacheHeadersAsync_SplitsVaryHeaderByCommas() var middleware = TestUtils.CreateTestMiddleware(testSink: sink); var context = TestUtils.CreateTestContext(); - context.HttpContext.Response.Headers[HeaderNames.Vary] = "HeaderB, heaDera"; + context.HttpContext.Response.Headers.Vary = "HeaderB, heaDera"; middleware.FinalizeCacheHeaders(context); diff --git a/src/Middleware/ResponseCaching/test/ResponseCachingPolicyProviderTests.cs b/src/Middleware/ResponseCaching/test/ResponseCachingPolicyProviderTests.cs index 8c3f55c3674e..eef8b119b37a 100644 --- a/src/Middleware/ResponseCaching/test/ResponseCachingPolicyProviderTests.cs +++ b/src/Middleware/ResponseCaching/test/ResponseCachingPolicyProviderTests.cs @@ -72,7 +72,7 @@ public void AttemptResponseCaching_AuthorizationHeaders_NotAllowed() var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); context.HttpContext.Request.Method = HttpMethods.Get; - context.HttpContext.Request.Headers[HeaderNames.Authorization] = "Basic plaintextUN:plaintextPW"; + context.HttpContext.Request.Headers.Authorization = "Basic plaintextUN:plaintextPW"; Assert.False(new ResponseCachingPolicyProvider().AttemptResponseCaching(context)); TestUtils.AssertLoggedMessages( @@ -86,7 +86,7 @@ public void AllowCacheStorage_NoStore_Allowed() var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); context.HttpContext.Request.Method = HttpMethods.Get; - context.HttpContext.Request.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Request.Headers.CacheControl = new CacheControlHeaderValue() { NoStore = true }.ToString(); @@ -101,7 +101,7 @@ public void AllowCacheLookup_NoCache_NotAllowed() var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); context.HttpContext.Request.Method = HttpMethods.Get; - context.HttpContext.Request.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Request.Headers.CacheControl = new CacheControlHeaderValue() { NoCache = true }.ToString(); @@ -118,7 +118,7 @@ public void AllowCacheLookup_LegacyDirectives_NotAllowed() var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); context.HttpContext.Request.Method = HttpMethods.Get; - context.HttpContext.Request.Headers[HeaderNames.Pragma] = "no-cache"; + context.HttpContext.Request.Headers.Pragma = "no-cache"; Assert.False(new ResponseCachingPolicyProvider().AllowCacheLookup(context)); TestUtils.AssertLoggedMessages( @@ -132,8 +132,8 @@ public void AllowCacheLookup_LegacyDirectives_OverridenByCacheControl() var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); context.HttpContext.Request.Method = HttpMethods.Get; - context.HttpContext.Request.Headers[HeaderNames.Pragma] = "no-cache"; - context.HttpContext.Request.Headers[HeaderNames.CacheControl] = "max-age=10"; + context.HttpContext.Request.Headers.Pragma = "no-cache"; + context.HttpContext.Request.Headers.CacheControl = "max-age=10"; Assert.True(new ResponseCachingPolicyProvider().AllowCacheLookup(context)); Assert.Empty(sink.Writes); @@ -145,7 +145,7 @@ public void AllowCacheStorage_NoStore_NotAllowed() var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); context.HttpContext.Request.Method = HttpMethods.Get; - context.HttpContext.Request.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Request.Headers.CacheControl = new CacheControlHeaderValue() { NoStore = true }.ToString(); @@ -171,7 +171,7 @@ public void IsResponseCacheable_Public_Allowed() { var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); - context.HttpContext.Response.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Response.Headers.CacheControl = new CacheControlHeaderValue() { Public = true }.ToString(); @@ -185,7 +185,7 @@ public void IsResponseCacheable_NoCache_NotAllowed() { var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); - context.HttpContext.Response.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Response.Headers.CacheControl = new CacheControlHeaderValue() { Public = true, NoCache = true @@ -202,7 +202,7 @@ public void IsResponseCacheable_ResponseNoStore_NotAllowed() { var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); - context.HttpContext.Response.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Response.Headers.CacheControl = new CacheControlHeaderValue() { Public = true, NoStore = true @@ -219,11 +219,11 @@ public void IsResponseCacheable_SetCookieHeader_NotAllowed() { var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); - context.HttpContext.Response.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Response.Headers.CacheControl = new CacheControlHeaderValue() { Public = true }.ToString(); - context.HttpContext.Response.Headers[HeaderNames.SetCookie] = "cookieName=cookieValue"; + context.HttpContext.Response.Headers.SetCookie = "cookieName=cookieValue"; Assert.False(new ResponseCachingPolicyProvider().IsResponseCacheable(context)); TestUtils.AssertLoggedMessages( @@ -236,11 +236,11 @@ public void IsResponseCacheable_VaryHeaderByStar_NotAllowed() { var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); - context.HttpContext.Response.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Response.Headers.CacheControl = new CacheControlHeaderValue() { Public = true }.ToString(); - context.HttpContext.Response.Headers[HeaderNames.Vary] = "*"; + context.HttpContext.Response.Headers.Vary = "*"; Assert.False(new ResponseCachingPolicyProvider().IsResponseCacheable(context)); TestUtils.AssertLoggedMessages( @@ -253,7 +253,7 @@ public void IsResponseCacheable_Private_NotAllowed() { var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); - context.HttpContext.Response.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Response.Headers.CacheControl = new CacheControlHeaderValue() { Public = true, Private = true @@ -272,7 +272,7 @@ public void IsResponseCacheable_SuccessStatusCodes_Allowed(int statusCode) var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); context.HttpContext.Response.StatusCode = statusCode; - context.HttpContext.Response.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Response.Headers.CacheControl = new CacheControlHeaderValue() { Public = true }.ToString(); @@ -348,7 +348,7 @@ public void IsResponseCacheable_NonSuccessStatusCodes_NotAllowed(int statusCode) var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); context.HttpContext.Response.StatusCode = statusCode; - context.HttpContext.Response.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Response.Headers.CacheControl = new CacheControlHeaderValue() { Public = true }.ToString(); @@ -365,13 +365,13 @@ public void IsResponseCacheable_NoExpiryRequirements_IsAllowed() var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); context.HttpContext.Response.StatusCode = StatusCodes.Status200OK; - context.HttpContext.Response.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Response.Headers.CacheControl = new CacheControlHeaderValue() { Public = true }.ToString(); var utcNow = DateTimeOffset.UtcNow; - context.HttpContext.Response.Headers[HeaderNames.Date] = HeaderUtilities.FormatDate(utcNow); + context.HttpContext.Response.Headers.Date = HeaderUtilities.FormatDate(utcNow); context.ResponseTime = DateTimeOffset.MaxValue; Assert.True(new ResponseCachingPolicyProvider().IsResponseCacheable(context)); @@ -384,14 +384,14 @@ public void IsResponseCacheable_AtExpiry_NotAllowed() var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); context.HttpContext.Response.StatusCode = StatusCodes.Status200OK; - context.HttpContext.Response.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Response.Headers.CacheControl = new CacheControlHeaderValue() { Public = true }.ToString(); var utcNow = DateTimeOffset.UtcNow; - context.HttpContext.Response.Headers[HeaderNames.Expires] = HeaderUtilities.FormatDate(utcNow); + context.HttpContext.Response.Headers.Expires = HeaderUtilities.FormatDate(utcNow); - context.HttpContext.Response.Headers[HeaderNames.Date] = HeaderUtilities.FormatDate(utcNow); + context.HttpContext.Response.Headers.Date = HeaderUtilities.FormatDate(utcNow); context.ResponseTime = utcNow; Assert.False(new ResponseCachingPolicyProvider().IsResponseCacheable(context)); @@ -407,13 +407,13 @@ public void IsResponseCacheable_MaxAgeOverridesExpiry_ToAllowed() var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); context.HttpContext.Response.StatusCode = StatusCodes.Status200OK; - context.HttpContext.Response.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Response.Headers.CacheControl = new CacheControlHeaderValue() { Public = true, MaxAge = TimeSpan.FromSeconds(10) }.ToString(); - context.HttpContext.Response.Headers[HeaderNames.Expires] = HeaderUtilities.FormatDate(utcNow); - context.HttpContext.Response.Headers[HeaderNames.Date] = HeaderUtilities.FormatDate(utcNow); + context.HttpContext.Response.Headers.Expires = HeaderUtilities.FormatDate(utcNow); + context.HttpContext.Response.Headers.Date = HeaderUtilities.FormatDate(utcNow); context.ResponseTime = utcNow + TimeSpan.FromSeconds(9); Assert.True(new ResponseCachingPolicyProvider().IsResponseCacheable(context)); @@ -427,13 +427,13 @@ public void IsResponseCacheable_MaxAgeOverridesExpiry_ToNotAllowed() var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); context.HttpContext.Response.StatusCode = StatusCodes.Status200OK; - context.HttpContext.Response.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Response.Headers.CacheControl = new CacheControlHeaderValue() { Public = true, MaxAge = TimeSpan.FromSeconds(10) }.ToString(); - context.HttpContext.Response.Headers[HeaderNames.Expires] = HeaderUtilities.FormatDate(utcNow); - context.HttpContext.Response.Headers[HeaderNames.Date] = HeaderUtilities.FormatDate(utcNow); + context.HttpContext.Response.Headers.Expires = HeaderUtilities.FormatDate(utcNow); + context.HttpContext.Response.Headers.Date = HeaderUtilities.FormatDate(utcNow); context.ResponseTime = utcNow + TimeSpan.FromSeconds(10); Assert.False(new ResponseCachingPolicyProvider().IsResponseCacheable(context)); @@ -449,13 +449,13 @@ public void IsResponseCacheable_SharedMaxAgeOverridesMaxAge_ToAllowed() var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); context.HttpContext.Response.StatusCode = StatusCodes.Status200OK; - context.HttpContext.Response.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Response.Headers.CacheControl = new CacheControlHeaderValue() { Public = true, MaxAge = TimeSpan.FromSeconds(10), SharedMaxAge = TimeSpan.FromSeconds(15) }.ToString(); - context.HttpContext.Response.Headers[HeaderNames.Date] = HeaderUtilities.FormatDate(utcNow); + context.HttpContext.Response.Headers.Date = HeaderUtilities.FormatDate(utcNow); context.ResponseTime = utcNow + TimeSpan.FromSeconds(11); Assert.True(new ResponseCachingPolicyProvider().IsResponseCacheable(context)); @@ -469,13 +469,13 @@ public void IsResponseCacheable_SharedMaxAgeOverridesMaxAge_ToNotAllowed() var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); context.HttpContext.Response.StatusCode = StatusCodes.Status200OK; - context.HttpContext.Response.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Response.Headers.CacheControl = new CacheControlHeaderValue() { Public = true, MaxAge = TimeSpan.FromSeconds(10), SharedMaxAge = TimeSpan.FromSeconds(5) }.ToString(); - context.HttpContext.Response.Headers[HeaderNames.Date] = HeaderUtilities.FormatDate(utcNow); + context.HttpContext.Response.Headers.Date = HeaderUtilities.FormatDate(utcNow); context.ResponseTime = utcNow + TimeSpan.FromSeconds(5); Assert.False(new ResponseCachingPolicyProvider().IsResponseCacheable(context)); @@ -551,7 +551,7 @@ public void IsCachedEntryFresh_MaxAgeOverridesExpiry_ToFresh() Public = true, MaxAge = TimeSpan.FromSeconds(10) }.ToString(); - context.HttpContext.Response.Headers[HeaderNames.Expires] = HeaderUtilities.FormatDate(utcNow); + context.HttpContext.Response.Headers.Expires = HeaderUtilities.FormatDate(utcNow); Assert.True(new ResponseCachingPolicyProvider().IsCachedEntryFresh(context)); Assert.Empty(sink.Writes); @@ -571,7 +571,7 @@ public void IsCachedEntryFresh_MaxAgeOverridesExpiry_ToNotFresh() Public = true, MaxAge = TimeSpan.FromSeconds(10) }.ToString(); - context.HttpContext.Response.Headers[HeaderNames.Expires] = HeaderUtilities.FormatDate(utcNow); + context.HttpContext.Response.Headers.Expires = HeaderUtilities.FormatDate(utcNow); Assert.False(new ResponseCachingPolicyProvider().IsCachedEntryFresh(context)); TestUtils.AssertLoggedMessages( @@ -628,7 +628,7 @@ public void IsCachedEntryFresh_MinFreshReducesFreshness_ToNotFresh() { var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); - context.HttpContext.Request.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Request.Headers.CacheControl = new CacheControlHeaderValue() { MinFresh = TimeSpan.FromSeconds(2) }.ToString(); @@ -652,7 +652,7 @@ public void IsCachedEntryFresh_RequestMaxAgeRestrictAge_ToNotFresh() { var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); - context.HttpContext.Request.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Request.Headers.CacheControl = new CacheControlHeaderValue() { MaxAge = TimeSpan.FromSeconds(5) }.ToString(); @@ -674,7 +674,7 @@ public void IsCachedEntryFresh_MaxStaleOverridesFreshness_ToFresh() { var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); - context.HttpContext.Request.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Request.Headers.CacheControl = new CacheControlHeaderValue() { MaxAge = TimeSpan.FromSeconds(5), MaxStale = true, // This value must be set to true in order to specify MaxStaleLimit @@ -698,7 +698,7 @@ public void IsCachedEntryFresh_MaxStaleInfiniteOverridesFreshness_ToFresh() { var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); - context.HttpContext.Request.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Request.Headers.CacheControl = new CacheControlHeaderValue() { MaxAge = TimeSpan.FromSeconds(5), MaxStale = true // No value specified means a MaxStaleLimit of infinity @@ -721,7 +721,7 @@ public void IsCachedEntryFresh_MaxStaleOverridesFreshness_ButStillNotFresh() { var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); - context.HttpContext.Request.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Request.Headers.CacheControl = new CacheControlHeaderValue() { MaxAge = TimeSpan.FromSeconds(5), MaxStale = true, // This value must be set to true in order to specify MaxStaleLimit @@ -745,7 +745,7 @@ public void IsCachedEntryFresh_MustRevalidateOverridesRequestMaxStale_ToNotFresh { var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); - context.HttpContext.Request.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Request.Headers.CacheControl = new CacheControlHeaderValue() { MaxAge = TimeSpan.FromSeconds(5), MaxStale = true, // This value must be set to true in order to specify MaxStaleLimit @@ -770,7 +770,7 @@ public void IsCachedEntryFresh_ProxyRevalidateOverridesRequestMaxStale_ToNotFres { var sink = new TestSink(); var context = TestUtils.CreateTestContext(sink); - context.HttpContext.Request.Headers[HeaderNames.CacheControl] = new CacheControlHeaderValue() + context.HttpContext.Request.Headers.CacheControl = new CacheControlHeaderValue() { MaxAge = TimeSpan.FromSeconds(5), MaxStale = true, // This value must be set to true in order to specify MaxStaleLimit diff --git a/src/Middleware/ResponseCaching/test/ResponseCachingTests.cs b/src/Middleware/ResponseCaching/test/ResponseCachingTests.cs index 9a56152b8651..69c759112569 100644 --- a/src/Middleware/ResponseCaching/test/ResponseCachingTests.cs +++ b/src/Middleware/ResponseCaching/test/ResponseCachingTests.cs @@ -269,7 +269,7 @@ public async Task ServesFreshContent_If_Authorization_HeaderExists(string method [Fact] public async Task ServesCachedContent_IfVaryHeader_Matches() { - var builders = TestUtils.CreateBuildersWithResponseCaching(contextAction: context => context.Response.Headers[HeaderNames.Vary] = HeaderNames.From); + var builders = TestUtils.CreateBuildersWithResponseCaching(contextAction: context => context.Response.Headers.Vary = HeaderNames.From); foreach (var builder in builders) { @@ -292,7 +292,7 @@ public async Task ServesCachedContent_IfVaryHeader_Matches() [Fact] public async Task ServesFreshContent_IfVaryHeader_Mismatches() { - var builders = TestUtils.CreateBuildersWithResponseCaching(contextAction: context => context.Response.Headers[HeaderNames.Vary] = HeaderNames.From); + var builders = TestUtils.CreateBuildersWithResponseCaching(contextAction: context => context.Response.Headers.Vary = HeaderNames.From); foreach (var builder in builders) { @@ -545,7 +545,7 @@ public async Task Serves504_IfOnlyIfCachedHeader_IsSpecified() [Fact] public async Task ServesFreshContent_IfSetCookie_IsSpecified() { - var builders = TestUtils.CreateBuildersWithResponseCaching(contextAction: context => context.Response.Headers[HeaderNames.SetCookie] = "cookieName=cookieValue"); + var builders = TestUtils.CreateBuildersWithResponseCaching(contextAction: context => context.Response.Headers.SetCookie = "cookieName=cookieValue"); foreach (var builder in builders) { @@ -619,7 +619,7 @@ public async Task ServesFreshContent_IfInitialRequestContainsNoStore() [Fact] public async Task ServesFreshContent_IfInitialResponseContainsNoStore() { - var builders = TestUtils.CreateBuildersWithResponseCaching(contextAction: context => context.Response.Headers[HeaderNames.CacheControl] = CacheControlHeaderValue.NoStoreString); + var builders = TestUtils.CreateBuildersWithResponseCaching(contextAction: context => context.Response.Headers.CacheControl = CacheControlHeaderValue.NoStoreString); foreach (var builder in builders) { @@ -644,8 +644,8 @@ public async Task Serves304_IfIfModifiedSince_Satisfied() var builders = TestUtils.CreateBuildersWithResponseCaching(contextAction: context => { context.Response.GetTypedHeaders().ETag = new EntityTagHeaderValue("\"E1\""); - context.Response.Headers[HeaderNames.ContentLocation] = "/"; - context.Response.Headers[HeaderNames.Vary] = HeaderNames.From; + context.Response.Headers.ContentLocation = "/"; + context.Response.Headers.Vary = HeaderNames.From; }); foreach (var builder in builders) @@ -697,8 +697,8 @@ public async Task Serves304_IfIfNoneMatch_Satisfied() var builders = TestUtils.CreateBuildersWithResponseCaching(contextAction: context => { context.Response.GetTypedHeaders().ETag = new EntityTagHeaderValue("\"E1\""); - context.Response.Headers[HeaderNames.ContentLocation] = "/"; - context.Response.Headers[HeaderNames.Vary] = HeaderNames.From; + context.Response.Headers.ContentLocation = "/"; + context.Response.Headers.Vary = HeaderNames.From; }); foreach (var builder in builders) @@ -822,7 +822,7 @@ public async Task ServesFreshContent_CaseSensitivePaths_IsNotCacheable() [Fact] public async Task ServesCachedContent_WithoutReplacingCachedVaryBy_OnCacheMiss() { - var builders = TestUtils.CreateBuildersWithResponseCaching(contextAction: context => context.Response.Headers[HeaderNames.Vary] = HeaderNames.From); + var builders = TestUtils.CreateBuildersWithResponseCaching(contextAction: context => context.Response.Headers.Vary = HeaderNames.From); foreach (var builder in builders) { @@ -848,7 +848,7 @@ public async Task ServesCachedContent_WithoutReplacingCachedVaryBy_OnCacheMiss() [Fact] public async Task ServesFreshContent_IfCachedVaryByUpdated_OnCacheMiss() { - var builders = TestUtils.CreateBuildersWithResponseCaching(contextAction: context => context.Response.Headers[HeaderNames.Vary] = context.Request.Headers[HeaderNames.Pragma]); + var builders = TestUtils.CreateBuildersWithResponseCaching(contextAction: context => context.Response.Headers.Vary = context.Request.Headers.Pragma); foreach (var builder in builders) { @@ -883,7 +883,7 @@ public async Task ServesFreshContent_IfCachedVaryByUpdated_OnCacheMiss() [Fact] public async Task ServesCachedContent_IfCachedVaryByNotUpdated_OnCacheMiss() { - var builders = TestUtils.CreateBuildersWithResponseCaching(contextAction: context => context.Response.Headers[HeaderNames.Vary] = context.Request.Headers[HeaderNames.Pragma]); + var builders = TestUtils.CreateBuildersWithResponseCaching(contextAction: context => context.Response.Headers.Vary = context.Request.Headers.Pragma); foreach (var builder in builders) { diff --git a/src/Middleware/ResponseCompression/perf/Microbenchmarks/ResponseCompressionProviderBenchmark.cs b/src/Middleware/ResponseCompression/perf/Microbenchmarks/ResponseCompressionProviderBenchmark.cs index 2b1273fabe9e..2e8d6e98983a 100644 --- a/src/Middleware/ResponseCompression/perf/Microbenchmarks/ResponseCompressionProviderBenchmark.cs +++ b/src/Middleware/ResponseCompression/perf/Microbenchmarks/ResponseCompressionProviderBenchmark.cs @@ -50,7 +50,7 @@ public ICompressionProvider GetCompressionProvider() { var context = new DefaultHttpContext(); - context.Request.Headers[HeaderNames.AcceptEncoding] = AcceptEncoding; + context.Request.Headers.AcceptEncoding = AcceptEncoding; return Provider.GetCompressionProvider(context); } diff --git a/src/Middleware/ResponseCompression/src/ResponseCompressionProvider.cs b/src/Middleware/ResponseCompression/src/ResponseCompressionProvider.cs index 5bbedc224393..961e844348a4 100644 --- a/src/Middleware/ResponseCompression/src/ResponseCompressionProvider.cs +++ b/src/Middleware/ResponseCompression/src/ResponseCompressionProvider.cs @@ -83,7 +83,7 @@ public ResponseCompressionProvider(IServiceProvider services, IOptions public bool CheckRequestAcceptsCompression(HttpContext context) { - if (string.IsNullOrEmpty(context.Request.Headers[HeaderNames.AcceptEncoding])) + if (string.IsNullOrEmpty(context.Request.Headers.AcceptEncoding)) { _logger.NoAcceptEncoding(); return false; diff --git a/src/Middleware/ResponseCompression/test/ResponseCompressionBodyTest.cs b/src/Middleware/ResponseCompression/test/ResponseCompressionBodyTest.cs index 75bcfaff15f3..dbf2c94fd5c1 100644 --- a/src/Middleware/ResponseCompression/test/ResponseCompressionBodyTest.cs +++ b/src/Middleware/ResponseCompression/test/ResponseCompressionBodyTest.cs @@ -22,13 +22,13 @@ public class ResponseCompressionBodyTest public void OnWrite_AppendsAcceptEncodingToVaryHeader_IfNotPresent(string providedVaryHeader, string expectedVaryHeader) { var httpContext = new DefaultHttpContext(); - httpContext.Response.Headers[HeaderNames.Vary] = providedVaryHeader; + httpContext.Response.Headers.Vary = providedVaryHeader; var stream = new ResponseCompressionBody(httpContext, new MockResponseCompressionProvider(flushable: true), new StreamResponseBodyFeature(new MemoryStream())); stream.Write(new byte[] { }, 0, 0); - Assert.Equal(expectedVaryHeader, httpContext.Response.Headers[HeaderNames.Vary]); + Assert.Equal(expectedVaryHeader, httpContext.Response.Headers.Vary); } [Theory] diff --git a/src/Middleware/ResponseCompression/test/ResponseCompressionMiddlewareTest.cs b/src/Middleware/ResponseCompression/test/ResponseCompressionMiddlewareTest.cs index 7da04beb182b..1632d16c6524 100644 --- a/src/Middleware/ResponseCompression/test/ResponseCompressionMiddlewareTest.cs +++ b/src/Middleware/ResponseCompression/test/ResponseCompressionMiddlewareTest.cs @@ -169,7 +169,7 @@ public async Task GZipCompressionProvider_OptionsSetInDI_Compress() app.UseResponseCompression(); app.Run(context => { - context.Response.Headers[HeaderNames.ContentMD5] = "MD5"; + context.Response.Headers.ContentMD5 = "MD5"; context.Response.ContentType = TextPlain; return context.Response.WriteAsync(new string('a', 100)); }); @@ -327,7 +327,7 @@ public async Task NoBody_NotCompressed(string contentType) app.UseResponseCompression(); app.Run(context => { - context.Response.Headers[HeaderNames.ContentMD5] = "MD5"; + context.Response.Headers.ContentMD5 = "MD5"; context.Response.ContentType = contentType; return Task.FromResult(0); }); @@ -409,7 +409,7 @@ public async Task Response_WithContentRange_NotCompressed() { var (response, logMessages) = await InvokeMiddleware(50, requestAcceptEncodings: new[] { "gzip" }, responseType: TextPlain, addResponseAction: (r) => { - r.Headers[HeaderNames.ContentRange] = "1-2/*"; + r.Headers.ContentRange = "1-2/*"; }); CheckResponseNotCompressed(response, expectedBodyLength: 50, sendVaryHeader: false); @@ -426,7 +426,7 @@ public async Task Response_WithContentEncodingAlreadySet_NotReCompressed() var (response, logMessages) = await InvokeMiddleware(50, requestAcceptEncodings: new[] { "gzip" }, responseType: TextPlain, addResponseAction: (r) => { - r.Headers[HeaderNames.ContentEncoding] = otherContentEncoding; + r.Headers.ContentEncoding = otherContentEncoding; }); Assert.True(response.Content.Headers.ContentEncoding.Contains(otherContentEncoding)); @@ -643,7 +643,7 @@ public async Task FlushHeaders_SendsHeaders_Compresses(string encoding, int expe app.UseResponseCompression(); app.Run(async context => { - context.Response.Headers[HeaderNames.ContentMD5] = "MD5"; + context.Response.Headers.ContentMD5 = "MD5"; context.Response.ContentType = TextPlain; context.Response.Body.Flush(); await responseReceived.Task.TimeoutAfter(TimeSpan.FromSeconds(3)); @@ -689,7 +689,7 @@ public async Task FlushAsyncHeaders_SendsHeaders_Compresses(string encoding, int app.UseResponseCompression(); app.Run(async context => { - context.Response.Headers[HeaderNames.ContentMD5] = "MD5"; + context.Response.Headers.ContentMD5 = "MD5"; context.Response.ContentType = TextPlain; await context.Response.Body.FlushAsync(); await responseReceived.Task.TimeoutAfter(TimeSpan.FromSeconds(3)); @@ -740,7 +740,7 @@ public async Task FlushBody_CompressesAndFlushes(string encoding) feature.AllowSynchronousIO = true; } - context.Response.Headers[HeaderNames.ContentMD5] = "MD5"; + context.Response.Headers.ContentMD5 = "MD5"; context.Response.ContentType = TextPlain; context.Response.Body.Write(new byte[10], 0, 10); context.Response.Body.Flush(); @@ -793,7 +793,7 @@ public async Task FlushAsyncBody_CompressesAndFlushes(string encoding) app.UseResponseCompression(); app.Run(async context => { - context.Response.Headers[HeaderNames.ContentMD5] = "MD5"; + context.Response.Headers.ContentMD5 = "MD5"; context.Response.ContentType = TextPlain; await context.Response.WriteAsync(new string('a', 10)); await context.Response.Body.FlushAsync(); @@ -853,7 +853,7 @@ public async Task TrickleWriteAndFlush_FlushesEachWrite(string encoding) app.UseResponseCompression(); app.Run(async context => { - context.Response.Headers[HeaderNames.ContentMD5] = "MD5"; + context.Response.Headers.ContentMD5 = "MD5"; context.Response.ContentType = TextPlain; context.Features.Get().DisableBuffering(); @@ -923,7 +923,7 @@ public async Task TrickleWriteAndFlushAsync_FlushesEachWrite(string encoding) app.UseResponseCompression(); app.Run(async context => { - context.Response.Headers[HeaderNames.ContentMD5] = "MD5"; + context.Response.Headers.ContentMD5 = "MD5"; context.Response.ContentType = TextPlain; context.Features.Get().DisableBuffering(); @@ -985,7 +985,7 @@ public async Task SendFileAsync_DifferentContentType_NotBypassed() app.UseResponseCompression(); app.Run(context => { - context.Response.Headers[HeaderNames.ContentMD5] = "MD5"; + context.Response.Headers.ContentMD5 = "MD5"; context.Response.ContentType = "custom/type"; context.Response.ContentLength = 1024; var sendFile = context.Features.Get(); @@ -1035,7 +1035,7 @@ public async Task SendFileAsync_FirstWrite_CompressesAndFlushes() app.UseResponseCompression(); app.Run(context => { - context.Response.Headers[HeaderNames.ContentMD5] = "MD5"; + context.Response.Headers.ContentMD5 = "MD5"; context.Response.ContentType = TextPlain; context.Response.ContentLength = 1024; var sendFile = context.Features.Get(); @@ -1085,7 +1085,7 @@ public async Task SendFileAsync_AfterFirstWrite_CompressesAndFlushes() app.UseResponseCompression(); app.Run(async context => { - context.Response.Headers[HeaderNames.ContentMD5] = "MD5"; + context.Response.Headers.ContentMD5 = "MD5"; context.Response.ContentType = TextPlain; var feature = context.Features.Get(); @@ -1135,7 +1135,7 @@ public async Task Dispose_SyncWriteOrFlushNotCalled(string encoding) app.UseResponseCompression(); app.Run(async context => { - context.Response.Headers[HeaderNames.ContentMD5] = "MD5"; + context.Response.Headers.ContentMD5 = "MD5"; context.Response.ContentType = TextPlain; await context.Response.WriteAsync(new string('a', 10)); await context.Response.Body.FlushAsync(); @@ -1196,7 +1196,7 @@ public async Task Dispose_SyncWriteOrFlushNotCalled(string encoding) app.UseResponseCompression(); app.Run(context => { - context.Response.Headers[HeaderNames.ContentMD5] = "MD5"; + context.Response.Headers.ContentMD5 = "MD5"; context.Response.ContentType = responseType; if (HttpMethods.IsHead(context.Request.Method)) diff --git a/src/Middleware/Rewrite/src/RedirectRule.cs b/src/Middleware/Rewrite/src/RedirectRule.cs index edce6c2c0a3b..22de1b408ead 100644 --- a/src/Middleware/Rewrite/src/RedirectRule.cs +++ b/src/Middleware/Rewrite/src/RedirectRule.cs @@ -105,7 +105,7 @@ public virtual void ApplyRule(RewriteContext context) } // not using the HttpContext.Response.redirect here because status codes may be 301, 302, 307, 308 - response.Headers[HeaderNames.Location] = encodedPath; + response.Headers.Location = encodedPath; context.Logger.RedirectedRequest(newPath); } diff --git a/src/Middleware/Rewrite/src/RedirectToHttpsRule.cs b/src/Middleware/Rewrite/src/RedirectToHttpsRule.cs index a26b2c30e17b..b16e40662a98 100644 --- a/src/Middleware/Rewrite/src/RedirectToHttpsRule.cs +++ b/src/Middleware/Rewrite/src/RedirectToHttpsRule.cs @@ -34,7 +34,7 @@ public virtual void ApplyRule(RewriteContext context) var newUrl = UriHelper.BuildAbsolute("https", host, req.PathBase, req.Path, req.QueryString, default); var response = context.HttpContext.Response; response.StatusCode = StatusCode; - response.Headers[HeaderNames.Location] = newUrl; + response.Headers.Location = newUrl; context.Result = RuleResult.EndResponse; context.Logger.RedirectedToHttps(); } diff --git a/src/Middleware/Rewrite/src/RedirectToWwwHelper.cs b/src/Middleware/Rewrite/src/RedirectToWwwHelper.cs index 00a1499c6ac3..6a1b411cf2ef 100644 --- a/src/Middleware/Rewrite/src/RedirectToWwwHelper.cs +++ b/src/Middleware/Rewrite/src/RedirectToWwwHelper.cs @@ -54,7 +54,7 @@ public static void SetRedirect(RewriteContext context, HostString newHost, int s request.QueryString); response.StatusCode = statusCode; - response.Headers[HeaderNames.Location] = newUrl; + response.Headers.Location = newUrl; context.Result = RuleResult.EndResponse; } } diff --git a/src/Middleware/Rewrite/src/RewriteMiddleware.cs b/src/Middleware/Rewrite/src/RewriteMiddleware.cs index 14ec5e2429c3..cce21dfc83ce 100644 --- a/src/Middleware/Rewrite/src/RewriteMiddleware.cs +++ b/src/Middleware/Rewrite/src/RewriteMiddleware.cs @@ -83,7 +83,7 @@ public Task Invoke(HttpContext context) break; case RuleResult.EndResponse: _logger.RewriteMiddlewareRequestResponseComplete( - context.Response.Headers[HeaderNames.Location], + context.Response.Headers.Location, context.Response.StatusCode); return Task.CompletedTask; case RuleResult.SkipRemainingRules: diff --git a/src/Middleware/Rewrite/src/UrlActions/RedirectAction.cs b/src/Middleware/Rewrite/src/UrlActions/RedirectAction.cs index 0d4ea5c54039..2bbda91b9180 100644 --- a/src/Middleware/Rewrite/src/UrlActions/RedirectAction.cs +++ b/src/Middleware/Rewrite/src/UrlActions/RedirectAction.cs @@ -41,7 +41,7 @@ public override void ApplyAction(RewriteContext context, BackReferenceCollection if (string.IsNullOrEmpty(pattern)) { - response.Headers[HeaderNames.Location] = pathBase.HasValue ? pathBase.Value : "/"; + response.Headers.Location = pathBase.HasValue ? pathBase.Value : "/"; return; } @@ -62,7 +62,7 @@ public override void ApplyAction(RewriteContext context, BackReferenceCollection pattern.Substring(split))); // not using the response.redirect here because status codes may be 301, 302, 307, 308 - response.Headers[HeaderNames.Location] = pathBase + pattern.Substring(0, split) + query; + response.Headers.Location = pathBase + pattern.Substring(0, split) + query; } else { @@ -70,11 +70,11 @@ public override void ApplyAction(RewriteContext context, BackReferenceCollection // by default. if (QueryStringDelete) { - response.Headers[HeaderNames.Location] = pathBase + pattern; + response.Headers.Location = pathBase + pattern; } else { - response.Headers[HeaderNames.Location] = pathBase + pattern + context.HttpContext.Request.QueryString; + response.Headers.Location = pathBase + pattern + context.HttpContext.Request.QueryString; } } context.Result = RuleResult.EndResponse; diff --git a/src/Middleware/Rewrite/test/IISUrlRewrite/MiddleWareTests.cs b/src/Middleware/Rewrite/test/IISUrlRewrite/MiddleWareTests.cs index 35e4958cb29d..fbe2483254b4 100644 --- a/src/Middleware/Rewrite/test/IISUrlRewrite/MiddleWareTests.cs +++ b/src/Middleware/Rewrite/test/IISUrlRewrite/MiddleWareTests.cs @@ -42,7 +42,7 @@ public async Task Invoke_RedirectPathToPathAndQuery() .Configure(app => { app.UseRewriter(options); - app.Run(context => context.Response.WriteAsync(context.Response.Headers[HeaderNames.Location])); + app.Run(context => context.Response.WriteAsync(context.Response.Headers.Location)); }); }).Build(); @@ -142,7 +142,7 @@ public async Task Invoke_RedirectToLowerCase() .Configure(app => { app.UseRewriter(options); - app.Run(context => context.Response.WriteAsync(context.Response.Headers[HeaderNames.Location])); + app.Run(context => context.Response.WriteAsync(context.Response.Headers.Location)); }); }).Build(); diff --git a/src/Middleware/Rewrite/test/IISUrlRewrite/ServerVariableTests.cs b/src/Middleware/Rewrite/test/IISUrlRewrite/ServerVariableTests.cs index dab130394c64..1384d2ad2bdd 100644 --- a/src/Middleware/Rewrite/test/IISUrlRewrite/ServerVariableTests.cs +++ b/src/Middleware/Rewrite/test/IISUrlRewrite/ServerVariableTests.cs @@ -142,11 +142,11 @@ private HttpContext CreateTestHttpContext() context.Request.QueryString = QueryString.FromUriComponent("?bar=1"); context.Request.ContentLength = 10; context.Request.ContentType = "json"; - context.Request.Headers[HeaderNames.Accept] = "accept"; - context.Request.Headers[HeaderNames.Cookie] = "cookie"; - context.Request.Headers[HeaderNames.Referer] = "referer"; - context.Request.Headers[HeaderNames.UserAgent] = "useragent"; - context.Request.Headers[HeaderNames.Connection] = "connection"; + context.Request.Headers.Accept = "accept"; + context.Request.Headers.Cookie = "cookie"; + context.Request.Headers.Referer = "referer"; + context.Request.Headers.UserAgent = "useragent"; + context.Request.Headers.Connection = "connection"; return context; } diff --git a/src/Middleware/Rewrite/test/PatternSegments/HeaderSegmentTests.cs b/src/Middleware/Rewrite/test/PatternSegments/HeaderSegmentTests.cs index 9f53cd525403..67cd4b085c92 100644 --- a/src/Middleware/Rewrite/test/PatternSegments/HeaderSegmentTests.cs +++ b/src/Middleware/Rewrite/test/PatternSegments/HeaderSegmentTests.cs @@ -16,7 +16,7 @@ public void HeaderSegment_AssertGettingWithHeaderReturnsCorrectValue() // Arrange var context = new RewriteContext { HttpContext = new DefaultHttpContext() }; - context.HttpContext.Request.Headers[HeaderNames.Location] = "foo"; + context.HttpContext.Request.Headers.Location = "foo"; var segment = new HeaderSegment(HeaderNames.Location); // Act diff --git a/src/Middleware/Rewrite/test/UrlActions/ChangeCookieActionTests.cs b/src/Middleware/Rewrite/test/UrlActions/ChangeCookieActionTests.cs index 38365f703445..a5d58944a117 100644 --- a/src/Middleware/Rewrite/test/UrlActions/ChangeCookieActionTests.cs +++ b/src/Middleware/Rewrite/test/UrlActions/ChangeCookieActionTests.cs @@ -28,7 +28,7 @@ public void SetsCookie() action.ApplyAction(context, null, null); - var cookieHeaders = context.HttpContext.Response.Headers[HeaderNames.SetCookie]; + var cookieHeaders = context.HttpContext.Response.Headers.SetCookie; var header = Assert.Single(cookieHeaders); Assert.Equal($"Cookie=Chocolate%20Chip; expires={HeaderUtilities.FormatDate(now.AddMinutes(1440))}; domain=contoso.com; path=/recipes; secure; httponly", header); } @@ -44,7 +44,7 @@ public void ZeroLifetime() action.ApplyAction(context, null, null); - var cookieHeaders = context.HttpContext.Response.Headers[HeaderNames.SetCookie]; + var cookieHeaders = context.HttpContext.Response.Headers.SetCookie; var header = Assert.Single(cookieHeaders); Assert.Equal($"Cookie=Chocolate%20Chip", header); } @@ -58,7 +58,7 @@ public void UnsetCookie() action.ApplyAction(context, null, null); - var cookieHeaders = context.HttpContext.Response.Headers[HeaderNames.SetCookie]; + var cookieHeaders = context.HttpContext.Response.Headers.SetCookie; var header = Assert.Single(cookieHeaders); Assert.Equal($"Cookie=", header); } diff --git a/src/Middleware/StaticFiles/src/Helpers.cs b/src/Middleware/StaticFiles/src/Helpers.cs index 6cd3b7b34933..2fc0c8380439 100644 --- a/src/Middleware/StaticFiles/src/Helpers.cs +++ b/src/Middleware/StaticFiles/src/Helpers.cs @@ -46,7 +46,7 @@ internal static void RedirectToPathWithSlash(HttpContext context) context.Response.StatusCode = StatusCodes.Status301MovedPermanently; var request = context.Request; var redirect = UriHelper.BuildAbsolute(request.Scheme, request.Host, request.PathBase, request.Path + "/", request.QueryString); - context.Response.Headers[HeaderNames.Location] = redirect; + context.Response.Headers.Location = redirect; } internal static bool TryMatchPath(HttpContext context, PathString matchUrl, bool forDirectory, out PathString subpath) diff --git a/src/Middleware/StaticFiles/src/StaticFileContext.cs b/src/Middleware/StaticFiles/src/StaticFileContext.cs index 60c1973cfaa9..5b787ef3f9b4 100644 --- a/src/Middleware/StaticFiles/src/StaticFileContext.cs +++ b/src/Middleware/StaticFiles/src/StaticFileContext.cs @@ -254,7 +254,7 @@ public void ApplyResponseHeaders(int statusCode) var responseHeaders = ResponseHeaders; responseHeaders.LastModified = _lastModified; responseHeaders.ETag = _etag; - responseHeaders.Headers[HeaderNames.AcceptRanges] = "bytes"; + responseHeaders.Headers.AcceptRanges = "bytes"; } if (statusCode == StatusCodes.Status200OK) { @@ -375,7 +375,7 @@ internal async Task SendRangeAsync() try { var logPath = !string.IsNullOrEmpty(_fileInfo.PhysicalPath) ? _fileInfo.PhysicalPath : SubPath; - _logger.SendingFileRange(_response.Headers[HeaderNames.ContentRange], logPath); + _logger.SendingFileRange(_response.Headers.ContentRange, logPath); await _context.Response.SendFileAsync(_fileInfo, start, length, _context.RequestAborted); } catch (OperationCanceledException ex) diff --git a/src/Middleware/StaticFiles/test/UnitTests/RangeHelperTests.cs b/src/Middleware/StaticFiles/test/UnitTests/RangeHelperTests.cs index a6e06810a5f9..c82229b05ac0 100644 --- a/src/Middleware/StaticFiles/test/UnitTests/RangeHelperTests.cs +++ b/src/Middleware/StaticFiles/test/UnitTests/RangeHelperTests.cs @@ -63,7 +63,7 @@ public void ParseRange_ReturnsNullWhenRangeHeaderNotProvided(string range) { // Arrange var httpContext = new DefaultHttpContext(); - httpContext.Request.Headers[HeaderNames.Range] = range; + httpContext.Request.Headers.Range = range; // Act var (isRangeRequest, parsedRangeResult) = RangeHelper.ParseRange(httpContext, httpContext.Request.GetTypedHeaders(), 10, NullLogger.Instance); @@ -80,7 +80,7 @@ public void ParseRange_ReturnsNullWhenMultipleRangesProvidedInRangeHeader(string { // Arrange var httpContext = new DefaultHttpContext(); - httpContext.Request.Headers[HeaderNames.Range] = range; + httpContext.Request.Headers.Range = range; // Act var (isRangeRequest, parsedRangeResult) = RangeHelper.ParseRange(httpContext, httpContext.Request.GetTypedHeaders(), 10, NullLogger.Instance); @@ -96,7 +96,7 @@ public void ParseRange_ReturnsSingleRangeWhenInputValid() // Arrange var httpContext = new DefaultHttpContext(); var range = new RangeHeaderValue(1, 2); - httpContext.Request.Headers[HeaderNames.Range] = range.ToString(); + httpContext.Request.Headers.Range = range.ToString(); // Act var (isRangeRequest, parsedRange) = RangeHelper.ParseRange(httpContext, httpContext.Request.GetTypedHeaders(), 4, NullLogger.Instance); diff --git a/src/Middleware/WebSockets/src/WebSocketMiddleware.cs b/src/Middleware/WebSockets/src/WebSocketMiddleware.cs index c52a4b4a3403..e6d198d73c2c 100644 --- a/src/Middleware/WebSockets/src/WebSocketMiddleware.cs +++ b/src/Middleware/WebSockets/src/WebSocketMiddleware.cs @@ -74,7 +74,7 @@ public Task Invoke(HttpContext context) if (!_anyOriginAllowed) { // Check for Origin header - var originHeader = context.Request.Headers[HeaderNames.Origin]; + var originHeader = context.Request.Headers.Origin; if (!StringValues.IsNullOrEmpty(originHeader) && webSocketFeature.IsWebSocketRequest) { @@ -157,7 +157,7 @@ public async Task AcceptAsync(WebSocketAcceptContext acceptContext) } } - string key = _context.Request.Headers[HeaderNames.SecWebSocketKey]; + string key = _context.Request.Headers.SecWebSocketKey; HandshakeHelpers.GenerateResponseHeaders(key, subProtocol, _context.Response.Headers); diff --git a/src/Middleware/perf/ResponseCaching.Microbenchmarks/ResponseCachingBenchmark.cs b/src/Middleware/perf/ResponseCaching.Microbenchmarks/ResponseCachingBenchmark.cs index d54f3f9c18f0..1af346a0305d 100644 --- a/src/Middleware/perf/ResponseCaching.Microbenchmarks/ResponseCachingBenchmark.cs +++ b/src/Middleware/perf/ResponseCaching.Microbenchmarks/ResponseCachingBenchmark.cs @@ -36,7 +36,7 @@ public void Setup() { _middleware = new ResponseCachingMiddleware( async context => { - context.Response.Headers[HeaderNames.CacheControl] = _cacheControl; + context.Response.Headers.CacheControl = _cacheControl; await context.Response.BodyWriter.WriteAsync(new ReadOnlyMemory(_data, 0, Size)); }, Options.Create(new ResponseCachingOptions @@ -61,7 +61,7 @@ public async Task Cache() context.Request.Path = "/a"; // don't serve from cache but store result - context.Request.Headers[HeaderNames.CacheControl] = CacheControlHeaderValue.NoCacheString; + context.Request.Headers.CacheControl = CacheControlHeaderValue.NoCacheString; await _middleware.Invoke(context); diff --git a/src/Mvc/Mvc.Core/src/AcceptedAtActionResult.cs b/src/Mvc/Mvc.Core/src/AcceptedAtActionResult.cs index d45ff8474b62..2c352d1fc79d 100644 --- a/src/Mvc/Mvc.Core/src/AcceptedAtActionResult.cs +++ b/src/Mvc/Mvc.Core/src/AcceptedAtActionResult.cs @@ -92,7 +92,7 @@ public override void OnFormatting(ActionContext context) throw new InvalidOperationException(Resources.NoRoutesMatched); } - context.HttpContext.Response.Headers[HeaderNames.Location] = url; + context.HttpContext.Response.Headers.Location = url; } } } diff --git a/src/Mvc/Mvc.Core/src/AcceptedAtRouteResult.cs b/src/Mvc/Mvc.Core/src/AcceptedAtRouteResult.cs index 7b259aa46647..59248c37065b 100644 --- a/src/Mvc/Mvc.Core/src/AcceptedAtRouteResult.cs +++ b/src/Mvc/Mvc.Core/src/AcceptedAtRouteResult.cs @@ -88,7 +88,7 @@ public override void OnFormatting(ActionContext context) throw new InvalidOperationException(Resources.NoRoutesMatched); } - context.HttpContext.Response.Headers[HeaderNames.Location] = url; + context.HttpContext.Response.Headers.Location = url; } } } diff --git a/src/Mvc/Mvc.Core/src/AcceptedResult.cs b/src/Mvc/Mvc.Core/src/AcceptedResult.cs index 159f59cc9906..62aea680e234 100644 --- a/src/Mvc/Mvc.Core/src/AcceptedResult.cs +++ b/src/Mvc/Mvc.Core/src/AcceptedResult.cs @@ -82,7 +82,7 @@ public override void OnFormatting(ActionContext context) if (!string.IsNullOrEmpty(Location)) { - context.HttpContext.Response.Headers[HeaderNames.Location] = Location; + context.HttpContext.Response.Headers.Location = Location; } } } diff --git a/src/Mvc/Mvc.Core/src/CreatedAtActionResult.cs b/src/Mvc/Mvc.Core/src/CreatedAtActionResult.cs index 9f1c2d62ae13..0e0a22cb98e3 100644 --- a/src/Mvc/Mvc.Core/src/CreatedAtActionResult.cs +++ b/src/Mvc/Mvc.Core/src/CreatedAtActionResult.cs @@ -92,7 +92,7 @@ public override void OnFormatting(ActionContext context) throw new InvalidOperationException(Resources.NoRoutesMatched); } - context.HttpContext.Response.Headers[HeaderNames.Location] = url; + context.HttpContext.Response.Headers.Location = url; } } } diff --git a/src/Mvc/Mvc.Core/src/CreatedAtRouteResult.cs b/src/Mvc/Mvc.Core/src/CreatedAtRouteResult.cs index 3e74801e77d9..93d4cdc89723 100644 --- a/src/Mvc/Mvc.Core/src/CreatedAtRouteResult.cs +++ b/src/Mvc/Mvc.Core/src/CreatedAtRouteResult.cs @@ -88,7 +88,7 @@ public override void OnFormatting(ActionContext context) throw new InvalidOperationException(Resources.NoRoutesMatched); } - context.HttpContext.Response.Headers[HeaderNames.Location] = url; + context.HttpContext.Response.Headers.Location = url; } } } diff --git a/src/Mvc/Mvc.Core/src/CreatedResult.cs b/src/Mvc/Mvc.Core/src/CreatedResult.cs index 79263abbcef3..7c695c256a13 100644 --- a/src/Mvc/Mvc.Core/src/CreatedResult.cs +++ b/src/Mvc/Mvc.Core/src/CreatedResult.cs @@ -91,7 +91,7 @@ public override void OnFormatting(ActionContext context) base.OnFormatting(context); - context.HttpContext.Response.Headers[HeaderNames.Location] = Location; + context.HttpContext.Response.Headers.Location = Location; } } } diff --git a/src/Mvc/Mvc.Core/src/Formatters/TextOutputFormatter.cs b/src/Mvc/Mvc.Core/src/Formatters/TextOutputFormatter.cs index 448a2ec2d64c..a601361f48a1 100644 --- a/src/Mvc/Mvc.Core/src/Formatters/TextOutputFormatter.cs +++ b/src/Mvc/Mvc.Core/src/Formatters/TextOutputFormatter.cs @@ -168,7 +168,7 @@ public sealed override Task WriteResponseBodyAsync(OutputFormatterWriteContext c internal static IList GetAcceptCharsetHeaderValues(OutputFormatterWriteContext context) { var request = context.HttpContext.Request; - if (StringWithQualityHeaderValue.TryParseList(request.Headers[HeaderNames.AcceptCharset], out var result)) + if (StringWithQualityHeaderValue.TryParseList(request.Headers.AcceptCharset, out var result)) { return result; } diff --git a/src/Mvc/Mvc.Core/src/Infrastructure/DefaultOutputFormatterSelector.cs b/src/Mvc/Mvc.Core/src/Infrastructure/DefaultOutputFormatterSelector.cs index d6c911e66359..f2a03415141a 100644 --- a/src/Mvc/Mvc.Core/src/Infrastructure/DefaultOutputFormatterSelector.cs +++ b/src/Mvc/Mvc.Core/src/Infrastructure/DefaultOutputFormatterSelector.cs @@ -169,7 +169,7 @@ public DefaultOutputFormatterSelector(IOptions options, ILoggerFacto private List GetAcceptableMediaTypes(HttpRequest request) { var result = new List(); - AcceptHeaderParser.ParseAcceptHeader(request.Headers[HeaderNames.Accept], result); + AcceptHeaderParser.ParseAcceptHeader(request.Headers.Accept, result); for (var i = 0; i < result.Count; i++) { var mediaType = new MediaType(result[i].MediaType); diff --git a/src/Mvc/Mvc.Core/src/Infrastructure/FileResultExecutorBase.cs b/src/Mvc/Mvc.Core/src/Infrastructure/FileResultExecutorBase.cs index 99ea3cb0554a..c97c01cbf2ff 100644 --- a/src/Mvc/Mvc.Core/src/Infrastructure/FileResultExecutorBase.cs +++ b/src/Mvc/Mvc.Core/src/Infrastructure/FileResultExecutorBase.cs @@ -156,7 +156,7 @@ private static void SetContentDispositionHeader(ActionContext context, FileResul // basis for the actual filename, where possible. var contentDisposition = new ContentDispositionHeaderValue("attachment"); contentDisposition.SetHttpFileName(result.FileDownloadName); - context.HttpContext.Response.Headers[HeaderNames.ContentDisposition] = contentDisposition.ToString(); + context.HttpContext.Response.Headers.ContentDisposition = contentDisposition.ToString(); } } @@ -175,7 +175,7 @@ private static void SetLastModifiedAndEtagHeaders(HttpResponse response, DateTim private static void SetAcceptRangeHeader(HttpResponse response) { - response.Headers[HeaderNames.AcceptRanges] = AcceptRangeHeaderValue; + response.Headers.AcceptRanges = AcceptRangeHeaderValue; } internal bool IfRangeValid( diff --git a/src/Mvc/Mvc.Core/src/Infrastructure/LocalRedirectResultExecutor.cs b/src/Mvc/Mvc.Core/src/Infrastructure/LocalRedirectResultExecutor.cs index cf1e8dad1d96..2584c3f8e24f 100644 --- a/src/Mvc/Mvc.Core/src/Infrastructure/LocalRedirectResultExecutor.cs +++ b/src/Mvc/Mvc.Core/src/Infrastructure/LocalRedirectResultExecutor.cs @@ -70,7 +70,7 @@ public virtual Task ExecuteAsync(ActionContext context, LocalRedirectResult resu { context.HttpContext.Response.StatusCode = result.Permanent ? StatusCodes.Status308PermanentRedirect : StatusCodes.Status307TemporaryRedirect; - context.HttpContext.Response.Headers[HeaderNames.Location] = destinationUrl; + context.HttpContext.Response.Headers.Location = destinationUrl; } else { diff --git a/src/Mvc/Mvc.Core/src/Infrastructure/RedirectResultExecutor.cs b/src/Mvc/Mvc.Core/src/Infrastructure/RedirectResultExecutor.cs index f229e19b1c0b..f982838b7bbd 100644 --- a/src/Mvc/Mvc.Core/src/Infrastructure/RedirectResultExecutor.cs +++ b/src/Mvc/Mvc.Core/src/Infrastructure/RedirectResultExecutor.cs @@ -68,7 +68,7 @@ public virtual Task ExecuteAsync(ActionContext context, RedirectResult result) { context.HttpContext.Response.StatusCode = result.Permanent ? StatusCodes.Status308PermanentRedirect : StatusCodes.Status307TemporaryRedirect; - context.HttpContext.Response.Headers[HeaderNames.Location] = destinationUrl; + context.HttpContext.Response.Headers.Location = destinationUrl; } else { diff --git a/src/Mvc/Mvc.Core/src/Infrastructure/RedirectToActionResultExecutor.cs b/src/Mvc/Mvc.Core/src/Infrastructure/RedirectToActionResultExecutor.cs index c36a84261c74..77460bed63ab 100644 --- a/src/Mvc/Mvc.Core/src/Infrastructure/RedirectToActionResultExecutor.cs +++ b/src/Mvc/Mvc.Core/src/Infrastructure/RedirectToActionResultExecutor.cs @@ -74,7 +74,7 @@ public virtual Task ExecuteAsync(ActionContext context, RedirectToActionResult r { context.HttpContext.Response.StatusCode = result.Permanent ? StatusCodes.Status308PermanentRedirect : StatusCodes.Status307TemporaryRedirect; - context.HttpContext.Response.Headers[HeaderNames.Location] = destinationUrl; + context.HttpContext.Response.Headers.Location = destinationUrl; } else { diff --git a/src/Mvc/Mvc.Core/src/Infrastructure/RedirectToPageResultExecutor.cs b/src/Mvc/Mvc.Core/src/Infrastructure/RedirectToPageResultExecutor.cs index 31b426826a14..e37450ff04ec 100644 --- a/src/Mvc/Mvc.Core/src/Infrastructure/RedirectToPageResultExecutor.cs +++ b/src/Mvc/Mvc.Core/src/Infrastructure/RedirectToPageResultExecutor.cs @@ -74,7 +74,7 @@ public virtual Task ExecuteAsync(ActionContext context, RedirectToPageResult res { context.HttpContext.Response.StatusCode = result.Permanent ? StatusCodes.Status308PermanentRedirect : StatusCodes.Status307TemporaryRedirect; - context.HttpContext.Response.Headers[HeaderNames.Location] = destinationUrl; + context.HttpContext.Response.Headers.Location = destinationUrl; } else { diff --git a/src/Mvc/Mvc.Core/src/Infrastructure/RedirectToRouteResultExecutor.cs b/src/Mvc/Mvc.Core/src/Infrastructure/RedirectToRouteResultExecutor.cs index d6b91a4f7872..a00ab6975cc1 100644 --- a/src/Mvc/Mvc.Core/src/Infrastructure/RedirectToRouteResultExecutor.cs +++ b/src/Mvc/Mvc.Core/src/Infrastructure/RedirectToRouteResultExecutor.cs @@ -63,7 +63,7 @@ public virtual Task ExecuteAsync(ActionContext context, RedirectToRouteResult re { context.HttpContext.Response.StatusCode = result.Permanent ? StatusCodes.Status308PermanentRedirect : StatusCodes.Status307TemporaryRedirect; - context.HttpContext.Response.Headers[HeaderNames.Location] = destinationUrl; + context.HttpContext.Response.Headers.Location = destinationUrl; } else { diff --git a/src/Mvc/Mvc.Core/test/FileContentResultTest.cs b/src/Mvc/Mvc.Core/test/FileContentResultTest.cs index 3a1451994402..77380a55755c 100644 --- a/src/Mvc/Mvc.Core/test/FileContentResultTest.cs +++ b/src/Mvc/Mvc.Core/test/FileContentResultTest.cs @@ -134,12 +134,12 @@ public async Task WriteFileAsync_PreconditionStateShouldProcess_WritesRangeReque httpResponse.Body.Seek(0, SeekOrigin.Begin); var streamReader = new StreamReader(httpResponse.Body); var body = streamReader.ReadToEndAsync().Result; - Assert.Equal(lastModified.ToString("R"), httpResponse.Headers[HeaderNames.LastModified]); - Assert.Equal(entityTag.ToString(), httpResponse.Headers[HeaderNames.ETag]); + Assert.Equal(lastModified.ToString("R"), httpResponse.Headers.LastModified); + Assert.Equal(entityTag.ToString(), httpResponse.Headers.ETag); Assert.Equal(StatusCodes.Status206PartialContent, httpResponse.StatusCode); - Assert.Equal("bytes", httpResponse.Headers[HeaderNames.AcceptRanges]); + Assert.Equal("bytes", httpResponse.Headers.AcceptRanges); var contentRange = new ContentRangeHeaderValue(start.Value, end.Value, byteArray.Length); - Assert.Equal(contentRange.ToString(), httpResponse.Headers[HeaderNames.ContentRange]); + Assert.Equal(contentRange.ToString(), httpResponse.Headers.ContentRange); Assert.Equal(contentLength, httpResponse.ContentLength); Assert.Equal(expectedString, body); } @@ -180,15 +180,15 @@ public async Task WriteFileAsync_IfRangeHeaderValid_WritesRangeRequest() httpResponse.Body.Seek(0, SeekOrigin.Begin); var streamReader = new StreamReader(httpResponse.Body); var body = streamReader.ReadToEndAsync().Result; - Assert.Equal(lastModified.ToString("R"), httpResponse.Headers[HeaderNames.LastModified]); - Assert.Equal(entityTag.ToString(), httpResponse.Headers[HeaderNames.ETag]); + Assert.Equal(lastModified.ToString("R"), httpResponse.Headers.LastModified); + Assert.Equal(entityTag.ToString(), httpResponse.Headers.ETag); if (result.EnableRangeProcessing) { Assert.Equal(StatusCodes.Status206PartialContent, httpResponse.StatusCode); - Assert.Equal("bytes", httpResponse.Headers[HeaderNames.AcceptRanges]); + Assert.Equal("bytes", httpResponse.Headers.AcceptRanges); var contentRange = new ContentRangeHeaderValue(0, 4, byteArray.Length); - Assert.Equal(contentRange.ToString(), httpResponse.Headers[HeaderNames.ContentRange]); + Assert.Equal(contentRange.ToString(), httpResponse.Headers.ContentRange); Assert.Equal(5, httpResponse.ContentLength); Assert.Equal("Hello", body); } @@ -236,8 +236,8 @@ public async Task WriteFileAsync_RangeProcessingNotEnabled_RangeRequestIgnored() var streamReader = new StreamReader(httpResponse.Body); var body = streamReader.ReadToEndAsync().Result; Assert.Equal(StatusCodes.Status200OK, httpResponse.StatusCode); - Assert.Equal(lastModified.ToString("R"), httpResponse.Headers[HeaderNames.LastModified]); - Assert.Equal(entityTag.ToString(), httpResponse.Headers[HeaderNames.ETag]); + Assert.Equal(lastModified.ToString("R"), httpResponse.Headers.LastModified); + Assert.Equal(entityTag.ToString(), httpResponse.Headers.ETag); Assert.Equal("Hello World", body); } @@ -278,8 +278,8 @@ public async Task WriteFileAsync_IfRangeHeaderInvalid_RangeRequestIgnored() var streamReader = new StreamReader(httpResponse.Body); var body = streamReader.ReadToEndAsync().Result; Assert.Equal(StatusCodes.Status200OK, httpResponse.StatusCode); - Assert.Equal(lastModified.ToString("R"), httpResponse.Headers[HeaderNames.LastModified]); - Assert.Equal(entityTag.ToString(), httpResponse.Headers[HeaderNames.ETag]); + Assert.Equal(lastModified.ToString("R"), httpResponse.Headers.LastModified); + Assert.Equal(entityTag.ToString(), httpResponse.Headers.ETag); Assert.Equal("Hello World", body); } @@ -303,7 +303,7 @@ public async Task WriteFileAsync_PreconditionStateUnspecified_RangeRequestIgnore }; var httpContext = GetHttpContext(); - httpContext.Request.Headers[HeaderNames.Range] = rangeString; + httpContext.Request.Headers.Range = rangeString; httpContext.Request.Method = HttpMethods.Get; httpContext.Response.Body = new MemoryStream(); var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor()); @@ -316,10 +316,10 @@ public async Task WriteFileAsync_PreconditionStateUnspecified_RangeRequestIgnore httpResponse.Body.Seek(0, SeekOrigin.Begin); var streamReader = new StreamReader(httpResponse.Body); var body = streamReader.ReadToEndAsync().Result; - Assert.Empty(httpResponse.Headers[HeaderNames.ContentRange]); + Assert.Empty(httpResponse.Headers.ContentRange); Assert.Equal(StatusCodes.Status200OK, httpResponse.StatusCode); - Assert.Equal(lastModified.ToString("R"), httpResponse.Headers[HeaderNames.LastModified]); - Assert.Equal(entityTag.ToString(), httpResponse.Headers[HeaderNames.ETag]); + Assert.Equal(lastModified.ToString("R"), httpResponse.Headers.LastModified); + Assert.Equal(entityTag.ToString(), httpResponse.Headers.ETag); Assert.Equal("Hello World", body); } @@ -342,7 +342,7 @@ public async Task WriteFileAsync_PreconditionStateUnspecified_RangeRequestedNotS }; var httpContext = GetHttpContext(); - httpContext.Request.Headers[HeaderNames.Range] = rangeString; + httpContext.Request.Headers.Range = rangeString; httpContext.Request.Method = HttpMethods.Get; httpContext.Response.Body = new MemoryStream(); var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor()); @@ -356,11 +356,11 @@ public async Task WriteFileAsync_PreconditionStateUnspecified_RangeRequestedNotS var streamReader = new StreamReader(httpResponse.Body); var body = streamReader.ReadToEndAsync().Result; var contentRange = new ContentRangeHeaderValue(byteArray.Length); - Assert.Equal(lastModified.ToString("R"), httpResponse.Headers[HeaderNames.LastModified]); - Assert.Equal(entityTag.ToString(), httpResponse.Headers[HeaderNames.ETag]); + Assert.Equal(lastModified.ToString("R"), httpResponse.Headers.LastModified); + Assert.Equal(entityTag.ToString(), httpResponse.Headers.ETag); Assert.Equal(StatusCodes.Status416RangeNotSatisfiable, httpResponse.StatusCode); - Assert.Equal("bytes", httpResponse.Headers[HeaderNames.AcceptRanges]); - Assert.Equal(contentRange.ToString(), httpResponse.Headers[HeaderNames.ContentRange]); + Assert.Equal("bytes", httpResponse.Headers.AcceptRanges); + Assert.Equal(contentRange.ToString(), httpResponse.Headers.ContentRange); Assert.Equal(0, httpResponse.ContentLength); Assert.Empty(body); } @@ -387,7 +387,7 @@ public async Task WriteFileAsync_PreconditionFailed_RangeRequestedIgnored() { new EntityTagHeaderValue("\"NotEtag\""), }; - httpContext.Request.Headers[HeaderNames.Range] = "bytes = 0-6"; + httpContext.Request.Headers.Range = "bytes = 0-6"; httpContext.Request.Method = HttpMethods.Get; httpContext.Response.Body = new MemoryStream(); var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor()); @@ -402,8 +402,8 @@ public async Task WriteFileAsync_PreconditionFailed_RangeRequestedIgnored() var body = streamReader.ReadToEndAsync().Result; Assert.Equal(StatusCodes.Status412PreconditionFailed, httpResponse.StatusCode); Assert.Null(httpResponse.ContentLength); - Assert.Empty(httpResponse.Headers[HeaderNames.ContentRange]); - Assert.NotEmpty(httpResponse.Headers[HeaderNames.LastModified]); + Assert.Empty(httpResponse.Headers.ContentRange); + Assert.NotEmpty(httpResponse.Headers.LastModified); Assert.Empty(body); } @@ -429,7 +429,7 @@ public async Task WriteFileAsync_NotModified_RangeRequestedIgnored() { new EntityTagHeaderValue("\"Etag\""), }; - httpContext.Request.Headers[HeaderNames.Range] = "bytes = 0-6"; + httpContext.Request.Headers.Range = "bytes = 0-6"; httpContext.Request.Method = HttpMethods.Get; httpContext.Response.Body = new MemoryStream(); var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor()); @@ -445,8 +445,8 @@ public async Task WriteFileAsync_NotModified_RangeRequestedIgnored() Assert.Equal(StatusCodes.Status304NotModified, httpResponse.StatusCode); Assert.Null(httpResponse.ContentLength); Assert.False(httpResponse.Headers.ContainsKey(HeaderNames.ContentType)); - Assert.Empty(httpResponse.Headers[HeaderNames.ContentRange]); - Assert.NotEmpty(httpResponse.Headers[HeaderNames.LastModified]); + Assert.Empty(httpResponse.Headers.ContentRange); + Assert.NotEmpty(httpResponse.Headers.LastModified); Assert.Empty(body); } diff --git a/src/Mvc/Mvc.Core/test/FileResultTest.cs b/src/Mvc/Mvc.Core/test/FileResultTest.cs index 674026b5f187..07967adc1eda 100644 --- a/src/Mvc/Mvc.Core/test/FileResultTest.cs +++ b/src/Mvc/Mvc.Core/test/FileResultTest.cs @@ -236,7 +236,7 @@ public async Task SetsAcceptRangeHeader() await result.ExecuteResultAsync(actionContext); // Assert - Assert.Equal("bytes", httpContext.Response.Headers[HeaderNames.AcceptRanges]); + Assert.Equal("bytes", httpContext.Response.Headers.AcceptRanges); } [Theory] @@ -407,7 +407,7 @@ public async Task IfModifiedSinceComparison_OnlyUsesWholeSeconds( { // Arrange var httpContext = GetHttpContext(); - httpContext.Request.Headers[HeaderNames.IfModifiedSince] = HeaderUtilities.FormatDate(ifModifiedSince); + httpContext.Request.Headers.IfModifiedSince = HeaderUtilities.FormatDate(ifModifiedSince); var actionContext = CreateActionContext(httpContext); // Represents 4/9/2018 11:24:22 AM +00:00 // Ticks rounded down to seconds: 636588698620000000 @@ -445,7 +445,7 @@ public async Task IfUnmodifiedSinceComparison_OnlyUsesWholeSeconds(DateTimeOffse { // Arrange var httpContext = GetHttpContext(); - httpContext.Request.Headers[HeaderNames.IfUnmodifiedSince] = HeaderUtilities.FormatDate(ifUnmodifiedSince); + httpContext.Request.Headers.IfUnmodifiedSince = HeaderUtilities.FormatDate(ifUnmodifiedSince); var actionContext = CreateActionContext(httpContext); // Represents 4/9/2018 11:24:22 AM +00:00 // Ticks rounded down to seconds: 636588698620000000 diff --git a/src/Mvc/Mvc.Core/test/FileStreamResultTest.cs b/src/Mvc/Mvc.Core/test/FileStreamResultTest.cs index 8152b2c44e9e..fc40761013a3 100644 --- a/src/Mvc/Mvc.Core/test/FileStreamResultTest.cs +++ b/src/Mvc/Mvc.Core/test/FileStreamResultTest.cs @@ -118,11 +118,11 @@ public async Task WriteFileAsync_PreconditionStateShouldProcess_WritesRangeReque var streamReader = new StreamReader(httpResponse.Body); var body = streamReader.ReadToEndAsync().Result; var contentRange = new ContentRangeHeaderValue(start.Value, end.Value, byteArray.Length); - Assert.Equal(lastModified.ToString("R"), httpResponse.Headers[HeaderNames.LastModified]); - Assert.Equal(entityTag.ToString(), httpResponse.Headers[HeaderNames.ETag]); + Assert.Equal(lastModified.ToString("R"), httpResponse.Headers.LastModified); + Assert.Equal(entityTag.ToString(), httpResponse.Headers.ETag); Assert.Equal(StatusCodes.Status206PartialContent, httpResponse.StatusCode); - Assert.Equal("bytes", httpResponse.Headers[HeaderNames.AcceptRanges]); - Assert.Equal(contentRange.ToString(), httpResponse.Headers[HeaderNames.ContentRange]); + Assert.Equal("bytes", httpResponse.Headers.AcceptRanges); + Assert.Equal(contentRange.ToString(), httpResponse.Headers.ContentRange); Assert.Equal(contentLength, httpResponse.ContentLength); Assert.Equal(expectedString, body); Assert.False(readStream.CanSeek); @@ -166,12 +166,12 @@ public async Task WriteFileAsync_IfRangeHeaderValid_WritesRequestedRange() httpResponse.Body.Seek(0, SeekOrigin.Begin); var streamReader = new StreamReader(httpResponse.Body); var body = streamReader.ReadToEndAsync().Result; - Assert.Equal(lastModified.ToString("R"), httpResponse.Headers[HeaderNames.LastModified]); - Assert.Equal(entityTag.ToString(), httpResponse.Headers[HeaderNames.ETag]); + Assert.Equal(lastModified.ToString("R"), httpResponse.Headers.LastModified); + Assert.Equal(entityTag.ToString(), httpResponse.Headers.ETag); var contentRange = new ContentRangeHeaderValue(0, 4, byteArray.Length); Assert.Equal(StatusCodes.Status206PartialContent, httpResponse.StatusCode); - Assert.Equal("bytes", httpResponse.Headers[HeaderNames.AcceptRanges]); - Assert.Equal(contentRange.ToString(), httpResponse.Headers[HeaderNames.ContentRange]); + Assert.Equal("bytes", httpResponse.Headers.AcceptRanges); + Assert.Equal(contentRange.ToString(), httpResponse.Headers.ContentRange); Assert.Equal(5, httpResponse.ContentLength); Assert.Equal("Hello", body); Assert.False(readStream.CanSeek); @@ -215,8 +215,8 @@ public async Task WriteFileAsync_RangeProcessingNotEnabled_RangeRequestedIgnored var streamReader = new StreamReader(httpResponse.Body); var body = streamReader.ReadToEndAsync().Result; Assert.Equal(StatusCodes.Status200OK, httpResponse.StatusCode); - Assert.Equal(lastModified.ToString("R"), httpResponse.Headers[HeaderNames.LastModified]); - Assert.Equal(entityTag.ToString(), httpResponse.Headers[HeaderNames.ETag]); + Assert.Equal(lastModified.ToString("R"), httpResponse.Headers.LastModified); + Assert.Equal(entityTag.ToString(), httpResponse.Headers.ETag); Assert.Equal("Hello World", body); Assert.False(readStream.CanSeek); } @@ -260,8 +260,8 @@ public async Task WriteFileAsync_IfRangeHeaderInvalid_RangeRequestedIgnored() var streamReader = new StreamReader(httpResponse.Body); var body = streamReader.ReadToEndAsync().Result; Assert.Equal(StatusCodes.Status200OK, httpResponse.StatusCode); - Assert.Equal(lastModified.ToString("R"), httpResponse.Headers[HeaderNames.LastModified]); - Assert.Equal(entityTag.ToString(), httpResponse.Headers[HeaderNames.ETag]); + Assert.Equal(lastModified.ToString("R"), httpResponse.Headers.LastModified); + Assert.Equal(entityTag.ToString(), httpResponse.Headers.ETag); Assert.Equal("Hello World", body); Assert.False(readStream.CanSeek); } @@ -288,7 +288,7 @@ public async Task WriteFileAsync_PreconditionStateUnspecified_RangeRequestIgnore var httpContext = GetHttpContext(); var requestHeaders = httpContext.Request.GetTypedHeaders(); - httpContext.Request.Headers[HeaderNames.Range] = rangeString; + httpContext.Request.Headers.Range = rangeString; httpContext.Request.Method = HttpMethods.Get; httpContext.Response.Body = new MemoryStream(); var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor()); @@ -301,10 +301,10 @@ public async Task WriteFileAsync_PreconditionStateUnspecified_RangeRequestIgnore httpResponse.Body.Seek(0, SeekOrigin.Begin); var streamReader = new StreamReader(httpResponse.Body); var body = streamReader.ReadToEndAsync().Result; - Assert.Empty(httpResponse.Headers[HeaderNames.ContentRange]); + Assert.Empty(httpResponse.Headers.ContentRange); Assert.Equal(StatusCodes.Status200OK, httpResponse.StatusCode); - Assert.Equal(lastModified.ToString("R"), httpResponse.Headers[HeaderNames.LastModified]); - Assert.Equal(entityTag.ToString(), httpResponse.Headers[HeaderNames.ETag]); + Assert.Equal(lastModified.ToString("R"), httpResponse.Headers.LastModified); + Assert.Equal(entityTag.ToString(), httpResponse.Headers.ETag); Assert.Equal("Hello World", body); Assert.False(readStream.CanSeek); } @@ -329,7 +329,7 @@ public async Task WriteFileAsync_PreconditionStateUnspecified_RangeRequestedNotS }; var httpContext = GetHttpContext(); - httpContext.Request.Headers[HeaderNames.Range] = rangeString; + httpContext.Request.Headers.Range = rangeString; httpContext.Request.Method = HttpMethods.Get; httpContext.Response.Body = new MemoryStream(); var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor()); @@ -343,11 +343,11 @@ public async Task WriteFileAsync_PreconditionStateUnspecified_RangeRequestedNotS var streamReader = new StreamReader(httpResponse.Body); var body = streamReader.ReadToEndAsync().Result; var contentRange = new ContentRangeHeaderValue(byteArray.Length); - Assert.Equal(lastModified.ToString("R"), httpResponse.Headers[HeaderNames.LastModified]); - Assert.Equal(entityTag.ToString(), httpResponse.Headers[HeaderNames.ETag]); + Assert.Equal(lastModified.ToString("R"), httpResponse.Headers.LastModified); + Assert.Equal(entityTag.ToString(), httpResponse.Headers.ETag); Assert.Equal(StatusCodes.Status416RangeNotSatisfiable, httpResponse.StatusCode); - Assert.Equal("bytes", httpResponse.Headers[HeaderNames.AcceptRanges]); - Assert.Equal(contentRange.ToString(), httpResponse.Headers[HeaderNames.ContentRange]); + Assert.Equal("bytes", httpResponse.Headers.AcceptRanges); + Assert.Equal(contentRange.ToString(), httpResponse.Headers.ContentRange); Assert.Equal(0, httpResponse.ContentLength); Assert.Empty(body); Assert.False(readStream.CanSeek); @@ -376,7 +376,7 @@ public async Task WriteFileAsync_RangeRequested_PreconditionFailed() { new EntityTagHeaderValue("\"NotEtag\""), }; - httpContext.Request.Headers[HeaderNames.Range] = "bytes = 0-6"; + httpContext.Request.Headers.Range = "bytes = 0-6"; httpContext.Request.Method = HttpMethods.Get; httpContext.Response.Body = new MemoryStream(); var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor()); @@ -391,8 +391,8 @@ public async Task WriteFileAsync_RangeRequested_PreconditionFailed() var body = streamReader.ReadToEndAsync().Result; Assert.Equal(StatusCodes.Status412PreconditionFailed, httpResponse.StatusCode); Assert.Null(httpResponse.ContentLength); - Assert.Empty(httpResponse.Headers[HeaderNames.ContentRange]); - Assert.NotEmpty(httpResponse.Headers[HeaderNames.LastModified]); + Assert.Empty(httpResponse.Headers.ContentRange); + Assert.NotEmpty(httpResponse.Headers.LastModified); Assert.Empty(body); Assert.False(readStream.CanSeek); } @@ -420,7 +420,7 @@ public async Task WriteFileAsync_NotModified_RangeRequestedIgnored() { new EntityTagHeaderValue("\"Etag\""), }; - httpContext.Request.Headers[HeaderNames.Range] = "bytes = 0-6"; + httpContext.Request.Headers.Range = "bytes = 0-6"; httpContext.Request.Method = HttpMethods.Get; httpContext.Response.Body = new MemoryStream(); var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor()); @@ -435,9 +435,9 @@ public async Task WriteFileAsync_NotModified_RangeRequestedIgnored() var body = await streamReader.ReadToEndAsync(); Assert.Equal(StatusCodes.Status304NotModified, httpResponse.StatusCode); Assert.Null(httpResponse.ContentLength); - Assert.Empty(httpResponse.Headers[HeaderNames.ContentRange]); + Assert.Empty(httpResponse.Headers.ContentRange); Assert.False(httpResponse.Headers.ContainsKey(HeaderNames.ContentType)); - Assert.NotEmpty(httpResponse.Headers[HeaderNames.LastModified]); + Assert.NotEmpty(httpResponse.Headers.LastModified); Assert.Empty(body); Assert.False(readStream.CanSeek); } @@ -481,12 +481,12 @@ public async Task WriteFileAsync_RangeRequested_FileLengthZeroOrNull(long? fileL httpResponse.Body.Seek(0, SeekOrigin.Begin); var streamReader = new StreamReader(httpResponse.Body); var body = streamReader.ReadToEndAsync().Result; - Assert.Equal(lastModified.ToString("R"), httpResponse.Headers[HeaderNames.LastModified]); - Assert.Equal(entityTag.ToString(), httpResponse.Headers[HeaderNames.ETag]); + Assert.Equal(lastModified.ToString("R"), httpResponse.Headers.LastModified); + Assert.Equal(entityTag.ToString(), httpResponse.Headers.ETag); var contentRange = new ContentRangeHeaderValue(byteArray.Length); Assert.Equal(StatusCodes.Status416RangeNotSatisfiable, httpResponse.StatusCode); - Assert.Equal("bytes", httpResponse.Headers[HeaderNames.AcceptRanges]); - Assert.Equal(contentRange.ToString(), httpResponse.Headers[HeaderNames.ContentRange]); + Assert.Equal("bytes", httpResponse.Headers.AcceptRanges); + Assert.Equal(contentRange.ToString(), httpResponse.Headers.ContentRange); Assert.Equal(0, httpResponse.ContentLength); Assert.Empty(body); Assert.False(readStream.CanSeek); diff --git a/src/Mvc/Mvc.Core/test/Filters/ResponseCacheFilterExecutorTest.cs b/src/Mvc/Mvc.Core/test/Filters/ResponseCacheFilterExecutorTest.cs index 2ed860f0a89e..83a96c24713f 100644 --- a/src/Mvc/Mvc.Core/test/Filters/ResponseCacheFilterExecutorTest.cs +++ b/src/Mvc/Mvc.Core/test/Filters/ResponseCacheFilterExecutorTest.cs @@ -400,7 +400,7 @@ public void ResponseCacheCanSetVaryByQueryKeys(CacheProfile cacheProfile, string // Assert Assert.Equal(varyOutput, context.HttpContext.Features.Get().VaryByQueryKeys); - Assert.Equal(cacheControlOutput, context.HttpContext.Response.Headers[HeaderNames.CacheControl]); + Assert.Equal(cacheControlOutput, context.HttpContext.Response.Headers.CacheControl); } [Fact] diff --git a/src/Mvc/Mvc.Core/test/Formatters/JsonOutputFormatterTestBase.cs b/src/Mvc/Mvc.Core/test/Formatters/JsonOutputFormatterTestBase.cs index 2e23227dce52..53096b25fe4d 100644 --- a/src/Mvc/Mvc.Core/test/Formatters/JsonOutputFormatterTestBase.cs +++ b/src/Mvc/Mvc.Core/test/Formatters/JsonOutputFormatterTestBase.cs @@ -171,7 +171,7 @@ protected static ActionContext GetActionContext( { var httpContext = new DefaultHttpContext(); httpContext.Request.ContentType = contentType.ToString(); - httpContext.Request.Headers[HeaderNames.AcceptCharset] = contentType.Charset.ToString(); + httpContext.Request.Headers.AcceptCharset = contentType.Charset.ToString(); httpContext.Response.Body = responseStream ?? new MemoryStream(); diff --git a/src/Mvc/Mvc.Core/test/Formatters/TextOutputFormatterTests.cs b/src/Mvc/Mvc.Core/test/Formatters/TextOutputFormatterTests.cs index 53420ac38d7e..c47241e00a03 100644 --- a/src/Mvc/Mvc.Core/test/Formatters/TextOutputFormatterTests.cs +++ b/src/Mvc/Mvc.Core/test/Formatters/TextOutputFormatterTests.cs @@ -43,8 +43,8 @@ public void SelectResponseCharacterEncoding_SelectsEncoding( // Arrange var httpContext = new Mock(); var httpRequest = new DefaultHttpContext().Request; - httpRequest.Headers[HeaderNames.AcceptCharset] = acceptCharsetHeaders; - httpRequest.Headers[HeaderNames.Accept] = "application/acceptCharset"; + httpRequest.Headers.AcceptCharset = acceptCharsetHeaders; + httpRequest.Headers.Accept = "application/acceptCharset"; httpContext.SetupGet(o => o.Request).Returns(httpRequest); var formatter = new TestOutputFormatter(); @@ -59,7 +59,7 @@ public void SelectResponseCharacterEncoding_SelectsEncoding( typeof(string), "someValue") { - ContentType = new StringSegment(httpRequest.Headers[HeaderNames.Accept]), + ContentType = new StringSegment(httpRequest.Headers.Accept), }; // Act @@ -242,7 +242,7 @@ public void GetAcceptCharsetHeaderValues_ReadsHeaderAndParsesValues() var formatter = new OverrideEncodingFormatter(encoding: null); var context = new DefaultHttpContext(); - context.Request.Headers[HeaderNames.AcceptCharset] = expectedValue; + context.Request.Headers.AcceptCharset = expectedValue; var writerContext = new OutputFormatterWriteContext( context, diff --git a/src/Mvc/Mvc.Core/test/Infrastructure/DefaultOutputFormatterSelectorTest.cs b/src/Mvc/Mvc.Core/test/Infrastructure/DefaultOutputFormatterSelectorTest.cs index 64310b8fd655..dad5bb55f7aa 100644 --- a/src/Mvc/Mvc.Core/test/Infrastructure/DefaultOutputFormatterSelectorTest.cs +++ b/src/Mvc/Mvc.Core/test/Infrastructure/DefaultOutputFormatterSelectorTest.cs @@ -34,7 +34,7 @@ public void SelectFormatter_UsesPassedInFormatters_IgnoresOptionsFormatters() objectType: null, @object: null); - context.HttpContext.Request.Headers[HeaderNames.Accept] = "application/xml"; // This will not be used + context.HttpContext.Request.Headers.Accept = "application/xml"; // This will not be used // Act var formatter = selector.SelectFormatter( @@ -64,7 +64,7 @@ public void SelectFormatter_WithOneProvidedContentType_IgnoresAcceptHeader() objectType: null, @object: null); - context.HttpContext.Request.Headers[HeaderNames.Accept] = "application/xml"; // This will not be used + context.HttpContext.Request.Headers.Accept = "application/xml"; // This will not be used // Act var formatter = selector.SelectFormatter( @@ -93,7 +93,7 @@ public void SelectFormatter_WithOneProvidedContentType_NoFallback() objectType: null, @object: null); - context.HttpContext.Request.Headers[HeaderNames.Accept] = "application/xml"; // This will not be used + context.HttpContext.Request.Headers.Accept = "application/xml"; // This will not be used // Act var formatter = selector.SelectFormatter( @@ -164,7 +164,7 @@ public void SelectFormatter_WithMultipleProvidedContentTypes_DoesConneg( objectType: null, @object: null); - context.HttpContext.Request.Headers[HeaderNames.Accept] = acceptHeader; + context.HttpContext.Request.Headers.Accept = acceptHeader; // Act var formatter = selector.SelectFormatter( @@ -223,7 +223,7 @@ public void SelectFormatter_WithAcceptHeader_UsesFallback() objectType: null, @object: null); - context.HttpContext.Request.Headers[HeaderNames.Accept] = "text/custom,application/custom"; + context.HttpContext.Request.Headers.Accept = "text/custom,application/custom"; // Act var formatter = selector.SelectFormatter( @@ -258,7 +258,7 @@ public void SelectFormatter_WithAcceptHeaderAndReturnHttpNotAcceptable_DoesNotUs objectType: null, @object: null); - context.HttpContext.Request.Headers[HeaderNames.Accept] = "text/custom,application/custom"; + context.HttpContext.Request.Headers.Accept = "text/custom,application/custom"; // Act var formatter = selector.SelectFormatter( @@ -287,7 +287,7 @@ public void SelectFormatter_WithAcceptHeaderOnly_SetsContentTypeIsServerDefinedT objectType: null, @object: null); - context.HttpContext.Request.Headers[HeaderNames.Accept] = "text/custom"; + context.HttpContext.Request.Headers.Accept = "text/custom"; // Act var formatter = selector.SelectFormatter( @@ -316,7 +316,7 @@ public void SelectFormatter_WithAcceptHeaderAndContentTypes_SetsContentTypeIsSer objectType: null, @object: null); - context.HttpContext.Request.Headers[HeaderNames.Accept] = "text/custom, text/custom2"; + context.HttpContext.Request.Headers.Accept = "text/custom, text/custom2"; var serverDefinedContentTypes = new MediaTypeCollection(); serverDefinedContentTypes.Add("text/other"); diff --git a/src/Mvc/Mvc.Core/test/Infrastructure/ObjectResultExecutorTest.cs b/src/Mvc/Mvc.Core/test/Infrastructure/ObjectResultExecutorTest.cs index ce4848879728..fb3c8140ffee 100644 --- a/src/Mvc/Mvc.Core/test/Infrastructure/ObjectResultExecutorTest.cs +++ b/src/Mvc/Mvc.Core/test/Infrastructure/ObjectResultExecutorTest.cs @@ -27,7 +27,7 @@ public async Task ExecuteAsync_UsesSpecifiedContentType() var httpContext = new DefaultHttpContext(); var actionContext = new ActionContext() { HttpContext = httpContext }; - httpContext.Request.Headers[HeaderNames.Accept] = "application/xml"; // This will not be used + httpContext.Request.Headers.Accept = "application/xml"; // This will not be used httpContext.Response.ContentType = "text/json"; var result = new ObjectResult("input") @@ -55,7 +55,7 @@ public async Task ExecuteAsync_ContentTypeProvidedFromResponseAndObjectResult_Us var httpContext = new DefaultHttpContext(); var actionContext = new ActionContext() { HttpContext = httpContext }; - httpContext.Request.Headers[HeaderNames.Accept] = "application/xml"; // This will not be used + httpContext.Request.Headers.Accept = "application/xml"; // This will not be used httpContext.Response.ContentType = "text/plain"; var result = new ObjectResult("input"); @@ -78,7 +78,7 @@ public async Task ExecuteAsync_WithOneProvidedContentType_FromResponseContentTyp var httpContext = new DefaultHttpContext(); var actionContext = new ActionContext() { HttpContext = httpContext }; - httpContext.Request.Headers[HeaderNames.Accept] = "application/xml"; // This will not be used + httpContext.Request.Headers.Accept = "application/xml"; // This will not be used httpContext.Response.ContentType = "application/json"; var result = new ObjectResult("input"); @@ -100,7 +100,7 @@ public async Task ExecuteAsync_WithOneProvidedContentType_FromResponseContentTyp var httpContext = new DefaultHttpContext(); var actionContext = new ActionContext() { HttpContext = httpContext }; - httpContext.Request.Headers[HeaderNames.Accept] = "application/xml"; // This will not be used + httpContext.Request.Headers.Accept = "application/xml"; // This will not be used httpContext.Response.ContentType = "application/json"; var result = new ObjectResult("input"); @@ -190,7 +190,7 @@ public async Task ExecuteAsync_ForProblemDetailsValue_UsesProblemDetailsJsonCont var httpContext = new DefaultHttpContext(); var actionContext = new ActionContext() { HttpContext = httpContext }; - httpContext.Request.Headers[HeaderNames.Accept] = "application/json"; // This will not be used + httpContext.Request.Headers.Accept = "application/json"; // This will not be used httpContext.Response.ContentType = "application/xml"; // This will not be used var result = new ObjectResult(new ProblemDetails()) @@ -216,7 +216,7 @@ public async Task ExecuteAsync_ForProblemDetailsValue_UsesProblemDetailsXMLConte var httpContext = new DefaultHttpContext(); var actionContext = new ActionContext() { HttpContext = httpContext }; - httpContext.Request.Headers[HeaderNames.Accept] = "application/xml"; // This will not be used + httpContext.Request.Headers.Accept = "application/xml"; // This will not be used var result = new ObjectResult(new ProblemDetails()) { @@ -302,7 +302,7 @@ public async Task ExecuteAsync_FallsBackOnFormattersInOptions() // Assert Assert.Equal( "application/json; charset=utf-8", - actionContext.HttpContext.Response.Headers[HeaderNames.ContentType]); + actionContext.HttpContext.Response.Headers.ContentType); } [Fact] @@ -390,13 +390,13 @@ public async Task ExecuteAsync_SelectDefaultFormatter_OnAllMediaRangeAcceptHeade { HttpContext = GetHttpContext(), }; - actionContext.HttpContext.Request.Headers[HeaderNames.Accept] = acceptHeader; + actionContext.HttpContext.Request.Headers.Accept = acceptHeader; // Act await executor.ExecuteAsync(actionContext, result); // Assert - Assert.Equal(expectedContentType, actionContext.HttpContext.Response.Headers[HeaderNames.ContentType]); + Assert.Equal(expectedContentType, actionContext.HttpContext.Response.Headers.ContentType); } [Theory] @@ -427,13 +427,13 @@ public async Task ObjectResult_PerformsContentNegotiation_OnAllMediaRangeAcceptH { HttpContext = GetHttpContext(), }; - actionContext.HttpContext.Request.Headers[HeaderNames.Accept] = acceptHeader; + actionContext.HttpContext.Request.Headers.Accept = acceptHeader; // Act await executor.ExecuteAsync(actionContext, result); // Assert - var responseContentType = actionContext.HttpContext.Response.Headers[HeaderNames.ContentType]; + var responseContentType = actionContext.HttpContext.Response.Headers.ContentType; MediaTypeAssert.Equal(expectedContentType, responseContentType); } diff --git a/src/Mvc/Mvc.Core/test/LocalRedirectResultTest.cs b/src/Mvc/Mvc.Core/test/LocalRedirectResultTest.cs index 0c6bb21381fd..5c90a65e87aa 100644 --- a/src/Mvc/Mvc.Core/test/LocalRedirectResultTest.cs +++ b/src/Mvc/Mvc.Core/test/LocalRedirectResultTest.cs @@ -80,7 +80,7 @@ public async Task Execute_ReturnsExpectedValues() await result.ExecuteResultAsync(actionContext); // Assert - Assert.Equal(expectedPath, httpContext.Response.Headers[HeaderNames.Location].ToString()); + Assert.Equal(expectedPath, httpContext.Response.Headers.Location.ToString()); Assert.Equal(StatusCodes.Status302Found, httpContext.Response.StatusCode); } diff --git a/src/Mvc/Mvc.Core/test/PhysicalFileResultTest.cs b/src/Mvc/Mvc.Core/test/PhysicalFileResultTest.cs index acd3e7f34b0c..8d29080dd204 100644 --- a/src/Mvc/Mvc.Core/test/PhysicalFileResultTest.cs +++ b/src/Mvc/Mvc.Core/test/PhysicalFileResultTest.cs @@ -81,9 +81,9 @@ public async Task WriteFileAsync_WritesRangeRequested(long? start, long? end, st var httpResponse = actionContext.HttpContext.Response; var contentRange = new ContentRangeHeaderValue(startResult.Value, endResult.Value, 34); Assert.Equal(StatusCodes.Status206PartialContent, httpResponse.StatusCode); - Assert.Equal("bytes", httpResponse.Headers[HeaderNames.AcceptRanges]); - Assert.Equal(contentRange.ToString(), httpResponse.Headers[HeaderNames.ContentRange]); - Assert.NotEmpty(httpResponse.Headers[HeaderNames.LastModified]); + Assert.Equal("bytes", httpResponse.Headers.AcceptRanges); + Assert.Equal(contentRange.ToString(), httpResponse.Headers.ContentRange); + Assert.NotEmpty(httpResponse.Headers.LastModified); Assert.Equal(contentLength, httpResponse.ContentLength); Assert.Equal(Path.GetFullPath(Path.Combine("TestFiles", "FilePathResultTestFile.txt")), sendFile.Name); Assert.Equal(startResult, sendFile.Offset); @@ -114,11 +114,11 @@ public async Task WriteFileAsync_IfRangeHeaderValid_WritesRequestedRange() // Assert var httpResponse = actionContext.HttpContext.Response; Assert.Equal(StatusCodes.Status206PartialContent, httpResponse.StatusCode); - Assert.Equal("bytes", httpResponse.Headers[HeaderNames.AcceptRanges]); + Assert.Equal("bytes", httpResponse.Headers.AcceptRanges); var contentRange = new ContentRangeHeaderValue(0, 3, 34); - Assert.Equal(contentRange.ToString(), httpResponse.Headers[HeaderNames.ContentRange]); - Assert.NotEmpty(httpResponse.Headers[HeaderNames.LastModified]); - Assert.Equal(entityTag.ToString(), httpResponse.Headers[HeaderNames.ETag]); + Assert.Equal(contentRange.ToString(), httpResponse.Headers.ContentRange); + Assert.NotEmpty(httpResponse.Headers.LastModified); + Assert.Equal(entityTag.ToString(), httpResponse.Headers.ETag); Assert.Equal(4, httpResponse.ContentLength); Assert.Equal(Path.GetFullPath(Path.Combine("TestFiles", "FilePathResultTestFile.txt")), sendFile.Name); Assert.Equal(0, sendFile.Offset); @@ -148,7 +148,7 @@ public async Task WriteFileAsync_RangeProcessingNotEnabled_RangeRequestedIgnored // Assert var httpResponse = actionContext.HttpContext.Response; Assert.Equal(StatusCodes.Status200OK, httpResponse.StatusCode); - Assert.NotEmpty(httpResponse.Headers[HeaderNames.LastModified]); + Assert.NotEmpty(httpResponse.Headers.LastModified); Assert.Equal(Path.GetFullPath(Path.Combine("TestFiles", "FilePathResultTestFile.txt")), sendFile.Name); Assert.Equal(0, sendFile.Offset); Assert.Null(sendFile.Length); @@ -178,7 +178,7 @@ public async Task WriteFileAsync_IfRangeHeaderInvalid_RangeRequestedIgnored() // Assert var httpResponse = actionContext.HttpContext.Response; Assert.Equal(StatusCodes.Status200OK, httpResponse.StatusCode); - Assert.NotEmpty(httpResponse.Headers[HeaderNames.LastModified]); + Assert.NotEmpty(httpResponse.Headers.LastModified); Assert.Equal(Path.GetFullPath(Path.Combine("TestFiles", "FilePathResultTestFile.txt")), sendFile.Name); Assert.Equal(0, sendFile.Offset); Assert.Null(sendFile.Length); @@ -198,7 +198,7 @@ public async Task WriteFileAsync_RangeHeaderMalformed_RangeRequestIgnored(string httpContext.Features.Set(sendFile); var requestHeaders = httpContext.Request.GetTypedHeaders(); requestHeaders.IfModifiedSince = DateTimeOffset.MinValue; - httpContext.Request.Headers[HeaderNames.Range] = rangeString; + httpContext.Request.Headers.Range = rangeString; httpContext.Request.Method = HttpMethods.Get; var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor()); @@ -208,8 +208,8 @@ public async Task WriteFileAsync_RangeHeaderMalformed_RangeRequestIgnored(string // Assert var httpResponse = actionContext.HttpContext.Response; Assert.Equal(StatusCodes.Status200OK, httpResponse.StatusCode); - Assert.Empty(httpResponse.Headers[HeaderNames.ContentRange]); - Assert.NotEmpty(httpResponse.Headers[HeaderNames.LastModified]); + Assert.Empty(httpResponse.Headers.ContentRange); + Assert.NotEmpty(httpResponse.Headers.LastModified); Assert.Equal(Path.GetFullPath(Path.Combine("TestFiles", "FilePathResultTestFile.txt")), sendFile.Name); Assert.Equal(0, sendFile.Offset); Assert.Null(sendFile.Length); @@ -227,7 +227,7 @@ public async Task WriteFileAsync_RangeRequestedNotSatisfiable(string rangeString var httpContext = GetHttpContext(); var requestHeaders = httpContext.Request.GetTypedHeaders(); requestHeaders.IfModifiedSince = DateTimeOffset.MinValue; - httpContext.Request.Headers[HeaderNames.Range] = rangeString; + httpContext.Request.Headers.Range = rangeString; httpContext.Request.Method = HttpMethods.Get; httpContext.Response.Body = new MemoryStream(); var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor()); @@ -242,9 +242,9 @@ public async Task WriteFileAsync_RangeRequestedNotSatisfiable(string rangeString var body = streamReader.ReadToEndAsync().Result; var contentRange = new ContentRangeHeaderValue(34); Assert.Equal(StatusCodes.Status416RangeNotSatisfiable, httpResponse.StatusCode); - Assert.Equal("bytes", httpResponse.Headers[HeaderNames.AcceptRanges]); - Assert.Equal(contentRange.ToString(), httpResponse.Headers[HeaderNames.ContentRange]); - Assert.NotEmpty(httpResponse.Headers[HeaderNames.LastModified]); + Assert.Equal("bytes", httpResponse.Headers.AcceptRanges); + Assert.Equal(contentRange.ToString(), httpResponse.Headers.ContentRange); + Assert.NotEmpty(httpResponse.Headers.LastModified); Assert.Equal(0, httpResponse.ContentLength); Assert.Empty(body); } @@ -259,7 +259,7 @@ public async Task WriteFileAsync_RangeRequested_PreconditionFailed() var httpContext = GetHttpContext(); var requestHeaders = httpContext.Request.GetTypedHeaders(); requestHeaders.IfUnmodifiedSince = DateTimeOffset.MinValue; - httpContext.Request.Headers[HeaderNames.Range] = "bytes = 0-6"; + httpContext.Request.Headers.Range = "bytes = 0-6"; httpContext.Request.Method = HttpMethods.Get; httpContext.Response.Body = new MemoryStream(); var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor()); @@ -274,8 +274,8 @@ public async Task WriteFileAsync_RangeRequested_PreconditionFailed() var body = streamReader.ReadToEndAsync().Result; Assert.Equal(StatusCodes.Status412PreconditionFailed, httpResponse.StatusCode); Assert.Null(httpResponse.ContentLength); - Assert.Empty(httpResponse.Headers[HeaderNames.ContentRange]); - Assert.NotEmpty(httpResponse.Headers[HeaderNames.LastModified]); + Assert.Empty(httpResponse.Headers.ContentRange); + Assert.NotEmpty(httpResponse.Headers.LastModified); Assert.Empty(body); } @@ -289,7 +289,7 @@ public async Task WriteFileAsync_RangeRequested_NotModified() var httpContext = GetHttpContext(); var requestHeaders = httpContext.Request.GetTypedHeaders(); requestHeaders.IfModifiedSince = DateTimeOffset.MinValue.AddDays(1); - httpContext.Request.Headers[HeaderNames.Range] = "bytes = 0-6"; + httpContext.Request.Headers.Range = "bytes = 0-6"; httpContext.Request.Method = HttpMethods.Get; httpContext.Response.Body = new MemoryStream(); var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor()); @@ -304,8 +304,8 @@ public async Task WriteFileAsync_RangeRequested_NotModified() var body = streamReader.ReadToEndAsync().Result; Assert.Equal(StatusCodes.Status304NotModified, httpResponse.StatusCode); Assert.Null(httpResponse.ContentLength); - Assert.Empty(httpResponse.Headers[HeaderNames.ContentRange]); - Assert.NotEmpty(httpResponse.Headers[HeaderNames.LastModified]); + Assert.Empty(httpResponse.Headers.ContentRange); + Assert.NotEmpty(httpResponse.Headers.LastModified); Assert.False(httpResponse.Headers.ContainsKey(HeaderNames.ContentType)); Assert.Empty(body); } @@ -366,9 +366,9 @@ public async Task ExecuteResultAsync_CallsSendFileAsyncWithRequestedRange_IfIHtt Assert.Equal(CancellationToken.None, sendFile.Token); var contentRange = new ContentRangeHeaderValue(start.Value, end.Value, 34); Assert.Equal(StatusCodes.Status206PartialContent, httpResponse.StatusCode); - Assert.Equal("bytes", httpResponse.Headers[HeaderNames.AcceptRanges]); - Assert.Equal(contentRange.ToString(), httpResponse.Headers[HeaderNames.ContentRange]); - Assert.NotEmpty(httpResponse.Headers[HeaderNames.LastModified]); + Assert.Equal("bytes", httpResponse.Headers.AcceptRanges); + Assert.Equal(contentRange.ToString(), httpResponse.Headers.ContentRange); + Assert.NotEmpty(httpResponse.Headers.LastModified); Assert.Equal(contentLength, httpResponse.ContentLength); } diff --git a/src/Mvc/Mvc.Core/test/RedirectResultTest.cs b/src/Mvc/Mvc.Core/test/RedirectResultTest.cs index 46ecfda35e65..481245fee89d 100644 --- a/src/Mvc/Mvc.Core/test/RedirectResultTest.cs +++ b/src/Mvc/Mvc.Core/test/RedirectResultTest.cs @@ -82,7 +82,7 @@ public async Task Execute_ReturnsContentPath_WhenItDoesNotStartWithTilde( // Assert // Verifying if Redirect was called with the specific Url and parameter flag. - Assert.Equal(expectedPath, httpContext.Response.Headers[HeaderNames.Location].ToString()); + Assert.Equal(expectedPath, httpContext.Response.Headers.Location.ToString()); Assert.Equal(StatusCodes.Status302Found, httpContext.Response.StatusCode); } @@ -107,7 +107,7 @@ public async Task Execute_ReturnsAppRelativePath_WhenItStartsWithTilde( // Assert // Verifying if Redirect was called with the specific Url and parameter flag. - Assert.Equal(expectedPath, httpContext.Response.Headers[HeaderNames.Location].ToString()); + Assert.Equal(expectedPath, httpContext.Response.Headers.Location.ToString()); Assert.Equal(StatusCodes.Status302Found, httpContext.Response.StatusCode); } diff --git a/src/Mvc/Mvc.Core/test/VirtualFileResultTest.cs b/src/Mvc/Mvc.Core/test/VirtualFileResultTest.cs index b73aa0609ab5..6d4ecfe35150 100644 --- a/src/Mvc/Mvc.Core/test/VirtualFileResultTest.cs +++ b/src/Mvc/Mvc.Core/test/VirtualFileResultTest.cs @@ -94,9 +94,9 @@ public async Task WriteFileAsync_WritesRangeRequested(long? start, long? end, st var httpResponse = actionContext.HttpContext.Response; var contentRange = new ContentRangeHeaderValue(startResult.Value, endResult.Value, 33); Assert.Equal(StatusCodes.Status206PartialContent, httpResponse.StatusCode); - Assert.Equal("bytes", httpResponse.Headers[HeaderNames.AcceptRanges]); - Assert.Equal(contentRange.ToString(), httpResponse.Headers[HeaderNames.ContentRange]); - Assert.NotEmpty(httpResponse.Headers[HeaderNames.LastModified]); + Assert.Equal("bytes", httpResponse.Headers.AcceptRanges); + Assert.Equal(contentRange.ToString(), httpResponse.Headers.ContentRange); + Assert.NotEmpty(httpResponse.Headers.LastModified); Assert.Equal(contentLength, httpResponse.ContentLength); Assert.Equal(path, sendFileFeature.Name); Assert.Equal(startResult, sendFileFeature.Offset); @@ -138,10 +138,10 @@ public async Task WriteFileAsync_IfRangeHeaderValid_WritesRequestedRange() // Assert var httpResponse = actionContext.HttpContext.Response; Assert.Equal(StatusCodes.Status206PartialContent, httpResponse.StatusCode); - Assert.Equal("bytes", httpResponse.Headers[HeaderNames.AcceptRanges]); + Assert.Equal("bytes", httpResponse.Headers.AcceptRanges); var contentRange = new ContentRangeHeaderValue(0, 3, 33); - Assert.Equal(contentRange.ToString(), httpResponse.Headers[HeaderNames.ContentRange]); - Assert.Equal(entityTag.ToString(), httpResponse.Headers[HeaderNames.ETag]); + Assert.Equal(contentRange.ToString(), httpResponse.Headers.ContentRange); + Assert.Equal(entityTag.ToString(), httpResponse.Headers.ETag); Assert.Equal(4, httpResponse.ContentLength); Assert.Equal(path, sendFileFeature.Name); Assert.Equal(0, sendFileFeature.Offset); @@ -182,7 +182,7 @@ public async Task WriteFileAsync_RangeProcessingNotEnabled_RangeRequestedIgnored // Assert var httpResponse = actionContext.HttpContext.Response; Assert.Equal(StatusCodes.Status200OK, httpResponse.StatusCode); - Assert.Equal(entityTag.ToString(), httpResponse.Headers[HeaderNames.ETag]); + Assert.Equal(entityTag.ToString(), httpResponse.Headers.ETag); Assert.Equal(path, sendFileFeature.Name); Assert.Equal(0, sendFileFeature.Offset); Assert.Null(sendFileFeature.Length); @@ -223,7 +223,7 @@ public async Task WriteFileAsync_IfRangeHeaderInvalid_RangeRequestedIgnored() // Assert var httpResponse = actionContext.HttpContext.Response; Assert.Equal(StatusCodes.Status200OK, httpResponse.StatusCode); - Assert.Equal(entityTag.ToString(), httpResponse.Headers[HeaderNames.ETag]); + Assert.Equal(entityTag.ToString(), httpResponse.Headers.ETag); Assert.Equal(path, sendFileFeature.Name); Assert.Equal(0, sendFileFeature.Offset); Assert.Null(sendFileFeature.Length); @@ -254,7 +254,7 @@ public async Task WriteFileAsync_RangeHeaderMalformed_RangeRequestIgnored(string .BuildServiceProvider(); var requestHeaders = httpContext.Request.GetTypedHeaders(); - httpContext.Request.Headers[HeaderNames.Range] = rangeString; + httpContext.Request.Headers.Range = rangeString; requestHeaders.IfUnmodifiedSince = DateTimeOffset.MinValue.AddDays(1); httpContext.Request.Method = HttpMethods.Get; var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor()); @@ -265,8 +265,8 @@ public async Task WriteFileAsync_RangeHeaderMalformed_RangeRequestIgnored(string // Assert var httpResponse = actionContext.HttpContext.Response; Assert.Equal(StatusCodes.Status200OK, httpResponse.StatusCode); - Assert.Empty(httpResponse.Headers[HeaderNames.ContentRange]); - Assert.NotEmpty(httpResponse.Headers[HeaderNames.LastModified]); + Assert.Empty(httpResponse.Headers.ContentRange); + Assert.NotEmpty(httpResponse.Headers.LastModified); Assert.Equal(path, sendFileFeature.Name); Assert.Equal(0, sendFileFeature.Offset); Assert.Null(sendFileFeature.Length); @@ -295,7 +295,7 @@ public async Task WriteFileAsync_RangeRequestedNotSatisfiable(string rangeString .BuildServiceProvider(); var requestHeaders = httpContext.Request.GetTypedHeaders(); - httpContext.Request.Headers[HeaderNames.Range] = rangeString; + httpContext.Request.Headers.Range = rangeString; requestHeaders.IfUnmodifiedSince = DateTimeOffset.MinValue.AddDays(1); httpContext.Request.Method = HttpMethods.Get; httpContext.Response.Body = new MemoryStream(); @@ -311,9 +311,9 @@ public async Task WriteFileAsync_RangeRequestedNotSatisfiable(string rangeString var body = streamReader.ReadToEndAsync().Result; var contentRange = new ContentRangeHeaderValue(33); Assert.Equal(StatusCodes.Status416RangeNotSatisfiable, httpResponse.StatusCode); - Assert.Equal("bytes", httpResponse.Headers[HeaderNames.AcceptRanges]); - Assert.Equal(contentRange.ToString(), httpResponse.Headers[HeaderNames.ContentRange]); - Assert.NotEmpty(httpResponse.Headers[HeaderNames.LastModified]); + Assert.Equal("bytes", httpResponse.Headers.AcceptRanges); + Assert.Equal(contentRange.ToString(), httpResponse.Headers.ContentRange); + Assert.NotEmpty(httpResponse.Headers.LastModified); Assert.Equal(0, httpResponse.ContentLength); Assert.Empty(body); } @@ -341,7 +341,7 @@ public async Task WriteFileAsync_RangeRequested_PreconditionFailed() var requestHeaders = httpContext.Request.GetTypedHeaders(); requestHeaders.IfUnmodifiedSince = DateTimeOffset.MinValue; - httpContext.Request.Headers[HeaderNames.Range] = "bytes = 0-6"; + httpContext.Request.Headers.Range = "bytes = 0-6"; httpContext.Request.Method = HttpMethods.Get; var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor()); @@ -352,8 +352,8 @@ public async Task WriteFileAsync_RangeRequested_PreconditionFailed() var httpResponse = actionContext.HttpContext.Response; Assert.Equal(StatusCodes.Status412PreconditionFailed, httpResponse.StatusCode); Assert.Null(httpResponse.ContentLength); - Assert.Empty(httpResponse.Headers[HeaderNames.ContentRange]); - Assert.NotEmpty(httpResponse.Headers[HeaderNames.LastModified]); + Assert.Empty(httpResponse.Headers.ContentRange); + Assert.NotEmpty(httpResponse.Headers.LastModified); Assert.Null(sendFileFeature.Name); // Not called } @@ -380,7 +380,7 @@ public async Task WriteFileAsync_RangeRequested_NotModified() var requestHeaders = httpContext.Request.GetTypedHeaders(); requestHeaders.IfModifiedSince = DateTimeOffset.MinValue.AddDays(1); - httpContext.Request.Headers[HeaderNames.Range] = "bytes = 0-6"; + httpContext.Request.Headers.Range = "bytes = 0-6"; httpContext.Request.Method = HttpMethods.Get; var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor()); @@ -391,8 +391,8 @@ public async Task WriteFileAsync_RangeRequested_NotModified() var httpResponse = actionContext.HttpContext.Response; Assert.Equal(StatusCodes.Status304NotModified, httpResponse.StatusCode); Assert.Null(httpResponse.ContentLength); - Assert.Empty(httpResponse.Headers[HeaderNames.ContentRange]); - Assert.NotEmpty(httpResponse.Headers[HeaderNames.LastModified]); + Assert.Empty(httpResponse.Headers.ContentRange); + Assert.NotEmpty(httpResponse.Headers.LastModified); Assert.False(httpResponse.Headers.ContainsKey(HeaderNames.ContentType)); Assert.Null(sendFileFeature.Name); // Not called } @@ -500,9 +500,9 @@ public async Task ExecuteResultAsync_CallsSendFileAsyncWithRequestedRange_IfIHtt Assert.Equal(CancellationToken.None, sendFile.Token); var contentRange = new ContentRangeHeaderValue(start.Value, end.Value, 33); Assert.Equal(StatusCodes.Status206PartialContent, httpResponse.StatusCode); - Assert.Equal("bytes", httpResponse.Headers[HeaderNames.AcceptRanges]); - Assert.Equal(contentRange.ToString(), httpResponse.Headers[HeaderNames.ContentRange]); - Assert.NotEmpty(httpResponse.Headers[HeaderNames.LastModified]); + Assert.Equal("bytes", httpResponse.Headers.AcceptRanges); + Assert.Equal(contentRange.ToString(), httpResponse.Headers.ContentRange); + Assert.NotEmpty(httpResponse.Headers.LastModified); Assert.Equal(contentLength, httpResponse.ContentLength); } diff --git a/src/Mvc/Mvc.ViewFeatures/src/RazorComponents/ComponentRenderer.cs b/src/Mvc/Mvc.ViewFeatures/src/RazorComponents/ComponentRenderer.cs index c6db65e98af3..77163df2f8c3 100644 --- a/src/Mvc/Mvc.ViewFeatures/src/RazorComponents/ComponentRenderer.cs +++ b/src/Mvc/Mvc.ViewFeatures/src/RazorComponents/ComponentRenderer.cs @@ -134,7 +134,7 @@ private async Task PrerenderedServerComponentAsync(HttpContext con { if (!context.Response.HasStarted) { - context.Response.Headers[HeaderNames.CacheControl] = "no-cache, no-store, max-age=0"; + context.Response.Headers.CacheControl = "no-cache, no-store, max-age=0"; } var currentInvocation = _serverComponentSerializer.SerializeInvocation( @@ -176,7 +176,7 @@ private IHtmlContent NonPrerenderedServerComponent(HttpContext context, ServerCo { if (!context.Response.HasStarted) { - context.Response.Headers[HeaderNames.CacheControl] = "no-cache, no-store, max-age=0"; + context.Response.Headers.CacheControl = "no-cache, no-store, max-age=0"; } var currentInvocation = _serverComponentSerializer.SerializeInvocation(invocationId, type, parametersCollection, prerendered: false); diff --git a/src/Mvc/Mvc.ViewFeatures/test/CookieTempDataProviderTest.cs b/src/Mvc/Mvc.ViewFeatures/test/CookieTempDataProviderTest.cs index c509e6645772..db0d0e3a8a25 100644 --- a/src/Mvc/Mvc.ViewFeatures/test/CookieTempDataProviderTest.cs +++ b/src/Mvc/Mvc.ViewFeatures/test/CookieTempDataProviderTest.cs @@ -86,7 +86,7 @@ public void LoadTempData_ReturnsEmptyDictionary_AndClearsCookie_WhenDataIsInvali var base64AndUrlEncodedDataInCookie = WebEncoders.Base64UrlEncode(expectedDataToUnprotect); var context = new DefaultHttpContext(); - context.Request.Headers[HeaderNames.Cookie] = $"{CookieTempDataProvider.CookieName}={base64AndUrlEncodedDataInCookie}"; + context.Request.Headers.Cookie = $"{CookieTempDataProvider.CookieName}={base64AndUrlEncodedDataInCookie}"; // Act var tempDataDictionary = tempDataProvider.LoadTempData(context); @@ -108,7 +108,7 @@ public void LoadTempData_Base64UrlDecodesAnd_UnprotectsData_FromCookie() var dataProtector = new PassThroughDataProtector(); var tempDataProvider = GetProvider(dataProtector); var httpContext = new DefaultHttpContext(); - httpContext.Request.Headers[HeaderNames.Cookie] = $"{CookieTempDataProvider.CookieName}={base64AndUrlEncodedDataInCookie}"; + httpContext.Request.Headers.Cookie = $"{CookieTempDataProvider.CookieName}={base64AndUrlEncodedDataInCookie}"; // Act var actualValues = tempDataProvider.LoadTempData(httpContext); @@ -305,7 +305,7 @@ public void SaveTempData_RemovesCookie_WhenNoDataToSave() var requestCookies = $"{CookieTempDataProvider.CookieName}={base64AndUrlEncodedData}"; var httpContext = new DefaultHttpContext(); httpContext.Request.PathBase = "/"; - httpContext.Request.Headers[HeaderNames.Cookie] = requestCookies; + httpContext.Request.Headers.Cookie = requestCookies; // Act tempDataProvider.SaveTempData(httpContext, new Dictionary()); @@ -364,7 +364,7 @@ private void UpdateRequestWithCookies(HttpContext httpContext) stringBuilder.Append(";"); } - httpContext.Request.Headers[HeaderNames.Cookie] = stringBuilder.ToString(); + httpContext.Request.Headers.Cookie = stringBuilder.ToString(); } } diff --git a/src/Mvc/Mvc.ViewFeatures/test/RazorComponents/ComponentRendererTest.cs b/src/Mvc/Mvc.ViewFeatures/test/RazorComponents/ComponentRendererTest.cs index 673e806e84cd..b7b364fc29a7 100644 --- a/src/Mvc/Mvc.ViewFeatures/test/RazorComponents/ComponentRendererTest.cs +++ b/src/Mvc/Mvc.ViewFeatures/test/RazorComponents/ComponentRendererTest.cs @@ -316,7 +316,7 @@ public async Task CanRender_ParameterlessComponent_ServerMode() Assert.Equal(typeof(TestComponent).FullName, serverComponent.TypeName); Assert.NotEqual(Guid.Empty, serverComponent.InvocationId); - Assert.Equal("no-cache, no-store, max-age=0", viewContext.HttpContext.Response.Headers[HeaderNames.CacheControl]); + Assert.Equal("no-cache, no-store, max-age=0", viewContext.HttpContext.Response.Headers.CacheControl); Assert.DoesNotContain(viewContext.Items.Values, value => value is InvokedRenderModes); } @@ -360,7 +360,7 @@ public async Task CanPrerender_ParameterlessComponent_ServerMode() Assert.Null(epilogueMarker.Descriptor); Assert.Null(epilogueMarker.Type); - Assert.Equal("no-cache, no-store, max-age=0", viewContext.HttpContext.Response.Headers[HeaderNames.CacheControl]); + Assert.Equal("no-cache, no-store, max-age=0", viewContext.HttpContext.Response.Headers.CacheControl); var (_, mode) = Assert.Single(viewContext.Items, (kvp) => kvp.Value is InvokedRenderModes); Assert.Equal(InvokedRenderModes.Mode.Server, ((InvokedRenderModes)mode).Value); } @@ -796,7 +796,7 @@ await renderer.RenderComponentAsync( // Assert Assert.Equal(302, ctx.Response.StatusCode); - Assert.Equal("http://localhost/redirect", ctx.Response.Headers[HeaderNames.Location]); + Assert.Equal("http://localhost/redirect", ctx.Response.Headers.Location); } [Fact] diff --git a/src/Mvc/test/WebSites/BasicWebSite/RequestIdMiddleware.cs b/src/Mvc/test/WebSites/BasicWebSite/RequestIdMiddleware.cs index fd2227bf23bf..7fb4d9c8079b 100644 --- a/src/Mvc/test/WebSites/BasicWebSite/RequestIdMiddleware.cs +++ b/src/Mvc/test/WebSites/BasicWebSite/RequestIdMiddleware.cs @@ -27,7 +27,7 @@ public Task Invoke(HttpContext context) throw new InvalidOperationException("RequestId should be null here"); } - var requestId = context.Request.Headers[HeaderNames.RequestId]; + var requestId = context.Request.Headers.RequestId; requestIdService.RequestId = requestId; return _next(context); diff --git a/src/Security/Authentication/Cookies/src/CookieAuthenticationEvents.cs b/src/Security/Authentication/Cookies/src/CookieAuthenticationEvents.cs index 39a29331e31e..ec6d49fe69a6 100644 --- a/src/Security/Authentication/Cookies/src/CookieAuthenticationEvents.cs +++ b/src/Security/Authentication/Cookies/src/CookieAuthenticationEvents.cs @@ -40,7 +40,7 @@ public class CookieAuthenticationEvents { if (IsAjaxRequest(context.Request)) { - context.Response.Headers[HeaderNames.Location] = context.RedirectUri; + context.Response.Headers.Location = context.RedirectUri; context.Response.StatusCode = 401; } else @@ -57,7 +57,7 @@ public class CookieAuthenticationEvents { if (IsAjaxRequest(context.Request)) { - context.Response.Headers[HeaderNames.Location] = context.RedirectUri; + context.Response.Headers.Location = context.RedirectUri; context.Response.StatusCode = 403; } else @@ -74,7 +74,7 @@ public class CookieAuthenticationEvents { if (IsAjaxRequest(context.Request)) { - context.Response.Headers[HeaderNames.Location] = context.RedirectUri; + context.Response.Headers.Location = context.RedirectUri; } else { @@ -90,7 +90,7 @@ public class CookieAuthenticationEvents { if (IsAjaxRequest(context.Request)) { - context.Response.Headers[HeaderNames.Location] = context.RedirectUri; + context.Response.Headers.Location = context.RedirectUri; } else { @@ -102,7 +102,7 @@ public class CookieAuthenticationEvents private static bool IsAjaxRequest(HttpRequest request) { return string.Equals(request.Query[HeaderNames.XRequestedWith], "XMLHttpRequest", StringComparison.Ordinal) || - string.Equals(request.Headers[HeaderNames.XRequestedWith], "XMLHttpRequest", StringComparison.Ordinal); + string.Equals(request.Headers.XRequestedWith, "XMLHttpRequest", StringComparison.Ordinal); } /// diff --git a/src/Security/Authentication/Cookies/src/CookieAuthenticationHandler.cs b/src/Security/Authentication/Cookies/src/CookieAuthenticationHandler.cs index bc257c9d71af..084786296cf2 100644 --- a/src/Security/Authentication/Cookies/src/CookieAuthenticationHandler.cs +++ b/src/Security/Authentication/Cookies/src/CookieAuthenticationHandler.cs @@ -398,9 +398,9 @@ protected async override Task HandleSignOutAsync(AuthenticationProperties? prope private async Task ApplyHeaders(bool shouldRedirectToReturnUrl, AuthenticationProperties properties) { - Response.Headers[HeaderNames.CacheControl] = HeaderValueNoCacheNoStore; - Response.Headers[HeaderNames.Pragma] = HeaderValueNoCache; - Response.Headers[HeaderNames.Expires] = HeaderValueEpocDate; + Response.Headers.CacheControl = HeaderValueNoCacheNoStore; + Response.Headers.Pragma = HeaderValueNoCache; + Response.Headers.Expires = HeaderValueEpocDate; if (shouldRedirectToReturnUrl && Response.StatusCode == 200) { diff --git a/src/Security/Authentication/JwtBearer/samples/JwtBearerSample/Startup.cs b/src/Security/Authentication/JwtBearer/samples/JwtBearerSample/Startup.cs index d88ad22b8ce1..001a5486f30a 100644 --- a/src/Security/Authentication/JwtBearer/samples/JwtBearerSample/Startup.cs +++ b/src/Security/Authentication/JwtBearer/samples/JwtBearerSample/Startup.cs @@ -92,7 +92,7 @@ public void Configure(IApplicationBuilder app) else { response.ContentType = "application/json"; - response.Headers[HeaderNames.CacheControl] = "no-cache"; + response.Headers.CacheControl = "no-cache"; await response.StartAsync(); Serialize(Todos, response.BodyWriter); await response.BodyWriter.FlushAsync(); diff --git a/src/Security/Authentication/JwtBearer/src/JwtBearerHandler.cs b/src/Security/Authentication/JwtBearer/src/JwtBearerHandler.cs index cb102d81cac0..5cfb33392077 100644 --- a/src/Security/Authentication/JwtBearer/src/JwtBearerHandler.cs +++ b/src/Security/Authentication/JwtBearer/src/JwtBearerHandler.cs @@ -70,7 +70,7 @@ protected override async Task HandleAuthenticateAsync() if (string.IsNullOrEmpty(token)) { - string authorization = Request.Headers[HeaderNames.Authorization]; + string authorization = Request.Headers.Authorization; // If no authorization header found, nothing to process further if (string.IsNullOrEmpty(authorization)) diff --git a/src/Security/Authentication/Negotiate/src/NegotiateHandler.cs b/src/Security/Authentication/Negotiate/src/NegotiateHandler.cs index 1de4beb455c5..7dcc3e3a4e16 100644 --- a/src/Security/Authentication/Negotiate/src/NegotiateHandler.cs +++ b/src/Security/Authentication/Negotiate/src/NegotiateHandler.cs @@ -89,7 +89,7 @@ public async Task HandleRequestAsync() persistence = (AuthPersistence)connectionItems[AuthPersistenceKey]!; _negotiateState = persistence?.State; - var authorizationHeader = Request.Headers[HeaderNames.Authorization]; + var authorizationHeader = Request.Headers.Authorization; if (StringValues.IsNullOrEmpty(authorizationHeader)) { diff --git a/src/Security/Authentication/Negotiate/test/Negotiate.Test/EventTests.cs b/src/Security/Authentication/Negotiate/test/Negotiate.Test/EventTests.cs index af471a5450ed..1d8a77b93a62 100644 --- a/src/Security/Authentication/Negotiate/test/Negotiate.Test/EventTests.cs +++ b/src/Security/Authentication/Negotiate/test/Negotiate.Test/EventTests.cs @@ -43,7 +43,7 @@ public async Task OnChallenge_Fires() var result = await SendAsync(server, "/Authenticate", new TestConnection()); Assert.Equal(StatusCodes.Status401Unauthorized, result.Response.StatusCode); - Assert.Equal("Negotiate", result.Response.Headers[HeaderNames.WWWAuthenticate]); + Assert.Equal("Negotiate", result.Response.Headers.WWWAuthenticate); Assert.True(eventInvoked); } @@ -57,7 +57,7 @@ public async Task OnChallenge_Handled() OnChallenge = context => { context.Response.StatusCode = StatusCodes.Status418ImATeapot; - context.Response.Headers[HeaderNames.WWWAuthenticate] = "Teapot"; + context.Response.Headers.WWWAuthenticate = "Teapot"; context.HandleResponse(); return Task.CompletedTask; } @@ -67,7 +67,7 @@ public async Task OnChallenge_Handled() var result = await SendAsync(server, "/Authenticate", new TestConnection()); Assert.Equal(StatusCodes.Status418ImATeapot, result.Response.StatusCode); - Assert.Equal("Teapot", result.Response.Headers[HeaderNames.WWWAuthenticate]); + Assert.Equal("Teapot", result.Response.Headers.WWWAuthenticate); } [Fact] @@ -105,7 +105,7 @@ public async Task OnAuthenticationFailed_FromException_Handled() OnAuthenticationFailed = context => { context.Response.StatusCode = StatusCodes.Status418ImATeapot; - context.Response.Headers[HeaderNames.WWWAuthenticate] = "Teapot"; + context.Response.Headers.WWWAuthenticate = "Teapot"; context.HandleResponse(); return Task.CompletedTask; } @@ -115,7 +115,7 @@ public async Task OnAuthenticationFailed_FromException_Handled() var result = await SendAsync(server, "/404", new TestConnection(), "Negotiate InvalidBlob"); Assert.Equal(StatusCodes.Status418ImATeapot, result.Response.StatusCode); - Assert.Equal("Teapot", result.Response.Headers[HeaderNames.WWWAuthenticate]); + Assert.Equal("Teapot", result.Response.Headers.WWWAuthenticate); } [Fact] @@ -155,7 +155,7 @@ public async Task OnAuthenticationFailed_FromOtherBlobError_Handled() { eventInvoked++; context.Response.StatusCode = StatusCodes.Status418ImATeapot; - context.Response.Headers[HeaderNames.WWWAuthenticate] = "Teapot"; + context.Response.Headers.WWWAuthenticate = "Teapot"; context.HandleResponse(); return Task.CompletedTask; } @@ -165,7 +165,7 @@ public async Task OnAuthenticationFailed_FromOtherBlobError_Handled() var result = await SendAsync(server, "/404", new TestConnection(), "Negotiate OtherError"); Assert.Equal(StatusCodes.Status418ImATeapot, result.Response.StatusCode); - Assert.Equal("Teapot", result.Response.Headers[HeaderNames.WWWAuthenticate]); + Assert.Equal("Teapot", result.Response.Headers.WWWAuthenticate); Assert.Equal(1, eventInvoked); } @@ -205,7 +205,7 @@ public async Task OnAuthenticationFailed_FromCredentialError_Handled() { eventInvoked++; context.Response.StatusCode = StatusCodes.Status418ImATeapot; - context.Response.Headers[HeaderNames.WWWAuthenticate] = "Teapot"; + context.Response.Headers.WWWAuthenticate = "Teapot"; context.HandleResponse(); return Task.CompletedTask; } @@ -215,7 +215,7 @@ public async Task OnAuthenticationFailed_FromCredentialError_Handled() var result = await SendAsync(server, "/404", new TestConnection(), "Negotiate CredentialError"); Assert.Equal(StatusCodes.Status418ImATeapot, result.Response.StatusCode); - Assert.Equal("Teapot", result.Response.Headers[HeaderNames.WWWAuthenticate]); + Assert.Equal("Teapot", result.Response.Headers.WWWAuthenticate); Assert.Equal(1, eventInvoked); } @@ -255,7 +255,7 @@ public async Task OnAuthenticationFailed_FromClientError_Handled() { eventInvoked++; context.Response.StatusCode = StatusCodes.Status418ImATeapot; - context.Response.Headers[HeaderNames.WWWAuthenticate] = "Teapot"; + context.Response.Headers.WWWAuthenticate = "Teapot"; context.HandleResponse(); return Task.CompletedTask; } @@ -265,7 +265,7 @@ public async Task OnAuthenticationFailed_FromClientError_Handled() var result = await SendAsync(server, "/404", new TestConnection(), "Negotiate ClientError"); Assert.Equal(StatusCodes.Status418ImATeapot, result.Response.StatusCode); - Assert.Equal("Teapot", result.Response.Headers[HeaderNames.WWWAuthenticate]); + Assert.Equal("Teapot", result.Response.Headers.WWWAuthenticate); Assert.Equal(1, eventInvoked); } @@ -341,7 +341,7 @@ public async Task OnAuthenticated_NoResult_SuppresesCredentials() var result = await SendAsync(server, "/Authenticate", new TestConnection(), "Negotiate ClientKerberosBlob"); Assert.Equal(StatusCodes.Status401Unauthorized, result.Response.StatusCode); - Assert.Equal("Negotiate", result.Response.Headers[HeaderNames.WWWAuthenticate]); + Assert.Equal("Negotiate", result.Response.Headers.WWWAuthenticate); Assert.Equal(1, callCount); } @@ -365,7 +365,7 @@ public async Task OnAuthenticated_Fail_SuppresesCredentials() var result = await SendAsync(server, "/Authenticate", new TestConnection(), "Negotiate ClientKerberosBlob"); Assert.Equal(StatusCodes.Status401Unauthorized, result.Response.StatusCode); - Assert.Equal("Negotiate", result.Response.Headers[HeaderNames.WWWAuthenticate]); + Assert.Equal("Negotiate", result.Response.Headers.WWWAuthenticate); Assert.Equal(1, callCount); } @@ -400,14 +400,14 @@ private static async Task KerberosStage1Auth(TestServer server, TestConnection t { var result = await SendAsync(server, "/Authenticate", testConnection, "Negotiate ClientKerberosBlob1"); Assert.Equal(StatusCodes.Status401Unauthorized, result.Response.StatusCode); - Assert.Equal("Negotiate ServerKerberosBlob1", result.Response.Headers[HeaderNames.WWWAuthenticate]); + Assert.Equal("Negotiate ServerKerberosBlob1", result.Response.Headers.WWWAuthenticate); } private static async Task KerberosStage2Auth(TestServer server, TestConnection testConnection) { var result = await SendAsync(server, "/Authenticate", testConnection, "Negotiate ClientKerberosBlob2"); Assert.Equal(StatusCodes.Status200OK, result.Response.StatusCode); - Assert.Equal("Negotiate ServerKerberosBlob2", result.Response.Headers[HeaderNames.WWWAuthenticate]); + Assert.Equal("Negotiate ServerKerberosBlob2", result.Response.Headers.WWWAuthenticate); } private static async Task CreateHostAsync(Action configureOptions = null) @@ -465,7 +465,7 @@ private static Task SendAsync(TestServer server, string path, TestC context.Request.Path = path; if (!string.IsNullOrEmpty(authorizationHeader)) { - context.Request.Headers[HeaderNames.Authorization] = authorizationHeader; + context.Request.Headers.Authorization = authorizationHeader; } if (connection != null) { diff --git a/src/Security/Authentication/Negotiate/test/Negotiate.Test/NegotiateHandlerTests.cs b/src/Security/Authentication/Negotiate/test/Negotiate.Test/NegotiateHandlerTests.cs index 0d84e1f5d4a4..282060e4ed97 100644 --- a/src/Security/Authentication/Negotiate/test/Negotiate.Test/NegotiateHandlerTests.cs +++ b/src/Security/Authentication/Negotiate/test/Negotiate.Test/NegotiateHandlerTests.cs @@ -62,7 +62,7 @@ public async Task Anonymous_Challenge_401Negotiate() var result = await SendAsync(server, "/Authenticate", new TestConnection()); Assert.Equal(StatusCodes.Status401Unauthorized, result.Response.StatusCode); - Assert.Equal("Negotiate", result.Response.Headers[HeaderNames.WWWAuthenticate]); + Assert.Equal("Negotiate", result.Response.Headers.WWWAuthenticate); } [Fact] @@ -74,7 +74,7 @@ public async Task Anonymous_ChallengeHttp2_401Negotiate() var result = await SendAsync(server, "/Authenticate", connection: null, http2: true); // Clients will downgrade to HTTP/1.1 and authenticate. Assert.Equal(StatusCodes.Status401Unauthorized, result.Response.StatusCode); - Assert.Equal("Negotiate", result.Response.Headers[HeaderNames.WWWAuthenticate]); + Assert.Equal("Negotiate", result.Response.Headers.WWWAuthenticate); } [Fact] @@ -84,7 +84,7 @@ public async Task NtlmStage1Auth_401NegotiateServerBlob1() var server = host.GetTestServer(); var result = await SendAsync(server, "/404", new TestConnection(), "Negotiate ClientNtlmBlob1"); Assert.Equal(StatusCodes.Status401Unauthorized, result.Response.StatusCode); - Assert.Equal("Negotiate ServerNtlmBlob1", result.Response.Headers[HeaderNames.WWWAuthenticate]); + Assert.Equal("Negotiate ServerNtlmBlob1", result.Response.Headers.WWWAuthenticate); } [Fact] @@ -193,7 +193,7 @@ public async Task AnonymousAfterCompletedNoPersist_Denied(string protocol) var result = await SendAsync(server, "/Authenticate", testConnection); Assert.Equal(StatusCodes.Status401Unauthorized, result.Response.StatusCode); - Assert.Equal("Negotiate", result.Response.Headers[HeaderNames.WWWAuthenticate]); + Assert.Equal("Negotiate", result.Response.Headers.WWWAuthenticate); } [Theory] @@ -302,7 +302,7 @@ public async Task CredentialError_401() var testConnection = new TestConnection(); var result = await SendAsync(server, "/Authenticate", testConnection, "Negotiate CredentialError"); Assert.Equal(StatusCodes.Status401Unauthorized, result.Response.StatusCode); - Assert.Equal("Negotiate", result.Response.Headers[HeaderNames.WWWAuthenticate]); + Assert.Equal("Negotiate", result.Response.Headers.WWWAuthenticate); } [Fact] @@ -330,7 +330,7 @@ private static async Task AuthenticateAndRetrieveRBACClaims(TestServer server, T { var result = await SendAsync(server, "/AuthenticateAndRetrieveRBACClaims", testConnection, "Negotiate ClientKerberosBlob"); Assert.Equal(StatusCodes.Status200OK, result.Response.StatusCode); - Assert.Equal("Negotiate ServerKerberosBlob", result.Response.Headers[HeaderNames.WWWAuthenticate]); + Assert.Equal("Negotiate ServerKerberosBlob", result.Response.Headers.WWWAuthenticate); } // Single Stage @@ -338,7 +338,7 @@ private static async Task KerberosAuth(TestServer server, TestConnection testCon { var result = await SendAsync(server, "/Authenticate", testConnection, "Negotiate ClientKerberosBlob"); Assert.Equal(StatusCodes.Status200OK, result.Response.StatusCode); - Assert.Equal("Negotiate ServerKerberosBlob", result.Response.Headers[HeaderNames.WWWAuthenticate]); + Assert.Equal("Negotiate ServerKerberosBlob", result.Response.Headers.WWWAuthenticate); } private static async Task KerberosStage1And2Auth(TestServer server, TestConnection testConnection) @@ -351,14 +351,14 @@ private static async Task KerberosStage1Auth(TestServer server, TestConnection t { var result = await SendAsync(server, "/Authenticate", testConnection, "Negotiate ClientKerberosBlob1"); Assert.Equal(StatusCodes.Status401Unauthorized, result.Response.StatusCode); - Assert.Equal("Negotiate ServerKerberosBlob1", result.Response.Headers[HeaderNames.WWWAuthenticate]); + Assert.Equal("Negotiate ServerKerberosBlob1", result.Response.Headers.WWWAuthenticate); } private static async Task KerberosStage2Auth(TestServer server, TestConnection testConnection) { var result = await SendAsync(server, "/Authenticate", testConnection, "Negotiate ClientKerberosBlob2"); Assert.Equal(StatusCodes.Status200OK, result.Response.StatusCode); - Assert.Equal("Negotiate ServerKerberosBlob2", result.Response.Headers[HeaderNames.WWWAuthenticate]); + Assert.Equal("Negotiate ServerKerberosBlob2", result.Response.Headers.WWWAuthenticate); } private static async Task NtlmStage1And2Auth(TestServer server, TestConnection testConnection) @@ -371,14 +371,14 @@ private static async Task NtlmStage1Auth(TestServer server, TestConnection testC { var result = await SendAsync(server, "/404", testConnection, "Negotiate ClientNtlmBlob1"); Assert.Equal(StatusCodes.Status401Unauthorized, result.Response.StatusCode); - Assert.Equal("Negotiate ServerNtlmBlob1", result.Response.Headers[HeaderNames.WWWAuthenticate]); + Assert.Equal("Negotiate ServerNtlmBlob1", result.Response.Headers.WWWAuthenticate); } private static async Task NtlmStage2Auth(TestServer server, TestConnection testConnection) { var result = await SendAsync(server, "/Authenticate", testConnection, "Negotiate ClientNtlmBlob2"); Assert.Equal(StatusCodes.Status200OK, result.Response.StatusCode); - Assert.Equal("Negotiate ServerNtlmBlob2", result.Response.Headers[HeaderNames.WWWAuthenticate]); + Assert.Equal("Negotiate ServerNtlmBlob2", result.Response.Headers.WWWAuthenticate); } private static async Task CreateHostAsync(Action configureOptions = null) @@ -489,7 +489,7 @@ private static Task SendAsync(TestServer server, string path, TestC context.Request.Path = path; if (!string.IsNullOrEmpty(authorizationHeader)) { - context.Request.Headers[HeaderNames.Authorization] = authorizationHeader; + context.Request.Headers.Authorization = authorizationHeader; } if (connection != null) { diff --git a/src/Security/Authentication/OAuth/src/OAuthHandler.cs b/src/Security/Authentication/OAuth/src/OAuthHandler.cs index 59bc71c095fd..599509d61661 100644 --- a/src/Security/Authentication/OAuth/src/OAuthHandler.cs +++ b/src/Security/Authentication/OAuth/src/OAuthHandler.cs @@ -270,12 +270,12 @@ protected override async Task HandleChallengeAsync(AuthenticationProperties prop properties, authorizationEndpoint); await Events.RedirectToAuthorizationEndpoint(redirectContext); - var location = Context.Response.Headers[HeaderNames.Location]; + var location = Context.Response.Headers.Location; if (location == StringValues.Empty) { location = "(not set)"; } - var cookie = Context.Response.Headers[HeaderNames.SetCookie]; + var cookie = Context.Response.Headers.SetCookie; if (cookie == StringValues.Empty) { cookie = "(not set)"; diff --git a/src/Security/Authentication/OpenIdConnect/src/OpenIdConnectHandler.cs b/src/Security/Authentication/OpenIdConnect/src/OpenIdConnectHandler.cs index 15a7bdaa05ab..6acb9c220e73 100644 --- a/src/Security/Authentication/OpenIdConnect/src/OpenIdConnectHandler.cs +++ b/src/Security/Authentication/OpenIdConnect/src/OpenIdConnectHandler.cs @@ -272,9 +272,9 @@ public async virtual Task SignOutAsync(AuthenticationProperties? properties) Response.ContentType = "text/html;charset=UTF-8"; // Emit Cache-Control=no-cache to prevent client caching. - Response.Headers[HeaderNames.CacheControl] = "no-cache, no-store"; - Response.Headers[HeaderNames.Pragma] = "no-cache"; - Response.Headers[HeaderNames.Expires] = HeaderValueEpocDate; + Response.Headers.CacheControl = "no-cache, no-store"; + Response.Headers.Pragma = "no-cache"; + Response.Headers.Expires = HeaderValueEpocDate; await Response.Body.WriteAsync(buffer); } @@ -339,12 +339,12 @@ protected async virtual Task HandleSignOutCallbackAsync() protected override async Task HandleChallengeAsync(AuthenticationProperties properties) { await HandleChallengeAsyncInternal(properties); - var location = Context.Response.Headers[HeaderNames.Location]; + var location = Context.Response.Headers.Location; if (location == StringValues.Empty) { location = "(not set)"; } - var cookie = Context.Response.Headers[HeaderNames.SetCookie]; + var cookie = Context.Response.Headers.SetCookie; if (cookie == StringValues.Empty) { cookie = "(not set)"; @@ -475,9 +475,9 @@ private async Task HandleChallengeAsyncInternal(AuthenticationProperties propert Response.ContentType = "text/html;charset=UTF-8"; // Emit Cache-Control=no-cache to prevent client caching. - Response.Headers[HeaderNames.CacheControl] = "no-cache, no-store"; - Response.Headers[HeaderNames.Pragma] = "no-cache"; - Response.Headers[HeaderNames.Expires] = HeaderValueEpocDate; + Response.Headers.CacheControl = "no-cache, no-store"; + Response.Headers.Pragma = "no-cache"; + Response.Headers.Expires = HeaderValueEpocDate; await Response.Body.WriteAsync(buffer); return; diff --git a/src/Security/CookiePolicy/samples/CookiePolicySample/Startup.cs b/src/Security/CookiePolicy/samples/CookiePolicySample/Startup.cs index 4dcc6d4dc322..ee42c032314b 100644 --- a/src/Security/CookiePolicy/samples/CookiePolicySample/Startup.cs +++ b/src/Security/CookiePolicy/samples/CookiePolicySample/Startup.cs @@ -114,7 +114,7 @@ private async Task HomePage(HttpContext context) } await response.WriteAsync("
\r\n"); - var responseCookies = response.Headers[HeaderNames.SetCookie]; + var responseCookies = response.Headers.SetCookie; await response.WriteAsync($"{responseCookies.Count} Response Cookies:
\r\n"); foreach (var cookie in responseCookies) { diff --git a/src/Security/CookiePolicy/test/CookieConsentTests.cs b/src/Security/CookiePolicy/test/CookieConsentTests.cs index 6980935d543e..163f8a788a13 100644 --- a/src/Security/CookiePolicy/test/CookieConsentTests.cs +++ b/src/Security/CookiePolicy/test/CookieConsentTests.cs @@ -30,7 +30,7 @@ public async Task ConsentChecksOffByDefault() context.Response.Cookies.Append("Test", "Value"); return Task.CompletedTask; }); - Assert.Equal("Test=Value; path=/", httpContext.Response.Headers[HeaderNames.SetCookie]); + Assert.Equal("Test=Value; path=/", httpContext.Response.Headers.SetCookie); } [Fact] @@ -49,7 +49,7 @@ public async Task ConsentEnabledForTemplateScenario() context.Response.Cookies.Append("Test", "Value"); return Task.CompletedTask; }); - Assert.Empty(httpContext.Response.Headers[HeaderNames.SetCookie]); + Assert.Empty(httpContext.Response.Headers.SetCookie); } [Fact] @@ -68,7 +68,7 @@ public async Task NonEssentialCookiesWithOptionsExcluded() context.Response.Cookies.Append("Test", "Value", new CookieOptions() { IsEssential = false }); return Task.CompletedTask; }); - Assert.Empty(httpContext.Response.Headers[HeaderNames.SetCookie]); + Assert.Empty(httpContext.Response.Headers.SetCookie); } [Fact] @@ -94,7 +94,7 @@ public async Task NonEssentialCookiesCanBeAllowedViaOnAppendCookie() context.Response.Cookies.Append("Test", "Value", new CookieOptions() { IsEssential = false }); return Task.CompletedTask; }); - Assert.Equal("Test=Value; path=/", httpContext.Response.Headers[HeaderNames.SetCookie]); + Assert.Equal("Test=Value; path=/", httpContext.Response.Headers.SetCookie); } [Fact] @@ -113,7 +113,7 @@ public async Task NeedsConsentDoesNotPreventEssentialCookies() context.Response.Cookies.Append("Test", "Value", new CookieOptions() { IsEssential = true }); return Task.CompletedTask; }); - Assert.Equal("Test=Value; path=/", httpContext.Response.Headers[HeaderNames.SetCookie]); + Assert.Equal("Test=Value; path=/", httpContext.Response.Headers.SetCookie); } [Fact] @@ -132,7 +132,7 @@ public async Task EssentialCookiesCanBeExcludedByOnAppendCookie() }, requestContext => { - requestContext.Request.Headers[HeaderNames.Cookie] = ".AspNet.Consent=yes"; + requestContext.Request.Headers.Cookie = ".AspNet.Consent=yes"; }, context => { @@ -143,7 +143,7 @@ public async Task EssentialCookiesCanBeExcludedByOnAppendCookie() context.Response.Cookies.Append("Test", "Value", new CookieOptions() { IsEssential = true }); return Task.CompletedTask; }); - Assert.Empty(httpContext.Response.Headers[HeaderNames.SetCookie]); + Assert.Empty(httpContext.Response.Headers.SetCookie); } [Fact] @@ -155,7 +155,7 @@ public async Task HasConsentReadsRequestCookie() }, requestContext => { - requestContext.Request.Headers[HeaderNames.Cookie] = ".AspNet.Consent=yes"; + requestContext.Request.Headers.Cookie = ".AspNet.Consent=yes"; }, context => { @@ -166,7 +166,7 @@ public async Task HasConsentReadsRequestCookie() context.Response.Cookies.Append("Test", "Value"); return Task.CompletedTask; }); - Assert.Equal("Test=Value; path=/", httpContext.Response.Headers[HeaderNames.SetCookie]); + Assert.Equal("Test=Value; path=/", httpContext.Response.Headers.SetCookie); } [Fact] @@ -178,7 +178,7 @@ public async Task HasConsentIgnoresInvalidRequestCookie() }, requestContext => { - requestContext.Request.Headers[HeaderNames.Cookie] = ".AspNet.Consent=IAmATeapot"; + requestContext.Request.Headers.Cookie = ".AspNet.Consent=IAmATeapot"; }, context => { @@ -189,7 +189,7 @@ public async Task HasConsentIgnoresInvalidRequestCookie() context.Response.Cookies.Append("Test", "Value"); return Task.CompletedTask; }); - Assert.Empty(httpContext.Response.Headers[HeaderNames.SetCookie]); + Assert.Empty(httpContext.Response.Headers.SetCookie); } [Fact] @@ -217,7 +217,7 @@ public async Task GrantConsentSetsCookie() return Task.CompletedTask; }); - var cookies = SetCookieHeaderValue.ParseList(httpContext.Response.Headers[HeaderNames.SetCookie]); + var cookies = SetCookieHeaderValue.ParseList(httpContext.Response.Headers.SetCookie); Assert.Equal(2, cookies.Count); var consentCookie = cookies[0]; Assert.Equal(".AspNet.Consent", consentCookie.Name); @@ -266,7 +266,7 @@ public async Task GrantConsentAppliesPolicyToConsentCookie() return Task.CompletedTask; }); - var cookies = SetCookieHeaderValue.ParseList(httpContext.Response.Headers[HeaderNames.SetCookie]); + var cookies = SetCookieHeaderValue.ParseList(httpContext.Response.Headers.SetCookie); Assert.Equal(1, cookies.Count); var consentCookie = cookies[0]; Assert.Equal(".AspNet.Consent1", consentCookie.Name); @@ -284,7 +284,7 @@ public async Task GrantConsentWhenAlreadyHasItDoesNotSetCookie() }, requestContext => { - requestContext.Request.Headers[HeaderNames.Cookie] = ".AspNet.Consent=yes"; + requestContext.Request.Headers.Cookie = ".AspNet.Consent=yes"; }, context => { @@ -303,7 +303,7 @@ public async Task GrantConsentWhenAlreadyHasItDoesNotSetCookie() return Task.CompletedTask; }); - Assert.Equal("Test=Value; path=/", httpContext.Response.Headers[HeaderNames.SetCookie]); + Assert.Equal("Test=Value; path=/", httpContext.Response.Headers.SetCookie); } [Fact] @@ -336,7 +336,7 @@ public async Task GrantConsentAfterResponseStartsSetsHasConsentButDoesNotSetCook var reader = new StreamReader(httpContext.Response.Body); Assert.Equal("Started.Granted.", await reader.ReadToEndAsync()); - Assert.Empty(httpContext.Response.Headers[HeaderNames.SetCookie]); + Assert.Empty(httpContext.Response.Headers.SetCookie); } [Fact] @@ -364,7 +364,7 @@ public async Task WithdrawConsentWhenNotHasConsentNoOps() return Task.CompletedTask; }); - Assert.Empty(httpContext.Response.Headers[HeaderNames.SetCookie]); + Assert.Empty(httpContext.Response.Headers.SetCookie); } [Fact] @@ -376,7 +376,7 @@ public async Task WithdrawConsentDeletesCookie() }, requestContext => { - requestContext.Request.Headers[HeaderNames.Cookie] = ".AspNet.Consent=yes"; + requestContext.Request.Headers.Cookie = ".AspNet.Consent=yes"; }, context => { @@ -396,7 +396,7 @@ public async Task WithdrawConsentDeletesCookie() return Task.CompletedTask; }); - var cookies = SetCookieHeaderValue.ParseList(httpContext.Response.Headers[HeaderNames.SetCookie]); + var cookies = SetCookieHeaderValue.ParseList(httpContext.Response.Headers.SetCookie); Assert.Equal(2, cookies.Count); var testCookie = cookies[0]; Assert.Equal("Test", testCookie.Name); @@ -425,7 +425,7 @@ public async Task WithdrawConsentAppliesPolicyToDeleteCookie() }, requestContext => { - requestContext.Request.Headers[HeaderNames.Cookie] = ".AspNet.Consent=yes"; + requestContext.Request.Headers.Cookie = ".AspNet.Consent=yes"; }, context => { @@ -443,7 +443,7 @@ public async Task WithdrawConsentAppliesPolicyToDeleteCookie() return Task.CompletedTask; }); - var cookies = SetCookieHeaderValue.ParseList(httpContext.Response.Headers[HeaderNames.SetCookie]); + var cookies = SetCookieHeaderValue.ParseList(httpContext.Response.Headers.SetCookie); Assert.Equal(1, cookies.Count); var consentCookie = cookies[0]; Assert.Equal(".AspNet.Consent1", consentCookie.Name); @@ -461,7 +461,7 @@ public async Task WithdrawConsentAfterResponseHasStartedDoesNotDeleteCookie() }, requestContext => { - requestContext.Request.Headers[HeaderNames.Cookie] = ".AspNet.Consent=yes"; + requestContext.Request.Headers.Cookie = ".AspNet.Consent=yes"; }, async context => { @@ -487,7 +487,7 @@ public async Task WithdrawConsentAfterResponseHasStartedDoesNotDeleteCookie() var reader = new StreamReader(httpContext.Response.Body); Assert.Equal("Started.Withdrawn.", await reader.ReadToEndAsync()); - Assert.Equal("Test=Value1; path=/", httpContext.Response.Headers[HeaderNames.SetCookie]); + Assert.Equal("Test=Value1; path=/", httpContext.Response.Headers.SetCookie); } [Fact] @@ -508,7 +508,7 @@ public async Task DeleteCookieDoesNotRequireConsent() return Task.CompletedTask; }); - var cookies = SetCookieHeaderValue.ParseList(httpContext.Response.Headers[HeaderNames.SetCookie]); + var cookies = SetCookieHeaderValue.ParseList(httpContext.Response.Headers.SetCookie); Assert.Equal(1, cookies.Count); var testCookie = cookies[0]; Assert.Equal("Test", testCookie.Name); @@ -542,7 +542,7 @@ public async Task OnDeleteCookieCanSuppressCookie() return Task.CompletedTask; }); - Assert.Empty(httpContext.Response.Headers[HeaderNames.SetCookie]); + Assert.Empty(httpContext.Response.Headers.SetCookie); } [Fact] @@ -572,7 +572,7 @@ public async Task CreateConsentCookieMatchesGrantConsentCookie() return Task.CompletedTask; }); - var cookies = SetCookieHeaderValue.ParseList(httpContext.Response.Headers[HeaderNames.SetCookie]); + var cookies = SetCookieHeaderValue.ParseList(httpContext.Response.Headers.SetCookie); Assert.Equal(1, cookies.Count); var consentCookie = cookies[0]; Assert.Equal(".AspNet.Consent", consentCookie.Name); @@ -625,7 +625,7 @@ public async Task CreateConsentCookieAppliesPolicy() return Task.CompletedTask; }); - var cookies = SetCookieHeaderValue.ParseList(httpContext.Response.Headers[HeaderNames.SetCookie]); + var cookies = SetCookieHeaderValue.ParseList(httpContext.Response.Headers.SetCookie); Assert.Equal(1, cookies.Count); var consentCookie = cookies[0]; Assert.Equal(".AspNet.Consent1", consentCookie.Name); diff --git a/src/Servers/HttpSys/src/AuthenticationManager.cs b/src/Servers/HttpSys/src/AuthenticationManager.cs index 4efd5d177c99..9e4926c7bdca 100644 --- a/src/Servers/HttpSys/src/AuthenticationManager.cs +++ b/src/Servers/HttpSys/src/AuthenticationManager.cs @@ -10,6 +10,7 @@ using System.Security.Principal; using Microsoft.AspNetCore.HttpSys.Internal; using Microsoft.Extensions.Primitives; +using Microsoft.Net.Http.Headers; namespace Microsoft.AspNetCore.Server.HttpSys { @@ -147,8 +148,8 @@ internal void SetAuthenticationChallenge(RequestContext context) if (challenges.Count > 0) { - context.Response.Headers[HttpKnownHeaderNames.WWWAuthenticate] - = StringValues.Concat(context.Response.Headers[HttpKnownHeaderNames.WWWAuthenticate], challenges.ToArray()); + context.Response.Headers[HeaderNames.WWWAuthenticate] + = StringValues.Concat(context.Response.Headers[HeaderNames.WWWAuthenticate], challenges.ToArray()); } } } diff --git a/src/Servers/HttpSys/src/RequestProcessing/Request.cs b/src/Servers/HttpSys/src/RequestProcessing/Request.cs index dcb309d0743f..509d3acf6fb2 100644 --- a/src/Servers/HttpSys/src/RequestProcessing/Request.cs +++ b/src/Servers/HttpSys/src/RequestProcessing/Request.cs @@ -15,6 +15,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.HttpSys.Internal; using Microsoft.Extensions.Logging; +using Microsoft.Net.Http.Headers; namespace Microsoft.AspNetCore.Server.HttpSys { @@ -133,14 +134,14 @@ public long? ContentLength if (_contentBoundaryType == BoundaryType.None) { // Note Http.Sys adds the Transfer-Encoding: chunked header to HTTP/2 requests with bodies for back compat. - string transferEncoding = Headers[HttpKnownHeaderNames.TransferEncoding]; + string transferEncoding = Headers[HeaderNames.TransferEncoding]; if (string.Equals("chunked", transferEncoding?.Trim(), StringComparison.OrdinalIgnoreCase)) { _contentBoundaryType = BoundaryType.Chunked; } else { - string length = Headers[HttpKnownHeaderNames.ContentLength]; + string length = Headers[HeaderNames.ContentLength]; long value; if (length != null && long.TryParse(length.Trim(), NumberStyles.None, CultureInfo.InvariantCulture.NumberFormat, out value)) diff --git a/src/Servers/HttpSys/src/RequestProcessing/RequestHeaders.Generated.tt b/src/Servers/HttpSys/src/RequestProcessing/RequestHeaders.Generated.tt index 1b4b3a177a50..c8a6a7a455bc 100644 --- a/src/Servers/HttpSys/src/RequestProcessing/RequestHeaders.Generated.tt +++ b/src/Servers/HttpSys/src/RequestProcessing/RequestHeaders.Generated.tt @@ -16,7 +16,7 @@ var props = new[] new { Key = "Content-Language", Name = "ContentLanguage", ID = "HttpSysRequestHeader.ContentLanguage" }, new { Key = "Content-Length", Name = "ContentLength", ID = "HttpSysRequestHeader.ContentLength" }, new { Key = "Content-Location", Name = "ContentLocation", ID = "HttpSysRequestHeader.ContentLocation" }, - new { Key = "Content-Md5", Name = "ContentMd5", ID = "HttpSysRequestHeader.ContentMd5" }, + new { Key = "Content-Md5", Name = "ContentMD5", ID = "HttpSysRequestHeader.ContentMd5" }, new { Key = "Content-Range", Name = "ContentRange", ID = "HttpSysRequestHeader.ContentRange" }, new { Key = "Content-Type", Name = "ContentType", ID = "HttpSysRequestHeader.ContentType" }, new { Key = "Cookie", Name = "Cookie", ID = "HttpSysRequestHeader.Cookie" }, @@ -37,7 +37,7 @@ var props = new[] new { Key = "Proxy-Authorization", Name = "ProxyAuthorization", ID = "HttpSysRequestHeader.ProxyAuthorization" }, new { Key = "Range", Name = "Range", ID = "HttpSysRequestHeader.Range" }, new { Key = "Referer", Name = "Referer", ID = "HttpSysRequestHeader.Referer" }, - new { Key = "Te", Name = "Te", ID = "HttpSysRequestHeader.Te" }, + new { Key = "Te", Name = "TE", ID = "HttpSysRequestHeader.Te" }, new { Key = "Trailer", Name = "Trailer", ID = "HttpSysRequestHeader.Trailer" }, new { Key = "Transfer-Encoding", Name = "TransferEncoding", ID = "HttpSysRequestHeader.TransferEncoding" }, new { Key = "Translate", Name = "Translate", ID = "HttpSysRequestHeader.Translate" }, @@ -60,14 +60,11 @@ Func Clear = Index => "_flag" + (Index / 32) + " &= ~0x" + (1<<(Inde using System; using System.CodeDom.Compiler; -using System.Collections; using System.Collections.Generic; -using System.IO; -using System.Threading; -using System.Threading.Tasks; using Microsoft.Extensions.Primitives; +using Microsoft.Net.Http.Headers; -namespace Microsoft.AspNetCore.Server.HttpSys +namespace Microsoft.AspNetCore.HttpSys.Internal { [GeneratedCode("TextTemplatingFileGenerator", "")] internal partial class RequestHeaders @@ -81,7 +78,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys <# } #> <# foreach(var prop in props) { #> - internal StringValues <#=prop.Name#> + public StringValues <#=prop.Name#> { get { @@ -111,7 +108,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys <# foreach(var length in lengths) { #> case <#=length.Key#>: <# foreach(var prop in length) { #> - if (string.Equals(key, "<#=prop.Key#>", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.<#=prop.Name#>, StringComparison.OrdinalIgnoreCase)) { return <#=prop.Name#>.Count > 0; } @@ -129,7 +126,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys <# foreach(var length in lengths) { #> case <#=length.Key#>: <# foreach(var prop in length) { #> - if (string.Equals(key, "<#=prop.Key#>", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.<#=prop.Name#>, StringComparison.OrdinalIgnoreCase)) { value = <#=prop.Name#>; return value.Count > 0; @@ -149,7 +146,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys <# foreach(var length in lengths) { #> case <#=length.Key#>: <# foreach(var prop in length) { #> - if (string.Equals(key, "<#=prop.Key#>", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.<#=prop.Name#>, StringComparison.OrdinalIgnoreCase)) { <#=MarkRead(prop.Index)#>; <#=prop.Name#> = value; @@ -170,7 +167,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys case <#=length.Key#>: <# foreach(var prop in length) { #> if (_<#=prop.Name#>.Count > 0 - && string.Equals(key, "<#=prop.Key#>", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.<#=prop.Name#>, StringComparison.Ordinal)) { bool wasSet = <#=IsRead(prop.Index)#>; <#=prop.Name#> = StringValues.Empty; @@ -188,7 +185,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys <# foreach(var prop in props) { #> if (<#=prop.Name#>.Count > 0) { - yield return "<#=prop.Key#>"; + yield return HeaderNames.<#=prop.Name#>; } <# } #> } @@ -208,7 +205,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys <# foreach(var prop in props) { #> if (<#=prop.Name#>.Count > 0) { - yield return new KeyValuePair("<#=prop.Key#>", <#=prop.Name#>); + yield return new KeyValuePair(HeaderNames.<#=prop.Name#>, <#=prop.Name#>); } <# } #> } diff --git a/src/Servers/HttpSys/src/RequestProcessing/Response.cs b/src/Servers/HttpSys/src/RequestProcessing/Response.cs index f00886356ca1..f2be615ee658 100644 --- a/src/Servers/HttpSys/src/RequestProcessing/Response.cs +++ b/src/Servers/HttpSys/src/RequestProcessing/Response.cs @@ -14,6 +14,8 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.HttpSys.Internal; using Microsoft.Extensions.Primitives; +using Microsoft.Net.Http.Headers; + using static Microsoft.AspNetCore.HttpSys.Internal.UnsafeNclNativeMethods; namespace Microsoft.AspNetCore.Server.HttpSys @@ -154,7 +156,7 @@ private static bool CanSendResponseBody(int responseCode) // Needed to delay the completion of Content-Length responses. internal bool TrailersExpected => HasTrailers || (HttpApi.SupportsTrailers && Request.ProtocolVersion >= HttpVersion.Version20 - && Headers.ContainsKey(HttpKnownHeaderNames.Trailer)); + && Headers.ContainsKey(HeaderNames.Trailer)); internal long ExpectedBodyLength { @@ -397,14 +399,14 @@ internal HttpApiTypes.HTTP_FLAGS ComputeHeaders(long writeCount, bool endOfReque // Gather everything from the request that affects the response: var requestVersion = Request.ProtocolVersion; - var requestConnectionString = Request.Headers[HttpKnownHeaderNames.Connection]; + var requestConnectionString = Request.Headers[HeaderNames.Connection]; var isHeadRequest = Request.IsHeadMethod; var requestCloseSet = Matches(Constants.Close, requestConnectionString); // Gather everything the app may have set on the response: // Http.Sys does not allow us to specify the response protocol version, assume this is a HTTP/1.1 response when making decisions. - var responseConnectionString = Headers[HttpKnownHeaderNames.Connection]; - var transferEncodingString = Headers[HttpKnownHeaderNames.TransferEncoding]; + var responseConnectionString = Headers[HeaderNames.Connection]; + var transferEncodingString = Headers[HeaderNames.TransferEncoding]; var responseContentLength = ContentLength; var responseCloseSet = Matches(Constants.Close, responseConnectionString); var responseChunkedSet = Matches(Constants.Chunked, transferEncodingString); @@ -442,7 +444,7 @@ internal HttpApiTypes.HTTP_FLAGS ComputeHeaders(long writeCount, bool endOfReque { if (!isHeadRequest && statusCanHaveBody) { - Headers[HttpKnownHeaderNames.ContentLength] = Constants.Zero; + Headers[HeaderNames.ContentLength] = Constants.Zero; } _boundaryType = BoundaryType.ContentLength; _expectedBodyLength = 0; @@ -450,7 +452,7 @@ internal HttpApiTypes.HTTP_FLAGS ComputeHeaders(long writeCount, bool endOfReque else if (requestVersion == Constants.V1_1) { _boundaryType = BoundaryType.Chunked; - Headers[HttpKnownHeaderNames.TransferEncoding] = Constants.Chunked; + Headers[HeaderNames.TransferEncoding] = Constants.Chunked; } else { @@ -467,7 +469,7 @@ internal HttpApiTypes.HTTP_FLAGS ComputeHeaders(long writeCount, bool endOfReque // Note that if we don't add this header, Http.Sys will often do it for us. if (!responseCloseSet) { - Headers.Append(HttpKnownHeaderNames.Connection, Constants.Close); + Headers.Append(HeaderNames.Connection, Constants.Close); } flags = HttpApiTypes.HTTP_FLAGS.HTTP_SEND_RESPONSE_FLAG_DISCONNECT; if (responseCloseSet && requestVersion >= Constants.V2 && SupportsGoAway) diff --git a/src/Servers/HttpSys/test/FunctionalTests/Http2Tests.cs b/src/Servers/HttpSys/test/FunctionalTests/Http2Tests.cs index ccb51cde58ea..a492e4927713 100644 --- a/src/Servers/HttpSys/test/FunctionalTests/Http2Tests.cs +++ b/src/Servers/HttpSys/test/FunctionalTests/Http2Tests.cs @@ -231,7 +231,7 @@ public async Task RequestWithDataAndNoContentLength_Success(string method) Assert.True(httpContext.Request.CanHaveBody()); Assert.Null(httpContext.Request.ContentLength); // The client didn't send this header, Http.Sys added it for back compat with HTTP/1.1. - Assert.Equal("chunked", httpContext.Request.Headers[HeaderNames.TransferEncoding]); + Assert.Equal("chunked", httpContext.Request.Headers.TransferEncoding); return httpContext.Request.Body.CopyToAsync(httpContext.Response.Body); }); @@ -319,7 +319,7 @@ public async Task ConnectionClose_NoOSSupport_NoGoAway() { using var server = Utilities.CreateDynamicHttpsServer(out var address, httpContext => { - httpContext.Response.Headers[HeaderNames.Connection] = "close"; + httpContext.Response.Headers.Connection = "close"; return Task.FromResult(0); }); @@ -363,7 +363,7 @@ public async Task ConnectionClose_OSSupport_SendsGoAway() { using var server = Utilities.CreateDynamicHttpsServer(out var address, httpContext => { - httpContext.Response.Headers[HeaderNames.Connection] = "close"; + httpContext.Response.Headers.Connection = "close"; return Task.FromResult(0); }); @@ -402,7 +402,7 @@ public async Task ConnectionClose_AdditionalRequests_ReceivesSecondGoAway() { using var server = Utilities.CreateDynamicHttpsServer(out var address, httpContext => { - httpContext.Response.Headers[HeaderNames.Connection] = "close"; + httpContext.Response.Headers.Connection = "close"; return Task.FromResult(0); }); diff --git a/src/Servers/IIS/IIS/src/Core/IISHttpContext.cs b/src/Servers/IIS/IIS/src/Core/IISHttpContext.cs index 8d58d8aeec59..2d57e8b72ec2 100644 --- a/src/Servers/IIS/IIS/src/Core/IISHttpContext.cs +++ b/src/Servers/IIS/IIS/src/Core/IISHttpContext.cs @@ -24,6 +24,7 @@ using Microsoft.AspNetCore.Server.IIS.Core.IO; using Microsoft.AspNetCore.WebUtilities; using Microsoft.Extensions.Logging; +using Microsoft.Net.Http.Headers; namespace Microsoft.AspNetCore.Server.IIS.Core { @@ -259,7 +260,7 @@ private bool CheckRequestCanHaveBody() // Http/1.x requests with bodies require either a Content-Length or Transfer-Encoding header. // Note Http.Sys adds the Transfer-Encoding: chunked header to HTTP/2 requests with bodies for back compat. // Transfer-Encoding takes priority over Content-Length. - string transferEncoding = RequestHeaders[HttpKnownHeaderNames.TransferEncoding]; + string transferEncoding = RequestHeaders[HeaderNames.TransferEncoding]; if (string.Equals("chunked", transferEncoding?.Trim(), StringComparison.OrdinalIgnoreCase)) { return true; diff --git a/src/Servers/IIS/IIS/test/testassets/InProcessWebSite/Startup.cs b/src/Servers/IIS/IIS/test/testassets/InProcessWebSite/Startup.cs index 64a8cd7e8176..7216384a5c46 100644 --- a/src/Servers/IIS/IIS/test/testassets/InProcessWebSite/Startup.cs +++ b/src/Servers/IIS/IIS/test/testassets/InProcessWebSite/Startup.cs @@ -1517,7 +1517,7 @@ public Task Http2_RequestWithDataAndNoContentLength_Success(HttpContext httpCont #endif Assert.Null(httpContext.Request.ContentLength); // The client didn't send this header, Http.Sys added it for back compat with HTTP/1.1. - Assert.Equal("chunked", httpContext.Request.Headers[HeaderNames.TransferEncoding]); + Assert.Equal("chunked", httpContext.Request.Headers.TransferEncoding); return httpContext.Request.Body.CopyToAsync(httpContext.Response.Body); } diff --git a/src/Servers/Kestrel/Core/src/Internal/Http/HttpHeaders.Generated.cs b/src/Servers/Kestrel/Core/src/Internal/Http/HttpHeaders.Generated.cs index f52409aff22b..8326de6bb7ff 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Http/HttpHeaders.Generated.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Http/HttpHeaders.Generated.cs @@ -10,6 +10,7 @@ using System.Runtime.InteropServices; using Microsoft.Extensions.Primitives; using Microsoft.Net.Http.Headers; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure; #nullable enable @@ -100,7 +101,7 @@ internal enum KnownHeaderType internal partial class HttpHeaders { - private readonly static HashSet _internedHeaderNames = new HashSet(93, StringComparer.OrdinalIgnoreCase) + private readonly static HashSet _internedHeaderNames = new HashSet(95, StringComparer.OrdinalIgnoreCase) { HeaderNames.Accept, HeaderNames.AcceptCharset, @@ -193,12 +194,14 @@ internal partial class HttpHeaders HeaderNames.WWWAuthenticate, HeaderNames.XContentTypeOptions, HeaderNames.XFrameOptions, + HeaderNames.XPoweredBy, HeaderNames.XRequestedWith, - HeaderNames.XXssProtection, + HeaderNames.XUACompatible, + HeaderNames.XXSSProtection, }; } - internal partial class HttpRequestHeaders + internal partial class HttpRequestHeaders : IHeaderDictionary { private HeaderReferences _headers; @@ -206,24 +209,7 @@ internal partial class HttpRequestHeaders public bool HasTransferEncoding => (_bits & 0x80L) != 0; public int HostCount => _headers._Host.Count; - - public StringValues HeaderCacheControl - { - get - { - StringValues value = default; - if ((_bits & 0x1L) != 0) - { - value = _headers._CacheControl; - } - return value; - } - set - { - _bits |= 0x1L; - _headers._CacheControl = value; - } - } + public override StringValues HeaderConnection { get @@ -241,5490 +227,6797 @@ public override StringValues HeaderConnection _headers._Connection = value; } } - public StringValues HeaderDate + public StringValues HeaderTransferEncoding { get { StringValues value = default; - if ((_bits & 0x4L) != 0) + if ((_bits & 0x80L) != 0) { - value = _headers._Date; + value = _headers._TransferEncoding; } return value; } set { - _bits |= 0x4L; - _headers._Date = value; + _bits |= 0x80L; + _headers._TransferEncoding = value; } } - public StringValues HeaderGrpcEncoding + public StringValues HeaderAllow { get { StringValues value = default; - if ((_bits & 0x8L) != 0) + if ((_bits & 0x800L) != 0) { - value = _headers._GrpcEncoding; + value = _headers._Allow; } return value; } set { - _bits |= 0x8L; - _headers._GrpcEncoding = value; + _bits |= 0x800L; + _headers._Allow = value; } } - public StringValues HeaderKeepAlive + public StringValues HeaderAuthority { get { StringValues value = default; - if ((_bits & 0x10L) != 0) + if ((_bits & 0x100000L) != 0) { - value = _headers._KeepAlive; + value = _headers._Authority; } return value; } set { - _bits |= 0x10L; - _headers._KeepAlive = value; + _bits |= 0x100000L; + _headers._Authority = value; } } - public StringValues HeaderPragma + public StringValues HeaderMethod { get { StringValues value = default; - if ((_bits & 0x20L) != 0) + if ((_bits & 0x200000L) != 0) { - value = _headers._Pragma; + value = _headers._Method; } return value; } set { - _bits |= 0x20L; - _headers._Pragma = value; + _bits |= 0x200000L; + _headers._Method = value; } } - public StringValues HeaderTrailer + public StringValues HeaderPath { get { StringValues value = default; - if ((_bits & 0x40L) != 0) + if ((_bits & 0x400000L) != 0) { - value = _headers._Trailer; + value = _headers._Path; } return value; } set { - _bits |= 0x40L; - _headers._Trailer = value; + _bits |= 0x400000L; + _headers._Path = value; } } - public StringValues HeaderTransferEncoding + public StringValues HeaderScheme { get { StringValues value = default; - if ((_bits & 0x80L) != 0) + if ((_bits & 0x800000L) != 0) { - value = _headers._TransferEncoding; + value = _headers._Scheme; } return value; } set { - _bits |= 0x80L; - _headers._TransferEncoding = value; + _bits |= 0x800000L; + _headers._Scheme = value; } } - public StringValues HeaderUpgrade + public StringValues HeaderHost { get { StringValues value = default; - if ((_bits & 0x100L) != 0) + if ((_bits & 0x400000000L) != 0) { - value = _headers._Upgrade; + value = _headers._Host; } return value; } set { - _bits |= 0x100L; - _headers._Upgrade = value; + _bits |= 0x400000000L; + _headers._Host = value; } } - public StringValues HeaderVia + public StringValues HeaderContentLength { get { StringValues value = default; - if ((_bits & 0x200L) != 0) + if (_contentLength.HasValue) { - value = _headers._Via; + value = new StringValues(HeaderUtilities.FormatNonNegativeInt64(_contentLength.Value)); } return value; } set { - _bits |= 0x200L; - _headers._Via = value; + _contentLength = ParseContentLength(value); } } - public StringValues HeaderWarning + + StringValues IHeaderDictionary.CacheControl { get { - StringValues value = default; - if ((_bits & 0x400L) != 0) + var value = _headers._CacheControl; + if ((_bits & 0x1L) != 0) { - value = _headers._Warning; + return value; } - return value; + return default; } set { - _bits |= 0x400L; - _headers._Warning = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x1L; + if (value.Count > 0) + { + _bits |= flag; + _headers._CacheControl = value; + } + else + { + _bits &= ~flag; + _headers._CacheControl = default; + } } } - public StringValues HeaderAllow + StringValues IHeaderDictionary.Connection { get { - StringValues value = default; - if ((_bits & 0x800L) != 0) + var value = _headers._Connection; + if ((_bits & 0x2L) != 0) { - value = _headers._Allow; + return value; } - return value; + return default; } set { - _bits |= 0x800L; - _headers._Allow = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x2L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Connection = value; + } + else + { + _bits &= ~flag; + _headers._Connection = default; + } } } - public StringValues HeaderContentType + StringValues IHeaderDictionary.Date { get { - StringValues value = default; - if ((_bits & 0x1000L) != 0) + var value = _headers._Date; + if ((_bits & 0x4L) != 0) { - value = _headers._ContentType; + return value; } - return value; + return default; } set { - _bits |= 0x1000L; - _headers._ContentType = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x4L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Date = value; + } + else + { + _bits &= ~flag; + _headers._Date = default; + } } } - public StringValues HeaderContentEncoding + StringValues IHeaderDictionary.GrpcEncoding { get { - StringValues value = default; - if ((_bits & 0x2000L) != 0) + var value = _headers._GrpcEncoding; + if ((_bits & 0x8L) != 0) { - value = _headers._ContentEncoding; + return value; } - return value; + return default; } set { - _bits |= 0x2000L; - _headers._ContentEncoding = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x8L; + if (value.Count > 0) + { + _bits |= flag; + _headers._GrpcEncoding = value; + } + else + { + _bits &= ~flag; + _headers._GrpcEncoding = default; + } } } - public StringValues HeaderContentLanguage + StringValues IHeaderDictionary.KeepAlive { get { - StringValues value = default; - if ((_bits & 0x4000L) != 0) + var value = _headers._KeepAlive; + if ((_bits & 0x10L) != 0) { - value = _headers._ContentLanguage; + return value; } - return value; + return default; } set { - _bits |= 0x4000L; - _headers._ContentLanguage = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x10L; + if (value.Count > 0) + { + _bits |= flag; + _headers._KeepAlive = value; + } + else + { + _bits &= ~flag; + _headers._KeepAlive = default; + } } } - public StringValues HeaderContentLocation + StringValues IHeaderDictionary.Pragma { get { - StringValues value = default; - if ((_bits & 0x8000L) != 0) + var value = _headers._Pragma; + if ((_bits & 0x20L) != 0) { - value = _headers._ContentLocation; + return value; } - return value; + return default; } set { - _bits |= 0x8000L; - _headers._ContentLocation = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x20L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Pragma = value; + } + else + { + _bits &= ~flag; + _headers._Pragma = default; + } } } - public StringValues HeaderContentMD5 + StringValues IHeaderDictionary.Trailer { get { - StringValues value = default; - if ((_bits & 0x10000L) != 0) + var value = _headers._Trailer; + if ((_bits & 0x40L) != 0) { - value = _headers._ContentMD5; + return value; } - return value; + return default; } set { - _bits |= 0x10000L; - _headers._ContentMD5 = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x40L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Trailer = value; + } + else + { + _bits &= ~flag; + _headers._Trailer = default; + } } } - public StringValues HeaderContentRange + StringValues IHeaderDictionary.TransferEncoding { get { - StringValues value = default; - if ((_bits & 0x20000L) != 0) + var value = _headers._TransferEncoding; + if ((_bits & 0x80L) != 0) { - value = _headers._ContentRange; + return value; } - return value; + return default; } set { - _bits |= 0x20000L; - _headers._ContentRange = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x80L; + if (value.Count > 0) + { + _bits |= flag; + _headers._TransferEncoding = value; + } + else + { + _bits &= ~flag; + _headers._TransferEncoding = default; + } } } - public StringValues HeaderExpires + StringValues IHeaderDictionary.Upgrade { get { - StringValues value = default; - if ((_bits & 0x40000L) != 0) + var value = _headers._Upgrade; + if ((_bits & 0x100L) != 0) { - value = _headers._Expires; + return value; } - return value; + return default; } set { - _bits |= 0x40000L; - _headers._Expires = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x100L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Upgrade = value; + } + else + { + _bits &= ~flag; + _headers._Upgrade = default; + } } } - public StringValues HeaderLastModified + StringValues IHeaderDictionary.Via { get { - StringValues value = default; - if ((_bits & 0x80000L) != 0) + var value = _headers._Via; + if ((_bits & 0x200L) != 0) { - value = _headers._LastModified; + return value; } - return value; + return default; } set { - _bits |= 0x80000L; - _headers._LastModified = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x200L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Via = value; + } + else + { + _bits &= ~flag; + _headers._Via = default; + } } } - public StringValues HeaderAuthority + StringValues IHeaderDictionary.Warning { get { - StringValues value = default; - if ((_bits & 0x100000L) != 0) + var value = _headers._Warning; + if ((_bits & 0x400L) != 0) { - value = _headers._Authority; + return value; } - return value; + return default; } set { - _bits |= 0x100000L; - _headers._Authority = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x400L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Warning = value; + } + else + { + _bits &= ~flag; + _headers._Warning = default; + } } } - public StringValues HeaderMethod + StringValues IHeaderDictionary.Allow { get { - StringValues value = default; - if ((_bits & 0x200000L) != 0) + var value = _headers._Allow; + if ((_bits & 0x800L) != 0) { - value = _headers._Method; + return value; } - return value; + return default; } set { - _bits |= 0x200000L; - _headers._Method = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x800L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Allow = value; + } + else + { + _bits &= ~flag; + _headers._Allow = default; + } } } - public StringValues HeaderPath + StringValues IHeaderDictionary.ContentType { get { - StringValues value = default; - if ((_bits & 0x400000L) != 0) + var value = _headers._ContentType; + if ((_bits & 0x1000L) != 0) { - value = _headers._Path; + return value; } - return value; + return default; } set { - _bits |= 0x400000L; - _headers._Path = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x1000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._ContentType = value; + } + else + { + _bits &= ~flag; + _headers._ContentType = default; + } } } - public StringValues HeaderScheme + StringValues IHeaderDictionary.ContentEncoding { get { - StringValues value = default; - if ((_bits & 0x800000L) != 0) + var value = _headers._ContentEncoding; + if ((_bits & 0x2000L) != 0) { - value = _headers._Scheme; + return value; } - return value; + return default; } set { - _bits |= 0x800000L; - _headers._Scheme = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x2000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._ContentEncoding = value; + } + else + { + _bits &= ~flag; + _headers._ContentEncoding = default; + } } } - public StringValues HeaderAccept + StringValues IHeaderDictionary.ContentLanguage { get { - StringValues value = default; - if ((_bits & 0x1000000L) != 0) + var value = _headers._ContentLanguage; + if ((_bits & 0x4000L) != 0) { - value = _headers._Accept; + return value; } - return value; + return default; } set { - _bits |= 0x1000000L; - _headers._Accept = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x4000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._ContentLanguage = value; + } + else + { + _bits &= ~flag; + _headers._ContentLanguage = default; + } } } - public StringValues HeaderAcceptCharset + StringValues IHeaderDictionary.ContentLocation { get { - StringValues value = default; - if ((_bits & 0x2000000L) != 0) + var value = _headers._ContentLocation; + if ((_bits & 0x8000L) != 0) { - value = _headers._AcceptCharset; + return value; } - return value; + return default; } set { - _bits |= 0x2000000L; - _headers._AcceptCharset = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x8000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._ContentLocation = value; + } + else + { + _bits &= ~flag; + _headers._ContentLocation = default; + } } } - public StringValues HeaderAcceptEncoding + StringValues IHeaderDictionary.ContentMD5 { get { - StringValues value = default; - if ((_bits & 0x4000000L) != 0) + var value = _headers._ContentMD5; + if ((_bits & 0x10000L) != 0) { - value = _headers._AcceptEncoding; + return value; } - return value; + return default; } set { - _bits |= 0x4000000L; - _headers._AcceptEncoding = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x10000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._ContentMD5 = value; + } + else + { + _bits &= ~flag; + _headers._ContentMD5 = default; + } } } - public StringValues HeaderAcceptLanguage + StringValues IHeaderDictionary.ContentRange { get { - StringValues value = default; - if ((_bits & 0x8000000L) != 0) + var value = _headers._ContentRange; + if ((_bits & 0x20000L) != 0) { - value = _headers._AcceptLanguage; + return value; } - return value; + return default; } set { - _bits |= 0x8000000L; - _headers._AcceptLanguage = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x20000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._ContentRange = value; + } + else + { + _bits &= ~flag; + _headers._ContentRange = default; + } } } - public StringValues HeaderAuthorization + StringValues IHeaderDictionary.Expires { get { - StringValues value = default; - if ((_bits & 0x10000000L) != 0) + var value = _headers._Expires; + if ((_bits & 0x40000L) != 0) { - value = _headers._Authorization; + return value; } - return value; + return default; } set { - _bits |= 0x10000000L; - _headers._Authorization = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x40000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Expires = value; + } + else + { + _bits &= ~flag; + _headers._Expires = default; + } } } - public StringValues HeaderCookie + StringValues IHeaderDictionary.LastModified { get { - StringValues value = default; - if ((_bits & 0x20000000L) != 0) + var value = _headers._LastModified; + if ((_bits & 0x80000L) != 0) { - value = _headers._Cookie; + return value; } - return value; + return default; } set { - _bits |= 0x20000000L; - _headers._Cookie = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x80000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._LastModified = value; + } + else + { + _bits &= ~flag; + _headers._LastModified = default; + } } } - public StringValues HeaderExpect + StringValues IHeaderDictionary.Accept { get { - StringValues value = default; - if ((_bits & 0x40000000L) != 0) + var value = _headers._Accept; + if ((_bits & 0x1000000L) != 0) { - value = _headers._Expect; + return value; } - return value; + return default; } set { - _bits |= 0x40000000L; - _headers._Expect = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x1000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Accept = value; + } + else + { + _bits &= ~flag; + _headers._Accept = default; + } } } - public StringValues HeaderFrom + StringValues IHeaderDictionary.AcceptCharset { get { - StringValues value = default; - if ((_bits & 0x80000000L) != 0) + var value = _headers._AcceptCharset; + if ((_bits & 0x2000000L) != 0) { - value = _headers._From; + return value; } - return value; + return default; } set { - _bits |= 0x80000000L; - _headers._From = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x2000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._AcceptCharset = value; + } + else + { + _bits &= ~flag; + _headers._AcceptCharset = default; + } } } - public StringValues HeaderGrpcAcceptEncoding + StringValues IHeaderDictionary.AcceptEncoding { get { - StringValues value = default; - if ((_bits & 0x100000000L) != 0) + var value = _headers._AcceptEncoding; + if ((_bits & 0x4000000L) != 0) { - value = _headers._GrpcAcceptEncoding; + return value; } - return value; + return default; } set { - _bits |= 0x100000000L; - _headers._GrpcAcceptEncoding = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x4000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._AcceptEncoding = value; + } + else + { + _bits &= ~flag; + _headers._AcceptEncoding = default; + } } } - public StringValues HeaderGrpcTimeout + StringValues IHeaderDictionary.AcceptLanguage { get { - StringValues value = default; - if ((_bits & 0x200000000L) != 0) + var value = _headers._AcceptLanguage; + if ((_bits & 0x8000000L) != 0) { - value = _headers._GrpcTimeout; + return value; } - return value; + return default; } set { - _bits |= 0x200000000L; - _headers._GrpcTimeout = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x8000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._AcceptLanguage = value; + } + else + { + _bits &= ~flag; + _headers._AcceptLanguage = default; + } } } - public StringValues HeaderHost + StringValues IHeaderDictionary.Authorization { get { - StringValues value = default; - if ((_bits & 0x400000000L) != 0) + var value = _headers._Authorization; + if ((_bits & 0x10000000L) != 0) { - value = _headers._Host; + return value; } - return value; + return default; } set { - _bits |= 0x400000000L; - _headers._Host = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x10000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Authorization = value; + } + else + { + _bits &= ~flag; + _headers._Authorization = default; + } } } - public StringValues HeaderIfMatch + StringValues IHeaderDictionary.Cookie { get { - StringValues value = default; - if ((_bits & 0x800000000L) != 0) + var value = _headers._Cookie; + if ((_bits & 0x20000000L) != 0) { - value = _headers._IfMatch; + return value; } - return value; + return default; } set { - _bits |= 0x800000000L; - _headers._IfMatch = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x20000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Cookie = value; + } + else + { + _bits &= ~flag; + _headers._Cookie = default; + } } } - public StringValues HeaderIfModifiedSince + StringValues IHeaderDictionary.Expect { get { - StringValues value = default; - if ((_bits & 0x1000000000L) != 0) + var value = _headers._Expect; + if ((_bits & 0x40000000L) != 0) { - value = _headers._IfModifiedSince; + return value; } - return value; + return default; } set { - _bits |= 0x1000000000L; - _headers._IfModifiedSince = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x40000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Expect = value; + } + else + { + _bits &= ~flag; + _headers._Expect = default; + } } } - public StringValues HeaderIfNoneMatch + StringValues IHeaderDictionary.From { get { - StringValues value = default; - if ((_bits & 0x2000000000L) != 0) + var value = _headers._From; + if ((_bits & 0x80000000L) != 0) { - value = _headers._IfNoneMatch; + return value; } - return value; + return default; } set { - _bits |= 0x2000000000L; - _headers._IfNoneMatch = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x80000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._From = value; + } + else + { + _bits &= ~flag; + _headers._From = default; + } } } - public StringValues HeaderIfRange + StringValues IHeaderDictionary.GrpcAcceptEncoding { get { - StringValues value = default; - if ((_bits & 0x4000000000L) != 0) + var value = _headers._GrpcAcceptEncoding; + if ((_bits & 0x100000000L) != 0) { - value = _headers._IfRange; + return value; } - return value; + return default; } set { - _bits |= 0x4000000000L; - _headers._IfRange = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x100000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._GrpcAcceptEncoding = value; + } + else + { + _bits &= ~flag; + _headers._GrpcAcceptEncoding = default; + } } } - public StringValues HeaderIfUnmodifiedSince + StringValues IHeaderDictionary.GrpcTimeout { get { - StringValues value = default; - if ((_bits & 0x8000000000L) != 0) + var value = _headers._GrpcTimeout; + if ((_bits & 0x200000000L) != 0) { - value = _headers._IfUnmodifiedSince; + return value; } - return value; + return default; } set { - _bits |= 0x8000000000L; - _headers._IfUnmodifiedSince = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x200000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._GrpcTimeout = value; + } + else + { + _bits &= ~flag; + _headers._GrpcTimeout = default; + } } } - public StringValues HeaderMaxForwards + StringValues IHeaderDictionary.Host { get { - StringValues value = default; - if ((_bits & 0x10000000000L) != 0) + var value = _headers._Host; + if ((_bits & 0x400000000L) != 0) { - value = _headers._MaxForwards; + return value; } - return value; + return default; } set { - _bits |= 0x10000000000L; - _headers._MaxForwards = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x400000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Host = value; + } + else + { + _bits &= ~flag; + _headers._Host = default; + } } } - public StringValues HeaderProxyAuthorization + StringValues IHeaderDictionary.IfMatch { get { - StringValues value = default; - if ((_bits & 0x20000000000L) != 0) + var value = _headers._IfMatch; + if ((_bits & 0x800000000L) != 0) { - value = _headers._ProxyAuthorization; + return value; } - return value; + return default; } set { - _bits |= 0x20000000000L; - _headers._ProxyAuthorization = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x800000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._IfMatch = value; + } + else + { + _bits &= ~flag; + _headers._IfMatch = default; + } } } - public StringValues HeaderReferer + StringValues IHeaderDictionary.IfModifiedSince { get { - StringValues value = default; - if ((_bits & 0x40000000000L) != 0) + var value = _headers._IfModifiedSince; + if ((_bits & 0x1000000000L) != 0) { - value = _headers._Referer; + return value; } - return value; + return default; } set { - _bits |= 0x40000000000L; - _headers._Referer = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x1000000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._IfModifiedSince = value; + } + else + { + _bits &= ~flag; + _headers._IfModifiedSince = default; + } } } - public StringValues HeaderRange + StringValues IHeaderDictionary.IfNoneMatch { get { - StringValues value = default; - if ((_bits & 0x80000000000L) != 0) + var value = _headers._IfNoneMatch; + if ((_bits & 0x2000000000L) != 0) { - value = _headers._Range; + return value; } - return value; + return default; } set { - _bits |= 0x80000000000L; - _headers._Range = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x2000000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._IfNoneMatch = value; + } + else + { + _bits &= ~flag; + _headers._IfNoneMatch = default; + } } } - public StringValues HeaderTE + StringValues IHeaderDictionary.IfRange { get { - StringValues value = default; - if ((_bits & 0x100000000000L) != 0) + var value = _headers._IfRange; + if ((_bits & 0x4000000000L) != 0) { - value = _headers._TE; + return value; } - return value; + return default; } set { - _bits |= 0x100000000000L; - _headers._TE = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x4000000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._IfRange = value; + } + else + { + _bits &= ~flag; + _headers._IfRange = default; + } } } - public StringValues HeaderTranslate + StringValues IHeaderDictionary.IfUnmodifiedSince { get { - StringValues value = default; - if ((_bits & 0x200000000000L) != 0) + var value = _headers._IfUnmodifiedSince; + if ((_bits & 0x8000000000L) != 0) { - value = _headers._Translate; + return value; } - return value; + return default; } set { - _bits |= 0x200000000000L; - _headers._Translate = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x8000000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._IfUnmodifiedSince = value; + } + else + { + _bits &= ~flag; + _headers._IfUnmodifiedSince = default; + } } } - public StringValues HeaderUserAgent + StringValues IHeaderDictionary.MaxForwards { get { - StringValues value = default; - if ((_bits & 0x400000000000L) != 0) + var value = _headers._MaxForwards; + if ((_bits & 0x10000000000L) != 0) { - value = _headers._UserAgent; + return value; } - return value; + return default; } set { - _bits |= 0x400000000000L; - _headers._UserAgent = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x10000000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._MaxForwards = value; + } + else + { + _bits &= ~flag; + _headers._MaxForwards = default; + } } } - public StringValues HeaderUpgradeInsecureRequests + StringValues IHeaderDictionary.ProxyAuthorization { get { - StringValues value = default; - if ((_bits & 0x800000000000L) != 0) + var value = _headers._ProxyAuthorization; + if ((_bits & 0x20000000000L) != 0) { - value = _headers._UpgradeInsecureRequests; + return value; } - return value; + return default; } set { - _bits |= 0x800000000000L; - _headers._UpgradeInsecureRequests = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x20000000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._ProxyAuthorization = value; + } + else + { + _bits &= ~flag; + _headers._ProxyAuthorization = default; + } } } - public StringValues HeaderRequestId + StringValues IHeaderDictionary.Referer { get { - StringValues value = default; - if ((_bits & 0x1000000000000L) != 0) + var value = _headers._Referer; + if ((_bits & 0x40000000000L) != 0) { - value = _headers._RequestId; + return value; } - return value; + return default; } set { - _bits |= 0x1000000000000L; - _headers._RequestId = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x40000000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Referer = value; + } + else + { + _bits &= ~flag; + _headers._Referer = default; + } } } - public StringValues HeaderCorrelationContext + StringValues IHeaderDictionary.Range { get { - StringValues value = default; + var value = _headers._Range; + if ((_bits & 0x80000000000L) != 0) + { + return value; + } + return default; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x80000000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Range = value; + } + else + { + _bits &= ~flag; + _headers._Range = default; + } + } + } + StringValues IHeaderDictionary.TE + { + get + { + var value = _headers._TE; + if ((_bits & 0x100000000000L) != 0) + { + return value; + } + return default; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x100000000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._TE = value; + } + else + { + _bits &= ~flag; + _headers._TE = default; + } + } + } + StringValues IHeaderDictionary.Translate + { + get + { + var value = _headers._Translate; + if ((_bits & 0x200000000000L) != 0) + { + return value; + } + return default; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x200000000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Translate = value; + } + else + { + _bits &= ~flag; + _headers._Translate = default; + } + } + } + StringValues IHeaderDictionary.UserAgent + { + get + { + var value = _headers._UserAgent; + if ((_bits & 0x400000000000L) != 0) + { + return value; + } + return default; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x400000000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._UserAgent = value; + } + else + { + _bits &= ~flag; + _headers._UserAgent = default; + } + } + } + StringValues IHeaderDictionary.UpgradeInsecureRequests + { + get + { + var value = _headers._UpgradeInsecureRequests; + if ((_bits & 0x800000000000L) != 0) + { + return value; + } + return default; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x800000000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._UpgradeInsecureRequests = value; + } + else + { + _bits &= ~flag; + _headers._UpgradeInsecureRequests = default; + } + } + } + StringValues IHeaderDictionary.RequestId + { + get + { + var value = _headers._RequestId; + if ((_bits & 0x1000000000000L) != 0) + { + return value; + } + return default; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x1000000000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._RequestId = value; + } + else + { + _bits &= ~flag; + _headers._RequestId = default; + } + } + } + StringValues IHeaderDictionary.CorrelationContext + { + get + { + var value = _headers._CorrelationContext; if ((_bits & 0x2000000000000L) != 0) { - value = _headers._CorrelationContext; + return value; } - return value; + return default; } set { - _bits |= 0x2000000000000L; - _headers._CorrelationContext = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x2000000000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._CorrelationContext = value; + } + else + { + _bits &= ~flag; + _headers._CorrelationContext = default; + } } } - public StringValues HeaderTraceParent + StringValues IHeaderDictionary.TraceParent { get { - StringValues value = default; + var value = _headers._TraceParent; if ((_bits & 0x4000000000000L) != 0) { - value = _headers._TraceParent; + return value; } - return value; + return default; } set { - _bits |= 0x4000000000000L; - _headers._TraceParent = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x4000000000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._TraceParent = value; + } + else + { + _bits &= ~flag; + _headers._TraceParent = default; + } } } - public StringValues HeaderTraceState + StringValues IHeaderDictionary.TraceState { get { - StringValues value = default; + var value = _headers._TraceState; if ((_bits & 0x8000000000000L) != 0) { - value = _headers._TraceState; + return value; } - return value; + return default; } set { - _bits |= 0x8000000000000L; - _headers._TraceState = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x8000000000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._TraceState = value; + } + else + { + _bits &= ~flag; + _headers._TraceState = default; + } } } - public StringValues HeaderBaggage + StringValues IHeaderDictionary.Baggage { get { - StringValues value = default; + var value = _headers._Baggage; if ((_bits & 0x10000000000000L) != 0) { - value = _headers._Baggage; + return value; } - return value; + return default; } set { - _bits |= 0x10000000000000L; - _headers._Baggage = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x10000000000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Baggage = value; + } + else + { + _bits &= ~flag; + _headers._Baggage = default; + } } } - public StringValues HeaderOrigin + StringValues IHeaderDictionary.Origin { get { - StringValues value = default; + var value = _headers._Origin; if ((_bits & 0x20000000000000L) != 0) { - value = _headers._Origin; + return value; } - return value; + return default; } set { - _bits |= 0x20000000000000L; - _headers._Origin = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x20000000000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Origin = value; + } + else + { + _bits &= ~flag; + _headers._Origin = default; + } } } - public StringValues HeaderAccessControlRequestMethod + StringValues IHeaderDictionary.AccessControlRequestMethod { get { - StringValues value = default; + var value = _headers._AccessControlRequestMethod; if ((_bits & 0x40000000000000L) != 0) { - value = _headers._AccessControlRequestMethod; + return value; } - return value; + return default; } set { - _bits |= 0x40000000000000L; - _headers._AccessControlRequestMethod = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x40000000000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._AccessControlRequestMethod = value; + } + else + { + _bits &= ~flag; + _headers._AccessControlRequestMethod = default; + } } } - public StringValues HeaderAccessControlRequestHeaders + StringValues IHeaderDictionary.AccessControlRequestHeaders { get { - StringValues value = default; + var value = _headers._AccessControlRequestHeaders; if ((_bits & 0x80000000000000L) != 0) { - value = _headers._AccessControlRequestHeaders; + return value; + } + return default; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x80000000000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._AccessControlRequestHeaders = value; + } + else + { + _bits &= ~flag; + _headers._AccessControlRequestHeaders = default; + } + } + } + + StringValues IHeaderDictionary.AcceptRanges + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.AcceptRanges, ref value)) + { + value = default; } return value; } set { - _bits |= 0x80000000000000L; - _headers._AccessControlRequestHeaders = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.AcceptRanges, value); } } - public StringValues HeaderContentLength + StringValues IHeaderDictionary.AccessControlAllowCredentials { get { StringValues value = default; - if (_contentLength.HasValue) + if (!TryGetUnknown(HeaderNames.AccessControlAllowCredentials, ref value)) { - value = new StringValues(HeaderUtilities.FormatNonNegativeInt64(_contentLength.Value)); + value = default; } return value; } set { - _contentLength = ParseContentLength(value); + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.AccessControlAllowCredentials, value); } } + StringValues IHeaderDictionary.AccessControlAllowHeaders + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.AccessControlAllowHeaders, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - protected override int GetCountFast() + SetValueUnknown(HeaderNames.AccessControlAllowHeaders, value); + } + } + StringValues IHeaderDictionary.AccessControlAllowMethods { - return (_contentLength.HasValue ? 1 : 0 ) + BitOperations.PopCount((ulong)_bits) + (MaybeUnknown?.Count ?? 0); + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.AccessControlAllowMethods, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.AccessControlAllowMethods, value); + } } + StringValues IHeaderDictionary.AccessControlAllowOrigin + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.AccessControlAllowOrigin, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - protected override bool TryGetValueFast(string key, out StringValues value) + SetValueUnknown(HeaderNames.AccessControlAllowOrigin, value); + } + } + StringValues IHeaderDictionary.AccessControlExposeHeaders { - value = default; - switch (key.Length) + get { - case 2: + StringValues value = default; + if (!TryGetUnknown(HeaderNames.AccessControlExposeHeaders, ref value)) { - if (ReferenceEquals(HeaderNames.TE, key)) - { - if ((_bits & 0x100000000000L) != 0) - { - value = _headers._TE; - return true; - } - return false; - } + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - if (HeaderNames.TE.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x100000000000L) != 0) - { - value = _headers._TE; - return true; - } - return false; - } - break; + SetValueUnknown(HeaderNames.AccessControlExposeHeaders, value); + } + } + StringValues IHeaderDictionary.AccessControlMaxAge + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.AccessControlMaxAge, ref value)) + { + value = default; } - case 3: + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.AccessControlMaxAge, value); + } + } + StringValues IHeaderDictionary.Age + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Age, ref value)) { - if (ReferenceEquals(HeaderNames.Via, key)) - { - if ((_bits & 0x200L) != 0) - { - value = _headers._Via; - return true; - } - return false; - } + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - if (HeaderNames.Via.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x200L) != 0) - { - value = _headers._Via; - return true; - } - return false; - } - break; + SetValueUnknown(HeaderNames.Age, value); + } + } + StringValues IHeaderDictionary.AltSvc + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.AltSvc, ref value)) + { + value = default; } - case 4: + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.AltSvc, value); + } + } + StringValues IHeaderDictionary.ContentDisposition + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.ContentDisposition, ref value)) { - if (ReferenceEquals(HeaderNames.Host, key)) - { - if ((_bits & 0x400000000L) != 0) - { - value = _headers._Host; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.Date, key)) - { - if ((_bits & 0x4L) != 0) - { - value = _headers._Date; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.From, key)) - { - if ((_bits & 0x80000000L) != 0) - { - value = _headers._From; - return true; - } - return false; - } + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - if (HeaderNames.Host.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x400000000L) != 0) - { - value = _headers._Host; - return true; - } - return false; - } - if (HeaderNames.Date.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x4L) != 0) - { - value = _headers._Date; - return true; - } - return false; - } - if (HeaderNames.From.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x80000000L) != 0) - { - value = _headers._From; - return true; - } - return false; - } - break; + SetValueUnknown(HeaderNames.ContentDisposition, value); + } + } + StringValues IHeaderDictionary.ContentSecurityPolicy + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.ContentSecurityPolicy, ref value)) + { + value = default; } - case 5: + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.ContentSecurityPolicy, value); + } + } + StringValues IHeaderDictionary.ContentSecurityPolicyReportOnly + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.ContentSecurityPolicyReportOnly, ref value)) { - if (ReferenceEquals(HeaderNames.Allow, key)) - { - if ((_bits & 0x800L) != 0) - { - value = _headers._Allow; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.Path, key)) - { - if ((_bits & 0x400000L) != 0) - { - value = _headers._Path; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.Range, key)) - { - if ((_bits & 0x80000000000L) != 0) - { - value = _headers._Range; - return true; - } - return false; - } + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - if (HeaderNames.Allow.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x800L) != 0) - { - value = _headers._Allow; - return true; - } - return false; - } - if (HeaderNames.Path.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x400000L) != 0) - { - value = _headers._Path; - return true; - } - return false; - } - if (HeaderNames.Range.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x80000000000L) != 0) - { - value = _headers._Range; - return true; - } - return false; - } - break; + SetValueUnknown(HeaderNames.ContentSecurityPolicyReportOnly, value); + } + } + StringValues IHeaderDictionary.ETag + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.ETag, ref value)) + { + value = default; } - case 6: + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.ETag, value); + } + } + StringValues IHeaderDictionary.GrpcMessage + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.GrpcMessage, ref value)) { - if (ReferenceEquals(HeaderNames.Accept, key)) - { - if ((_bits & 0x1000000L) != 0) - { - value = _headers._Accept; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.Pragma, key)) - { - if ((_bits & 0x20L) != 0) - { - value = _headers._Pragma; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.Cookie, key)) - { - if ((_bits & 0x20000000L) != 0) - { - value = _headers._Cookie; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.Expect, key)) - { - if ((_bits & 0x40000000L) != 0) - { - value = _headers._Expect; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.Origin, key)) - { - if ((_bits & 0x20000000000000L) != 0) - { - value = _headers._Origin; - return true; - } - return false; - } + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - if (HeaderNames.Accept.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x1000000L) != 0) - { - value = _headers._Accept; - return true; - } - return false; - } - if (HeaderNames.Pragma.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x20L) != 0) - { - value = _headers._Pragma; - return true; - } - return false; - } - if (HeaderNames.Cookie.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x20000000L) != 0) - { - value = _headers._Cookie; - return true; - } - return false; - } - if (HeaderNames.Expect.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x40000000L) != 0) - { - value = _headers._Expect; - return true; - } - return false; - } - if (HeaderNames.Origin.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x20000000000000L) != 0) - { - value = _headers._Origin; - return true; - } - return false; - } - break; + SetValueUnknown(HeaderNames.GrpcMessage, value); + } + } + StringValues IHeaderDictionary.GrpcStatus + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.GrpcStatus, ref value)) + { + value = default; } - case 7: + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.GrpcStatus, value); + } + } + StringValues IHeaderDictionary.Link + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Link, ref value)) { - if (ReferenceEquals(HeaderNames.Trailer, key)) - { - if ((_bits & 0x40L) != 0) - { - value = _headers._Trailer; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.Upgrade, key)) - { - if ((_bits & 0x100L) != 0) - { - value = _headers._Upgrade; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.Warning, key)) - { - if ((_bits & 0x400L) != 0) - { - value = _headers._Warning; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.Expires, key)) - { - if ((_bits & 0x40000L) != 0) - { - value = _headers._Expires; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.Method, key)) - { - if ((_bits & 0x200000L) != 0) - { - value = _headers._Method; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.Scheme, key)) - { - if ((_bits & 0x800000L) != 0) - { - value = _headers._Scheme; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.Referer, key)) - { - if ((_bits & 0x40000000000L) != 0) - { - value = _headers._Referer; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.Baggage, key)) - { - if ((_bits & 0x10000000000000L) != 0) - { - value = _headers._Baggage; - return true; - } - return false; - } + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - if (HeaderNames.Trailer.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x40L) != 0) - { - value = _headers._Trailer; - return true; - } - return false; - } - if (HeaderNames.Upgrade.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x100L) != 0) - { - value = _headers._Upgrade; - return true; - } - return false; - } - if (HeaderNames.Warning.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x400L) != 0) - { - value = _headers._Warning; - return true; - } - return false; - } - if (HeaderNames.Expires.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x40000L) != 0) - { - value = _headers._Expires; - return true; - } - return false; - } - if (HeaderNames.Method.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x200000L) != 0) - { - value = _headers._Method; - return true; - } - return false; - } - if (HeaderNames.Scheme.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x800000L) != 0) - { - value = _headers._Scheme; - return true; - } - return false; - } - if (HeaderNames.Referer.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x40000000000L) != 0) - { - value = _headers._Referer; - return true; - } - return false; - } - if (HeaderNames.Baggage.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x10000000000000L) != 0) - { - value = _headers._Baggage; - return true; - } - return false; - } - break; + SetValueUnknown(HeaderNames.Link, value); + } + } + StringValues IHeaderDictionary.Location + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Location, ref value)) + { + value = default; } - case 8: + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Location, value); + } + } + StringValues IHeaderDictionary.ProxyAuthenticate + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.ProxyAuthenticate, ref value)) { - if (ReferenceEquals(HeaderNames.IfMatch, key)) - { - if ((_bits & 0x800000000L) != 0) - { - value = _headers._IfMatch; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.IfRange, key)) - { - if ((_bits & 0x4000000000L) != 0) - { - value = _headers._IfRange; - return true; - } - return false; - } - - if (HeaderNames.IfMatch.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x800000000L) != 0) - { - value = _headers._IfMatch; - return true; - } - return false; - } - if (HeaderNames.IfRange.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x4000000000L) != 0) - { - value = _headers._IfRange; - return true; - } - return false; - } - break; + value = default; } - case 9: + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.ProxyAuthenticate, value); + } + } + StringValues IHeaderDictionary.ProxyConnection + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.ProxyConnection, ref value)) { - if (ReferenceEquals(HeaderNames.Translate, key)) - { - if ((_bits & 0x200000000000L) != 0) - { - value = _headers._Translate; - return true; - } - return false; - } + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - if (HeaderNames.Translate.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x200000000000L) != 0) - { - value = _headers._Translate; - return true; - } - return false; - } - break; + SetValueUnknown(HeaderNames.ProxyConnection, value); + } + } + StringValues IHeaderDictionary.RetryAfter + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.RetryAfter, ref value)) + { + value = default; } - case 10: + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.RetryAfter, value); + } + } + StringValues IHeaderDictionary.SecWebSocketAccept + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.SecWebSocketAccept, ref value)) { - if (ReferenceEquals(HeaderNames.Connection, key)) - { - if ((_bits & 0x2L) != 0) - { - value = _headers._Connection; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.UserAgent, key)) - { - if ((_bits & 0x400000000000L) != 0) - { - value = _headers._UserAgent; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.KeepAlive, key)) - { - if ((_bits & 0x10L) != 0) - { - value = _headers._KeepAlive; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.Authority, key)) - { - if ((_bits & 0x100000L) != 0) - { - value = _headers._Authority; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.RequestId, key)) - { - if ((_bits & 0x1000000000000L) != 0) - { - value = _headers._RequestId; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.TraceState, key)) - { - if ((_bits & 0x8000000000000L) != 0) - { - value = _headers._TraceState; - return true; - } - return false; - } + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - if (HeaderNames.Connection.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x2L) != 0) - { - value = _headers._Connection; - return true; - } - return false; - } - if (HeaderNames.UserAgent.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x400000000000L) != 0) - { - value = _headers._UserAgent; - return true; - } - return false; - } - if (HeaderNames.KeepAlive.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x10L) != 0) - { - value = _headers._KeepAlive; - return true; - } - return false; - } - if (HeaderNames.Authority.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x100000L) != 0) - { - value = _headers._Authority; - return true; - } - return false; - } - if (HeaderNames.RequestId.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x1000000000000L) != 0) - { - value = _headers._RequestId; - return true; - } - return false; - } - if (HeaderNames.TraceState.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x8000000000000L) != 0) - { - value = _headers._TraceState; - return true; - } - return false; - } - break; + SetValueUnknown(HeaderNames.SecWebSocketAccept, value); + } + } + StringValues IHeaderDictionary.SecWebSocketKey + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.SecWebSocketKey, ref value)) + { + value = default; } - case 11: + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.SecWebSocketKey, value); + } + } + StringValues IHeaderDictionary.SecWebSocketProtocol + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.SecWebSocketProtocol, ref value)) { - if (ReferenceEquals(HeaderNames.ContentMD5, key)) - { - if ((_bits & 0x10000L) != 0) - { - value = _headers._ContentMD5; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.TraceParent, key)) - { - if ((_bits & 0x4000000000000L) != 0) - { - value = _headers._TraceParent; - return true; - } - return false; - } + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - if (HeaderNames.ContentMD5.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x10000L) != 0) - { - value = _headers._ContentMD5; - return true; - } - return false; + SetValueUnknown(HeaderNames.SecWebSocketProtocol, value); + } + } + StringValues IHeaderDictionary.SecWebSocketVersion + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.SecWebSocketVersion, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.SecWebSocketVersion, value); + } + } + StringValues IHeaderDictionary.Server + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Server, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Server, value); + } + } + StringValues IHeaderDictionary.SetCookie + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.SetCookie, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.SetCookie, value); + } + } + StringValues IHeaderDictionary.StrictTransportSecurity + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.StrictTransportSecurity, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.StrictTransportSecurity, value); + } + } + StringValues IHeaderDictionary.Vary + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Vary, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Vary, value); + } + } + StringValues IHeaderDictionary.WebSocketSubProtocols + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.WebSocketSubProtocols, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.WebSocketSubProtocols, value); + } + } + StringValues IHeaderDictionary.WWWAuthenticate + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.WWWAuthenticate, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.WWWAuthenticate, value); + } + } + StringValues IHeaderDictionary.XContentTypeOptions + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.XContentTypeOptions, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.XContentTypeOptions, value); + } + } + StringValues IHeaderDictionary.XFrameOptions + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.XFrameOptions, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.XFrameOptions, value); + } + } + StringValues IHeaderDictionary.XPoweredBy + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.XPoweredBy, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.XPoweredBy, value); + } + } + StringValues IHeaderDictionary.XRequestedWith + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.XRequestedWith, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.XRequestedWith, value); + } + } + StringValues IHeaderDictionary.XUACompatible + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.XUACompatible, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.XUACompatible, value); + } + } + StringValues IHeaderDictionary.XXSSProtection + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.XXSSProtection, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.XXSSProtection, value); + } + } + + protected override int GetCountFast() + { + return (_contentLength.HasValue ? 1 : 0 ) + BitOperations.PopCount((ulong)_bits) + (MaybeUnknown?.Count ?? 0); + } + + protected override bool TryGetValueFast(string key, out StringValues value) + { + value = default; + switch (key.Length) + { + case 2: + { + if (ReferenceEquals(HeaderNames.TE, key)) + { + if ((_bits & 0x100000000000L) != 0) + { + value = _headers._TE; + return true; + } + return false; } - if (HeaderNames.TraceParent.Equals(key, StringComparison.OrdinalIgnoreCase)) + + if (HeaderNames.TE.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x4000000000000L) != 0) + if ((_bits & 0x100000000000L) != 0) { - value = _headers._TraceParent; + value = _headers._TE; return true; } return false; } break; } - case 12: + case 3: { - if (ReferenceEquals(HeaderNames.ContentType, key)) + if (ReferenceEquals(HeaderNames.Via, key)) { - if ((_bits & 0x1000L) != 0) + if ((_bits & 0x200L) != 0) { - value = _headers._ContentType; + value = _headers._Via; return true; } return false; } - if (ReferenceEquals(HeaderNames.GrpcTimeout, key)) + + if (HeaderNames.Via.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x200000000L) != 0) + if ((_bits & 0x200L) != 0) { - value = _headers._GrpcTimeout; + value = _headers._Via; return true; } return false; } - if (ReferenceEquals(HeaderNames.MaxForwards, key)) + break; + } + case 4: + { + if (ReferenceEquals(HeaderNames.Host, key)) { - if ((_bits & 0x10000000000L) != 0) + if ((_bits & 0x400000000L) != 0) { - value = _headers._MaxForwards; + value = _headers._Host; return true; } return false; } - - if (HeaderNames.ContentType.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.Date, key)) { - if ((_bits & 0x1000L) != 0) + if ((_bits & 0x4L) != 0) { - value = _headers._ContentType; + value = _headers._Date; return true; } return false; } - if (HeaderNames.GrpcTimeout.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.From, key)) { - if ((_bits & 0x200000000L) != 0) + if ((_bits & 0x80000000L) != 0) { - value = _headers._GrpcTimeout; + value = _headers._From; return true; } return false; } - if (HeaderNames.MaxForwards.Equals(key, StringComparison.OrdinalIgnoreCase)) + + if (HeaderNames.Host.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x10000000000L) != 0) + if ((_bits & 0x400000000L) != 0) { - value = _headers._MaxForwards; + value = _headers._Host; return true; } return false; } - break; - } - case 13: - { - if (ReferenceEquals(HeaderNames.CacheControl, key)) + if (HeaderNames.Date.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x1L) != 0) + if ((_bits & 0x4L) != 0) { - value = _headers._CacheControl; + value = _headers._Date; return true; } return false; } - if (ReferenceEquals(HeaderNames.GrpcEncoding, key)) + if (HeaderNames.From.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x8L) != 0) - { - value = _headers._GrpcEncoding; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.ContentRange, key)) - { - if ((_bits & 0x20000L) != 0) + if ((_bits & 0x80000000L) != 0) { - value = _headers._ContentRange; + value = _headers._From; return true; } return false; } - if (ReferenceEquals(HeaderNames.LastModified, key)) + break; + } + case 5: + { + if (ReferenceEquals(HeaderNames.Allow, key)) { - if ((_bits & 0x80000L) != 0) + if ((_bits & 0x800L) != 0) { - value = _headers._LastModified; + value = _headers._Allow; return true; } return false; } - if (ReferenceEquals(HeaderNames.Authorization, key)) + if (ReferenceEquals(HeaderNames.Path, key)) { - if ((_bits & 0x10000000L) != 0) + if ((_bits & 0x400000L) != 0) { - value = _headers._Authorization; + value = _headers._Path; return true; } return false; } - if (ReferenceEquals(HeaderNames.IfNoneMatch, key)) + if (ReferenceEquals(HeaderNames.Range, key)) { - if ((_bits & 0x2000000000L) != 0) + if ((_bits & 0x80000000000L) != 0) { - value = _headers._IfNoneMatch; + value = _headers._Range; return true; } return false; } - if (HeaderNames.CacheControl.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Allow.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x1L) != 0) + if ((_bits & 0x800L) != 0) { - value = _headers._CacheControl; + value = _headers._Allow; return true; } return false; } - if (HeaderNames.GrpcEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Path.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x8L) != 0) + if ((_bits & 0x400000L) != 0) { - value = _headers._GrpcEncoding; + value = _headers._Path; return true; } return false; } - if (HeaderNames.ContentRange.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Range.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x20000L) != 0) + if ((_bits & 0x80000000000L) != 0) { - value = _headers._ContentRange; + value = _headers._Range; return true; } return false; } - if (HeaderNames.LastModified.Equals(key, StringComparison.OrdinalIgnoreCase)) + break; + } + case 6: + { + if (ReferenceEquals(HeaderNames.Accept, key)) { - if ((_bits & 0x80000L) != 0) + if ((_bits & 0x1000000L) != 0) { - value = _headers._LastModified; + value = _headers._Accept; return true; } return false; } - if (HeaderNames.Authorization.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.Pragma, key)) { - if ((_bits & 0x10000000L) != 0) + if ((_bits & 0x20L) != 0) { - value = _headers._Authorization; + value = _headers._Pragma; return true; } return false; } - if (HeaderNames.IfNoneMatch.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.Cookie, key)) { - if ((_bits & 0x2000000000L) != 0) + if ((_bits & 0x20000000L) != 0) { - value = _headers._IfNoneMatch; + value = _headers._Cookie; return true; } return false; } - break; - } - case 14: - { - if (ReferenceEquals(HeaderNames.AcceptCharset, key)) + if (ReferenceEquals(HeaderNames.Expect, key)) { - if ((_bits & 0x2000000L) != 0) + if ((_bits & 0x40000000L) != 0) { - value = _headers._AcceptCharset; + value = _headers._Expect; return true; } return false; } - if (ReferenceEquals(HeaderNames.ContentLength, key)) + if (ReferenceEquals(HeaderNames.Origin, key)) { - if (_contentLength.HasValue) + if ((_bits & 0x20000000000000L) != 0) { - value = HeaderUtilities.FormatNonNegativeInt64(_contentLength.Value); + value = _headers._Origin; return true; } return false; } - if (HeaderNames.AcceptCharset.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x2000000L) != 0) - { - value = _headers._AcceptCharset; - return true; - } - return false; - } - if (HeaderNames.ContentLength.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Accept.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if (_contentLength.HasValue) + if ((_bits & 0x1000000L) != 0) { - value = HeaderUtilities.FormatNonNegativeInt64(_contentLength.Value); + value = _headers._Accept; return true; } return false; } - break; - } - case 15: - { - if (ReferenceEquals(HeaderNames.AcceptEncoding, key)) + if (HeaderNames.Pragma.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x4000000L) != 0) + if ((_bits & 0x20L) != 0) { - value = _headers._AcceptEncoding; + value = _headers._Pragma; return true; } return false; } - if (ReferenceEquals(HeaderNames.AcceptLanguage, key)) + if (HeaderNames.Cookie.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x8000000L) != 0) + if ((_bits & 0x20000000L) != 0) { - value = _headers._AcceptLanguage; + value = _headers._Cookie; return true; } return false; } - - if (HeaderNames.AcceptEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Expect.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x4000000L) != 0) + if ((_bits & 0x40000000L) != 0) { - value = _headers._AcceptEncoding; + value = _headers._Expect; return true; } return false; } - if (HeaderNames.AcceptLanguage.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Origin.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x8000000L) != 0) + if ((_bits & 0x20000000000000L) != 0) { - value = _headers._AcceptLanguage; + value = _headers._Origin; return true; } return false; } break; } - case 16: + case 7: { - if (ReferenceEquals(HeaderNames.ContentEncoding, key)) + if (ReferenceEquals(HeaderNames.Trailer, key)) { - if ((_bits & 0x2000L) != 0) + if ((_bits & 0x40L) != 0) { - value = _headers._ContentEncoding; + value = _headers._Trailer; return true; } return false; } - if (ReferenceEquals(HeaderNames.ContentLanguage, key)) + if (ReferenceEquals(HeaderNames.Upgrade, key)) { - if ((_bits & 0x4000L) != 0) + if ((_bits & 0x100L) != 0) { - value = _headers._ContentLanguage; + value = _headers._Upgrade; return true; } return false; } - if (ReferenceEquals(HeaderNames.ContentLocation, key)) + if (ReferenceEquals(HeaderNames.Warning, key)) { - if ((_bits & 0x8000L) != 0) + if ((_bits & 0x400L) != 0) { - value = _headers._ContentLocation; + value = _headers._Warning; return true; } return false; } - - if (HeaderNames.ContentEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.Expires, key)) { - if ((_bits & 0x2000L) != 0) + if ((_bits & 0x40000L) != 0) { - value = _headers._ContentEncoding; + value = _headers._Expires; return true; } return false; } - if (HeaderNames.ContentLanguage.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.Method, key)) { - if ((_bits & 0x4000L) != 0) + if ((_bits & 0x200000L) != 0) { - value = _headers._ContentLanguage; + value = _headers._Method; return true; } return false; } - if (HeaderNames.ContentLocation.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.Scheme, key)) { - if ((_bits & 0x8000L) != 0) + if ((_bits & 0x800000L) != 0) { - value = _headers._ContentLocation; + value = _headers._Scheme; return true; } return false; } - break; - } - case 17: - { - if (ReferenceEquals(HeaderNames.TransferEncoding, key)) + if (ReferenceEquals(HeaderNames.Referer, key)) { - if ((_bits & 0x80L) != 0) + if ((_bits & 0x40000000000L) != 0) { - value = _headers._TransferEncoding; + value = _headers._Referer; return true; } return false; } - if (ReferenceEquals(HeaderNames.IfModifiedSince, key)) + if (ReferenceEquals(HeaderNames.Baggage, key)) { - if ((_bits & 0x1000000000L) != 0) + if ((_bits & 0x10000000000000L) != 0) { - value = _headers._IfModifiedSince; + value = _headers._Baggage; return true; } return false; } - if (HeaderNames.TransferEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Trailer.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x80L) != 0) + if ((_bits & 0x40L) != 0) { - value = _headers._TransferEncoding; + value = _headers._Trailer; return true; } return false; } - if (HeaderNames.IfModifiedSince.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Upgrade.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x1000000000L) != 0) + if ((_bits & 0x100L) != 0) { - value = _headers._IfModifiedSince; + value = _headers._Upgrade; return true; } return false; } - break; - } - case 19: - { - if (ReferenceEquals(HeaderNames.IfUnmodifiedSince, key)) + if (HeaderNames.Warning.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x8000000000L) != 0) + if ((_bits & 0x400L) != 0) { - value = _headers._IfUnmodifiedSince; + value = _headers._Warning; return true; } return false; } - if (ReferenceEquals(HeaderNames.ProxyAuthorization, key)) + if (HeaderNames.Expires.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x20000000000L) != 0) + if ((_bits & 0x40000L) != 0) { - value = _headers._ProxyAuthorization; + value = _headers._Expires; return true; } return false; } - if (ReferenceEquals(HeaderNames.CorrelationContext, key)) + if (HeaderNames.Method.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x2000000000000L) != 0) + if ((_bits & 0x200000L) != 0) { - value = _headers._CorrelationContext; + value = _headers._Method; return true; } return false; } - - if (HeaderNames.IfUnmodifiedSince.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Scheme.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x8000000000L) != 0) + if ((_bits & 0x800000L) != 0) { - value = _headers._IfUnmodifiedSince; + value = _headers._Scheme; return true; } return false; } - if (HeaderNames.ProxyAuthorization.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Referer.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x20000000000L) != 0) + if ((_bits & 0x40000000000L) != 0) { - value = _headers._ProxyAuthorization; + value = _headers._Referer; return true; } return false; } - if (HeaderNames.CorrelationContext.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Baggage.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x2000000000000L) != 0) + if ((_bits & 0x10000000000000L) != 0) { - value = _headers._CorrelationContext; + value = _headers._Baggage; return true; } return false; } break; } - case 20: + case 8: { - if (ReferenceEquals(HeaderNames.GrpcAcceptEncoding, key)) + if (ReferenceEquals(HeaderNames.IfMatch, key)) { - if ((_bits & 0x100000000L) != 0) + if ((_bits & 0x800000000L) != 0) { - value = _headers._GrpcAcceptEncoding; + value = _headers._IfMatch; return true; } return false; } - - if (HeaderNames.GrpcAcceptEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.IfRange, key)) { - if ((_bits & 0x100000000L) != 0) + if ((_bits & 0x4000000000L) != 0) { - value = _headers._GrpcAcceptEncoding; + value = _headers._IfRange; return true; } return false; } - break; - } - case 25: - { - if (ReferenceEquals(HeaderNames.UpgradeInsecureRequests, key)) + + if (HeaderNames.IfMatch.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x800000000000L) != 0) + if ((_bits & 0x800000000L) != 0) { - value = _headers._UpgradeInsecureRequests; + value = _headers._IfMatch; return true; } return false; } - - if (HeaderNames.UpgradeInsecureRequests.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.IfRange.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x800000000000L) != 0) + if ((_bits & 0x4000000000L) != 0) { - value = _headers._UpgradeInsecureRequests; + value = _headers._IfRange; return true; } return false; } break; } - case 29: + case 9: { - if (ReferenceEquals(HeaderNames.AccessControlRequestMethod, key)) + if (ReferenceEquals(HeaderNames.Translate, key)) { - if ((_bits & 0x40000000000000L) != 0) + if ((_bits & 0x200000000000L) != 0) { - value = _headers._AccessControlRequestMethod; + value = _headers._Translate; return true; } return false; } - if (HeaderNames.AccessControlRequestMethod.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Translate.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x40000000000000L) != 0) + if ((_bits & 0x200000000000L) != 0) { - value = _headers._AccessControlRequestMethod; + value = _headers._Translate; return true; } return false; } break; } - case 30: + case 10: { - if (ReferenceEquals(HeaderNames.AccessControlRequestHeaders, key)) + if (ReferenceEquals(HeaderNames.Connection, key)) { - if ((_bits & 0x80000000000000L) != 0) + if ((_bits & 0x2L) != 0) { - value = _headers._AccessControlRequestHeaders; + value = _headers._Connection; return true; } return false; } - - if (HeaderNames.AccessControlRequestHeaders.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.UserAgent, key)) { - if ((_bits & 0x80000000000000L) != 0) + if ((_bits & 0x400000000000L) != 0) { - value = _headers._AccessControlRequestHeaders; + value = _headers._UserAgent; return true; } return false; } - break; - } - } - - return TryGetUnknown(key, ref value); - } - - protected override void SetValueFast(string key, StringValues value) - { - switch (key.Length) - { - case 2: - { - if (ReferenceEquals(HeaderNames.TE, key)) + if (ReferenceEquals(HeaderNames.KeepAlive, key)) { - _bits |= 0x100000000000L; - _headers._TE = value; - return; + if ((_bits & 0x10L) != 0) + { + value = _headers._KeepAlive; + return true; + } + return false; } - - if (HeaderNames.TE.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.Authority, key)) { - _bits |= 0x100000000000L; - _headers._TE = value; - return; + if ((_bits & 0x100000L) != 0) + { + value = _headers._Authority; + return true; + } + return false; } - break; - } - case 3: - { - if (ReferenceEquals(HeaderNames.Via, key)) + if (ReferenceEquals(HeaderNames.RequestId, key)) { - _bits |= 0x200L; - _headers._Via = value; - return; + if ((_bits & 0x1000000000000L) != 0) + { + value = _headers._RequestId; + return true; + } + return false; } - - if (HeaderNames.Via.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.TraceState, key)) { - _bits |= 0x200L; - _headers._Via = value; - return; + if ((_bits & 0x8000000000000L) != 0) + { + value = _headers._TraceState; + return true; + } + return false; } - break; - } - case 4: - { - if (ReferenceEquals(HeaderNames.Host, key)) + + if (HeaderNames.Connection.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x400000000L; - _headers._Host = value; - return; + if ((_bits & 0x2L) != 0) + { + value = _headers._Connection; + return true; + } + return false; } - if (ReferenceEquals(HeaderNames.Date, key)) + if (HeaderNames.UserAgent.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x4L; - _headers._Date = value; - return; + if ((_bits & 0x400000000000L) != 0) + { + value = _headers._UserAgent; + return true; + } + return false; } - if (ReferenceEquals(HeaderNames.From, key)) + if (HeaderNames.KeepAlive.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x80000000L; - _headers._From = value; - return; + if ((_bits & 0x10L) != 0) + { + value = _headers._KeepAlive; + return true; + } + return false; } - - if (HeaderNames.Host.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Authority.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x400000000L; - _headers._Host = value; - return; + if ((_bits & 0x100000L) != 0) + { + value = _headers._Authority; + return true; + } + return false; } - if (HeaderNames.Date.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.RequestId.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x4L; - _headers._Date = value; - return; + if ((_bits & 0x1000000000000L) != 0) + { + value = _headers._RequestId; + return true; + } + return false; } - if (HeaderNames.From.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.TraceState.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x80000000L; - _headers._From = value; - return; + if ((_bits & 0x8000000000000L) != 0) + { + value = _headers._TraceState; + return true; + } + return false; } break; } - case 5: + case 11: { - if (ReferenceEquals(HeaderNames.Allow, key)) - { - _bits |= 0x800L; - _headers._Allow = value; - return; - } - if (ReferenceEquals(HeaderNames.Path, key)) + if (ReferenceEquals(HeaderNames.ContentMD5, key)) { - _bits |= 0x400000L; - _headers._Path = value; - return; + if ((_bits & 0x10000L) != 0) + { + value = _headers._ContentMD5; + return true; + } + return false; } - if (ReferenceEquals(HeaderNames.Range, key)) + if (ReferenceEquals(HeaderNames.TraceParent, key)) { - _bits |= 0x80000000000L; - _headers._Range = value; - return; + if ((_bits & 0x4000000000000L) != 0) + { + value = _headers._TraceParent; + return true; + } + return false; } - if (HeaderNames.Allow.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - _bits |= 0x800L; - _headers._Allow = value; - return; - } - if (HeaderNames.Path.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.ContentMD5.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x400000L; - _headers._Path = value; - return; + if ((_bits & 0x10000L) != 0) + { + value = _headers._ContentMD5; + return true; + } + return false; } - if (HeaderNames.Range.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.TraceParent.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x80000000000L; - _headers._Range = value; - return; + if ((_bits & 0x4000000000000L) != 0) + { + value = _headers._TraceParent; + return true; + } + return false; } break; } - case 6: + case 12: { - if (ReferenceEquals(HeaderNames.Accept, key)) + if (ReferenceEquals(HeaderNames.ContentType, key)) { - _bits |= 0x1000000L; - _headers._Accept = value; - return; + if ((_bits & 0x1000L) != 0) + { + value = _headers._ContentType; + return true; + } + return false; } - if (ReferenceEquals(HeaderNames.Pragma, key)) - { - _bits |= 0x20L; - _headers._Pragma = value; - return; - } - if (ReferenceEquals(HeaderNames.Cookie, key)) - { - _bits |= 0x20000000L; - _headers._Cookie = value; - return; - } - if (ReferenceEquals(HeaderNames.Expect, key)) + if (ReferenceEquals(HeaderNames.GrpcTimeout, key)) { - _bits |= 0x40000000L; - _headers._Expect = value; - return; + if ((_bits & 0x200000000L) != 0) + { + value = _headers._GrpcTimeout; + return true; + } + return false; } - if (ReferenceEquals(HeaderNames.Origin, key)) + if (ReferenceEquals(HeaderNames.MaxForwards, key)) { - _bits |= 0x20000000000000L; - _headers._Origin = value; - return; + if ((_bits & 0x10000000000L) != 0) + { + value = _headers._MaxForwards; + return true; + } + return false; } - if (HeaderNames.Accept.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - _bits |= 0x1000000L; - _headers._Accept = value; - return; - } - if (HeaderNames.Pragma.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - _bits |= 0x20L; - _headers._Pragma = value; - return; - } - if (HeaderNames.Cookie.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.ContentType.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x20000000L; - _headers._Cookie = value; - return; + if ((_bits & 0x1000L) != 0) + { + value = _headers._ContentType; + return true; + } + return false; } - if (HeaderNames.Expect.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.GrpcTimeout.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x40000000L; - _headers._Expect = value; - return; + if ((_bits & 0x200000000L) != 0) + { + value = _headers._GrpcTimeout; + return true; + } + return false; } - if (HeaderNames.Origin.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.MaxForwards.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x20000000000000L; - _headers._Origin = value; - return; + if ((_bits & 0x10000000000L) != 0) + { + value = _headers._MaxForwards; + return true; + } + return false; } break; } - case 7: + case 13: { - if (ReferenceEquals(HeaderNames.Trailer, key)) - { - _bits |= 0x40L; - _headers._Trailer = value; - return; - } - if (ReferenceEquals(HeaderNames.Upgrade, key)) - { - _bits |= 0x100L; - _headers._Upgrade = value; - return; - } - if (ReferenceEquals(HeaderNames.Warning, key)) + if (ReferenceEquals(HeaderNames.CacheControl, key)) { - _bits |= 0x400L; - _headers._Warning = value; - return; + if ((_bits & 0x1L) != 0) + { + value = _headers._CacheControl; + return true; + } + return false; } - if (ReferenceEquals(HeaderNames.Expires, key)) + if (ReferenceEquals(HeaderNames.GrpcEncoding, key)) { - _bits |= 0x40000L; - _headers._Expires = value; - return; + if ((_bits & 0x8L) != 0) + { + value = _headers._GrpcEncoding; + return true; + } + return false; } - if (ReferenceEquals(HeaderNames.Method, key)) + if (ReferenceEquals(HeaderNames.ContentRange, key)) { - _bits |= 0x200000L; - _headers._Method = value; - return; + if ((_bits & 0x20000L) != 0) + { + value = _headers._ContentRange; + return true; + } + return false; } - if (ReferenceEquals(HeaderNames.Scheme, key)) + if (ReferenceEquals(HeaderNames.LastModified, key)) { - _bits |= 0x800000L; - _headers._Scheme = value; - return; + if ((_bits & 0x80000L) != 0) + { + value = _headers._LastModified; + return true; + } + return false; } - if (ReferenceEquals(HeaderNames.Referer, key)) + if (ReferenceEquals(HeaderNames.Authorization, key)) { - _bits |= 0x40000000000L; - _headers._Referer = value; - return; + if ((_bits & 0x10000000L) != 0) + { + value = _headers._Authorization; + return true; + } + return false; } - if (ReferenceEquals(HeaderNames.Baggage, key)) + if (ReferenceEquals(HeaderNames.IfNoneMatch, key)) { - _bits |= 0x10000000000000L; - _headers._Baggage = value; - return; + if ((_bits & 0x2000000000L) != 0) + { + value = _headers._IfNoneMatch; + return true; + } + return false; } - if (HeaderNames.Trailer.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - _bits |= 0x40L; - _headers._Trailer = value; - return; - } - if (HeaderNames.Upgrade.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - _bits |= 0x100L; - _headers._Upgrade = value; - return; - } - if (HeaderNames.Warning.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.CacheControl.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x400L; - _headers._Warning = value; - return; + if ((_bits & 0x1L) != 0) + { + value = _headers._CacheControl; + return true; + } + return false; } - if (HeaderNames.Expires.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.GrpcEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x40000L; - _headers._Expires = value; - return; + if ((_bits & 0x8L) != 0) + { + value = _headers._GrpcEncoding; + return true; + } + return false; } - if (HeaderNames.Method.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.ContentRange.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x200000L; - _headers._Method = value; - return; + if ((_bits & 0x20000L) != 0) + { + value = _headers._ContentRange; + return true; + } + return false; } - if (HeaderNames.Scheme.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.LastModified.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x800000L; - _headers._Scheme = value; - return; + if ((_bits & 0x80000L) != 0) + { + value = _headers._LastModified; + return true; + } + return false; } - if (HeaderNames.Referer.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Authorization.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x40000000000L; - _headers._Referer = value; - return; + if ((_bits & 0x10000000L) != 0) + { + value = _headers._Authorization; + return true; + } + return false; } - if (HeaderNames.Baggage.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.IfNoneMatch.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x10000000000000L; - _headers._Baggage = value; - return; + if ((_bits & 0x2000000000L) != 0) + { + value = _headers._IfNoneMatch; + return true; + } + return false; } break; } - case 8: + case 14: { - if (ReferenceEquals(HeaderNames.IfMatch, key)) + if (ReferenceEquals(HeaderNames.AcceptCharset, key)) { - _bits |= 0x800000000L; - _headers._IfMatch = value; - return; + if ((_bits & 0x2000000L) != 0) + { + value = _headers._AcceptCharset; + return true; + } + return false; } - if (ReferenceEquals(HeaderNames.IfRange, key)) + if (ReferenceEquals(HeaderNames.ContentLength, key)) { - _bits |= 0x4000000000L; - _headers._IfRange = value; - return; - } - - if (HeaderNames.IfMatch.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - _bits |= 0x800000000L; - _headers._IfMatch = value; - return; - } - if (HeaderNames.IfRange.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - _bits |= 0x4000000000L; - _headers._IfRange = value; - return; + if (_contentLength.HasValue) + { + value = HeaderUtilities.FormatNonNegativeInt64(_contentLength.Value); + return true; + } + return false; } - break; - } - case 9: - { - if (ReferenceEquals(HeaderNames.Translate, key)) + + if (HeaderNames.AcceptCharset.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x200000000000L; - _headers._Translate = value; - return; + if ((_bits & 0x2000000L) != 0) + { + value = _headers._AcceptCharset; + return true; + } + return false; } - - if (HeaderNames.Translate.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.ContentLength.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x200000000000L; - _headers._Translate = value; - return; + if (_contentLength.HasValue) + { + value = HeaderUtilities.FormatNonNegativeInt64(_contentLength.Value); + return true; + } + return false; } break; } - case 10: + case 15: { - if (ReferenceEquals(HeaderNames.Connection, key)) - { - _bits |= 0x2L; - _headers._Connection = value; - return; - } - if (ReferenceEquals(HeaderNames.UserAgent, key)) - { - _bits |= 0x400000000000L; - _headers._UserAgent = value; - return; - } - if (ReferenceEquals(HeaderNames.KeepAlive, key)) + if (ReferenceEquals(HeaderNames.AcceptEncoding, key)) { - _bits |= 0x10L; - _headers._KeepAlive = value; - return; + if ((_bits & 0x4000000L) != 0) + { + value = _headers._AcceptEncoding; + return true; + } + return false; } - if (ReferenceEquals(HeaderNames.Authority, key)) + if (ReferenceEquals(HeaderNames.AcceptLanguage, key)) { - _bits |= 0x100000L; - _headers._Authority = value; - return; + if ((_bits & 0x8000000L) != 0) + { + value = _headers._AcceptLanguage; + return true; + } + return false; } - if (ReferenceEquals(HeaderNames.RequestId, key)) + + if (HeaderNames.AcceptEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x1000000000000L; - _headers._RequestId = value; - return; + if ((_bits & 0x4000000L) != 0) + { + value = _headers._AcceptEncoding; + return true; + } + return false; } - if (ReferenceEquals(HeaderNames.TraceState, key)) + if (HeaderNames.AcceptLanguage.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x8000000000000L; - _headers._TraceState = value; - return; + if ((_bits & 0x8000000L) != 0) + { + value = _headers._AcceptLanguage; + return true; + } + return false; } - - if (HeaderNames.Connection.Equals(key, StringComparison.OrdinalIgnoreCase)) + break; + } + case 16: + { + if (ReferenceEquals(HeaderNames.ContentEncoding, key)) { - _bits |= 0x2L; - _headers._Connection = value; - return; + if ((_bits & 0x2000L) != 0) + { + value = _headers._ContentEncoding; + return true; + } + return false; } - if (HeaderNames.UserAgent.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.ContentLanguage, key)) { - _bits |= 0x400000000000L; - _headers._UserAgent = value; - return; + if ((_bits & 0x4000L) != 0) + { + value = _headers._ContentLanguage; + return true; + } + return false; } - if (HeaderNames.KeepAlive.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.ContentLocation, key)) { - _bits |= 0x10L; - _headers._KeepAlive = value; - return; + if ((_bits & 0x8000L) != 0) + { + value = _headers._ContentLocation; + return true; + } + return false; } - if (HeaderNames.Authority.Equals(key, StringComparison.OrdinalIgnoreCase)) + + if (HeaderNames.ContentEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x100000L; - _headers._Authority = value; - return; + if ((_bits & 0x2000L) != 0) + { + value = _headers._ContentEncoding; + return true; + } + return false; } - if (HeaderNames.RequestId.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.ContentLanguage.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x1000000000000L; - _headers._RequestId = value; - return; + if ((_bits & 0x4000L) != 0) + { + value = _headers._ContentLanguage; + return true; + } + return false; } - if (HeaderNames.TraceState.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.ContentLocation.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x8000000000000L; - _headers._TraceState = value; - return; + if ((_bits & 0x8000L) != 0) + { + value = _headers._ContentLocation; + return true; + } + return false; } break; } - case 11: + case 17: { - if (ReferenceEquals(HeaderNames.ContentMD5, key)) + if (ReferenceEquals(HeaderNames.TransferEncoding, key)) { - _bits |= 0x10000L; - _headers._ContentMD5 = value; - return; + if ((_bits & 0x80L) != 0) + { + value = _headers._TransferEncoding; + return true; + } + return false; } - if (ReferenceEquals(HeaderNames.TraceParent, key)) + if (ReferenceEquals(HeaderNames.IfModifiedSince, key)) { - _bits |= 0x4000000000000L; - _headers._TraceParent = value; - return; + if ((_bits & 0x1000000000L) != 0) + { + value = _headers._IfModifiedSince; + return true; + } + return false; } - if (HeaderNames.ContentMD5.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.TransferEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x10000L; - _headers._ContentMD5 = value; - return; + if ((_bits & 0x80L) != 0) + { + value = _headers._TransferEncoding; + return true; + } + return false; } - if (HeaderNames.TraceParent.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.IfModifiedSince.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x4000000000000L; - _headers._TraceParent = value; - return; + if ((_bits & 0x1000000000L) != 0) + { + value = _headers._IfModifiedSince; + return true; + } + return false; } break; } - case 12: + case 19: { - if (ReferenceEquals(HeaderNames.ContentType, key)) - { - _bits |= 0x1000L; - _headers._ContentType = value; - return; - } - if (ReferenceEquals(HeaderNames.GrpcTimeout, key)) + if (ReferenceEquals(HeaderNames.IfUnmodifiedSince, key)) { - _bits |= 0x200000000L; - _headers._GrpcTimeout = value; - return; + if ((_bits & 0x8000000000L) != 0) + { + value = _headers._IfUnmodifiedSince; + return true; + } + return false; } - if (ReferenceEquals(HeaderNames.MaxForwards, key)) + if (ReferenceEquals(HeaderNames.ProxyAuthorization, key)) { - _bits |= 0x10000000000L; - _headers._MaxForwards = value; - return; + if ((_bits & 0x20000000000L) != 0) + { + value = _headers._ProxyAuthorization; + return true; + } + return false; } - - if (HeaderNames.ContentType.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.CorrelationContext, key)) { - _bits |= 0x1000L; - _headers._ContentType = value; - return; + if ((_bits & 0x2000000000000L) != 0) + { + value = _headers._CorrelationContext; + return true; + } + return false; } - if (HeaderNames.GrpcTimeout.Equals(key, StringComparison.OrdinalIgnoreCase)) + + if (HeaderNames.IfUnmodifiedSince.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x200000000L; - _headers._GrpcTimeout = value; - return; + if ((_bits & 0x8000000000L) != 0) + { + value = _headers._IfUnmodifiedSince; + return true; + } + return false; } - if (HeaderNames.MaxForwards.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.ProxyAuthorization.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x10000000000L; - _headers._MaxForwards = value; - return; + if ((_bits & 0x20000000000L) != 0) + { + value = _headers._ProxyAuthorization; + return true; + } + return false; + } + if (HeaderNames.CorrelationContext.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x2000000000000L) != 0) + { + value = _headers._CorrelationContext; + return true; + } + return false; } break; } - case 13: + case 20: { - if (ReferenceEquals(HeaderNames.CacheControl, key)) + if (ReferenceEquals(HeaderNames.GrpcAcceptEncoding, key)) { - _bits |= 0x1L; - _headers._CacheControl = value; - return; + if ((_bits & 0x100000000L) != 0) + { + value = _headers._GrpcAcceptEncoding; + return true; + } + return false; } - if (ReferenceEquals(HeaderNames.GrpcEncoding, key)) + + if (HeaderNames.GrpcAcceptEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x8L; - _headers._GrpcEncoding = value; - return; + if ((_bits & 0x100000000L) != 0) + { + value = _headers._GrpcAcceptEncoding; + return true; + } + return false; } - if (ReferenceEquals(HeaderNames.ContentRange, key)) + break; + } + case 25: + { + if (ReferenceEquals(HeaderNames.UpgradeInsecureRequests, key)) { - _bits |= 0x20000L; - _headers._ContentRange = value; - return; + if ((_bits & 0x800000000000L) != 0) + { + value = _headers._UpgradeInsecureRequests; + return true; + } + return false; } - if (ReferenceEquals(HeaderNames.LastModified, key)) + + if (HeaderNames.UpgradeInsecureRequests.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x80000L; - _headers._LastModified = value; - return; + if ((_bits & 0x800000000000L) != 0) + { + value = _headers._UpgradeInsecureRequests; + return true; + } + return false; } - if (ReferenceEquals(HeaderNames.Authorization, key)) + break; + } + case 29: + { + if (ReferenceEquals(HeaderNames.AccessControlRequestMethod, key)) { - _bits |= 0x10000000L; - _headers._Authorization = value; - return; + if ((_bits & 0x40000000000000L) != 0) + { + value = _headers._AccessControlRequestMethod; + return true; + } + return false; } - if (ReferenceEquals(HeaderNames.IfNoneMatch, key)) + + if (HeaderNames.AccessControlRequestMethod.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x2000000000L; - _headers._IfNoneMatch = value; - return; + if ((_bits & 0x40000000000000L) != 0) + { + value = _headers._AccessControlRequestMethod; + return true; + } + return false; } - - if (HeaderNames.CacheControl.Equals(key, StringComparison.OrdinalIgnoreCase)) + break; + } + case 30: + { + if (ReferenceEquals(HeaderNames.AccessControlRequestHeaders, key)) { - _bits |= 0x1L; - _headers._CacheControl = value; - return; + if ((_bits & 0x80000000000000L) != 0) + { + value = _headers._AccessControlRequestHeaders; + return true; + } + return false; } - if (HeaderNames.GrpcEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) + + if (HeaderNames.AccessControlRequestHeaders.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x8L; - _headers._GrpcEncoding = value; - return; + if ((_bits & 0x80000000000000L) != 0) + { + value = _headers._AccessControlRequestHeaders; + return true; + } + return false; } - if (HeaderNames.ContentRange.Equals(key, StringComparison.OrdinalIgnoreCase)) + break; + } + } + + return TryGetUnknown(key, ref value); + } + + protected override void SetValueFast(string key, StringValues value) + { + switch (key.Length) + { + case 2: + { + if (ReferenceEquals(HeaderNames.TE, key)) { - _bits |= 0x20000L; - _headers._ContentRange = value; + _bits |= 0x100000000000L; + _headers._TE = value; return; } - if (HeaderNames.LastModified.Equals(key, StringComparison.OrdinalIgnoreCase)) + + if (HeaderNames.TE.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x80000L; - _headers._LastModified = value; + _bits |= 0x100000000000L; + _headers._TE = value; return; } - if (HeaderNames.Authorization.Equals(key, StringComparison.OrdinalIgnoreCase)) + break; + } + case 3: + { + if (ReferenceEquals(HeaderNames.Via, key)) { - _bits |= 0x10000000L; - _headers._Authorization = value; + _bits |= 0x200L; + _headers._Via = value; return; } - if (HeaderNames.IfNoneMatch.Equals(key, StringComparison.OrdinalIgnoreCase)) + + if (HeaderNames.Via.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x2000000000L; - _headers._IfNoneMatch = value; + _bits |= 0x200L; + _headers._Via = value; return; } break; } - case 14: + case 4: { - if (ReferenceEquals(HeaderNames.AcceptCharset, key)) + if (ReferenceEquals(HeaderNames.Host, key)) { - _bits |= 0x2000000L; - _headers._AcceptCharset = value; + _bits |= 0x400000000L; + _headers._Host = value; return; } - if (ReferenceEquals(HeaderNames.ContentLength, key)) + if (ReferenceEquals(HeaderNames.Date, key)) { - _contentLength = ParseContentLength(value.ToString()); + _bits |= 0x4L; + _headers._Date = value; + return; + } + if (ReferenceEquals(HeaderNames.From, key)) + { + _bits |= 0x80000000L; + _headers._From = value; return; } - if (HeaderNames.AcceptCharset.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Host.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x2000000L; - _headers._AcceptCharset = value; + _bits |= 0x400000000L; + _headers._Host = value; return; } - if (HeaderNames.ContentLength.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Date.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _contentLength = ParseContentLength(value.ToString()); + _bits |= 0x4L; + _headers._Date = value; + return; + } + if (HeaderNames.From.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + _bits |= 0x80000000L; + _headers._From = value; return; } break; } - case 15: + case 5: { - if (ReferenceEquals(HeaderNames.AcceptEncoding, key)) + if (ReferenceEquals(HeaderNames.Allow, key)) { - _bits |= 0x4000000L; - _headers._AcceptEncoding = value; + _bits |= 0x800L; + _headers._Allow = value; return; } - if (ReferenceEquals(HeaderNames.AcceptLanguage, key)) + if (ReferenceEquals(HeaderNames.Path, key)) { - _bits |= 0x8000000L; - _headers._AcceptLanguage = value; + _bits |= 0x400000L; + _headers._Path = value; return; } - - if (HeaderNames.AcceptEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.Range, key)) { - _bits |= 0x4000000L; - _headers._AcceptEncoding = value; + _bits |= 0x80000000000L; + _headers._Range = value; return; } - if (HeaderNames.AcceptLanguage.Equals(key, StringComparison.OrdinalIgnoreCase)) + + if (HeaderNames.Allow.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x8000000L; - _headers._AcceptLanguage = value; + _bits |= 0x800L; + _headers._Allow = value; return; } - break; - } - case 16: + if (HeaderNames.Path.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + _bits |= 0x400000L; + _headers._Path = value; + return; + } + if (HeaderNames.Range.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + _bits |= 0x80000000000L; + _headers._Range = value; + return; + } + break; + } + case 6: { - if (ReferenceEquals(HeaderNames.ContentEncoding, key)) + if (ReferenceEquals(HeaderNames.Accept, key)) { - _bits |= 0x2000L; - _headers._ContentEncoding = value; + _bits |= 0x1000000L; + _headers._Accept = value; return; } - if (ReferenceEquals(HeaderNames.ContentLanguage, key)) + if (ReferenceEquals(HeaderNames.Pragma, key)) { - _bits |= 0x4000L; - _headers._ContentLanguage = value; + _bits |= 0x20L; + _headers._Pragma = value; return; } - if (ReferenceEquals(HeaderNames.ContentLocation, key)) + if (ReferenceEquals(HeaderNames.Cookie, key)) { - _bits |= 0x8000L; - _headers._ContentLocation = value; + _bits |= 0x20000000L; + _headers._Cookie = value; + return; + } + if (ReferenceEquals(HeaderNames.Expect, key)) + { + _bits |= 0x40000000L; + _headers._Expect = value; + return; + } + if (ReferenceEquals(HeaderNames.Origin, key)) + { + _bits |= 0x20000000000000L; + _headers._Origin = value; return; } - if (HeaderNames.ContentEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Accept.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x2000L; - _headers._ContentEncoding = value; + _bits |= 0x1000000L; + _headers._Accept = value; return; } - if (HeaderNames.ContentLanguage.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Pragma.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x4000L; - _headers._ContentLanguage = value; + _bits |= 0x20L; + _headers._Pragma = value; return; } - if (HeaderNames.ContentLocation.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Cookie.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x8000L; - _headers._ContentLocation = value; + _bits |= 0x20000000L; + _headers._Cookie = value; + return; + } + if (HeaderNames.Expect.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + _bits |= 0x40000000L; + _headers._Expect = value; + return; + } + if (HeaderNames.Origin.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + _bits |= 0x20000000000000L; + _headers._Origin = value; return; } break; } - case 17: + case 7: { - if (ReferenceEquals(HeaderNames.TransferEncoding, key)) + if (ReferenceEquals(HeaderNames.Trailer, key)) { - _bits |= 0x80L; - _headers._TransferEncoding = value; + _bits |= 0x40L; + _headers._Trailer = value; return; } - if (ReferenceEquals(HeaderNames.IfModifiedSince, key)) + if (ReferenceEquals(HeaderNames.Upgrade, key)) { - _bits |= 0x1000000000L; - _headers._IfModifiedSince = value; + _bits |= 0x100L; + _headers._Upgrade = value; return; } - - if (HeaderNames.TransferEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.Warning, key)) { - _bits |= 0x80L; - _headers._TransferEncoding = value; + _bits |= 0x400L; + _headers._Warning = value; return; } - if (HeaderNames.IfModifiedSince.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.Expires, key)) { - _bits |= 0x1000000000L; - _headers._IfModifiedSince = value; + _bits |= 0x40000L; + _headers._Expires = value; return; } - break; - } - case 19: - { - if (ReferenceEquals(HeaderNames.IfUnmodifiedSince, key)) + if (ReferenceEquals(HeaderNames.Method, key)) { - _bits |= 0x8000000000L; - _headers._IfUnmodifiedSince = value; + _bits |= 0x200000L; + _headers._Method = value; return; } - if (ReferenceEquals(HeaderNames.ProxyAuthorization, key)) + if (ReferenceEquals(HeaderNames.Scheme, key)) { - _bits |= 0x20000000000L; - _headers._ProxyAuthorization = value; + _bits |= 0x800000L; + _headers._Scheme = value; return; } - if (ReferenceEquals(HeaderNames.CorrelationContext, key)) + if (ReferenceEquals(HeaderNames.Referer, key)) { - _bits |= 0x2000000000000L; - _headers._CorrelationContext = value; + _bits |= 0x40000000000L; + _headers._Referer = value; + return; + } + if (ReferenceEquals(HeaderNames.Baggage, key)) + { + _bits |= 0x10000000000000L; + _headers._Baggage = value; return; } - if (HeaderNames.IfUnmodifiedSince.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Trailer.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x8000000000L; - _headers._IfUnmodifiedSince = value; + _bits |= 0x40L; + _headers._Trailer = value; return; } - if (HeaderNames.ProxyAuthorization.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Upgrade.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x20000000000L; - _headers._ProxyAuthorization = value; + _bits |= 0x100L; + _headers._Upgrade = value; return; } - if (HeaderNames.CorrelationContext.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Warning.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x2000000000000L; - _headers._CorrelationContext = value; + _bits |= 0x400L; + _headers._Warning = value; return; } - break; - } - case 20: - { - if (ReferenceEquals(HeaderNames.GrpcAcceptEncoding, key)) + if (HeaderNames.Expires.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x100000000L; - _headers._GrpcAcceptEncoding = value; + _bits |= 0x40000L; + _headers._Expires = value; return; } - - if (HeaderNames.GrpcAcceptEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Method.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x100000000L; - _headers._GrpcAcceptEncoding = value; + _bits |= 0x200000L; + _headers._Method = value; return; } - break; - } - case 25: - { - if (ReferenceEquals(HeaderNames.UpgradeInsecureRequests, key)) + if (HeaderNames.Scheme.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x800000000000L; - _headers._UpgradeInsecureRequests = value; + _bits |= 0x800000L; + _headers._Scheme = value; return; } - - if (HeaderNames.UpgradeInsecureRequests.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Referer.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x800000000000L; - _headers._UpgradeInsecureRequests = value; + _bits |= 0x40000000000L; + _headers._Referer = value; + return; + } + if (HeaderNames.Baggage.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + _bits |= 0x10000000000000L; + _headers._Baggage = value; return; } break; } - case 29: + case 8: { - if (ReferenceEquals(HeaderNames.AccessControlRequestMethod, key)) + if (ReferenceEquals(HeaderNames.IfMatch, key)) { - _bits |= 0x40000000000000L; - _headers._AccessControlRequestMethod = value; + _bits |= 0x800000000L; + _headers._IfMatch = value; + return; + } + if (ReferenceEquals(HeaderNames.IfRange, key)) + { + _bits |= 0x4000000000L; + _headers._IfRange = value; return; } - if (HeaderNames.AccessControlRequestMethod.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.IfMatch.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x40000000000000L; - _headers._AccessControlRequestMethod = value; + _bits |= 0x800000000L; + _headers._IfMatch = value; + return; + } + if (HeaderNames.IfRange.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + _bits |= 0x4000000000L; + _headers._IfRange = value; return; } break; } - case 30: + case 9: { - if (ReferenceEquals(HeaderNames.AccessControlRequestHeaders, key)) + if (ReferenceEquals(HeaderNames.Translate, key)) { - _bits |= 0x80000000000000L; - _headers._AccessControlRequestHeaders = value; + _bits |= 0x200000000000L; + _headers._Translate = value; return; } - if (HeaderNames.AccessControlRequestHeaders.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Translate.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x80000000000000L; - _headers._AccessControlRequestHeaders = value; + _bits |= 0x200000000000L; + _headers._Translate = value; return; } break; } - } - - SetValueUnknown(key, value); - } - - protected override bool AddValueFast(string key, StringValues value) - { - switch (key.Length) - { - case 2: + case 10: { - if (ReferenceEquals(HeaderNames.TE, key)) + if (ReferenceEquals(HeaderNames.Connection, key)) { - if ((_bits & 0x100000000000L) == 0) - { - _bits |= 0x100000000000L; - _headers._TE = value; - return true; - } - return false; + _bits |= 0x2L; + _headers._Connection = value; + return; } - - if (HeaderNames.TE.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.UserAgent, key)) { - if ((_bits & 0x100000000000L) == 0) - { - _bits |= 0x100000000000L; - _headers._TE = value; - return true; - } - return false; + _bits |= 0x400000000000L; + _headers._UserAgent = value; + return; } - break; - } - case 3: - { - if (ReferenceEquals(HeaderNames.Via, key)) + if (ReferenceEquals(HeaderNames.KeepAlive, key)) { - if ((_bits & 0x200L) == 0) - { - _bits |= 0x200L; - _headers._Via = value; - return true; - } - return false; + _bits |= 0x10L; + _headers._KeepAlive = value; + return; } - - if (HeaderNames.Via.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.Authority, key)) { - if ((_bits & 0x200L) == 0) - { - _bits |= 0x200L; - _headers._Via = value; - return true; - } - return false; + _bits |= 0x100000L; + _headers._Authority = value; + return; } - break; - } - case 4: - { - if (ReferenceEquals(HeaderNames.Host, key)) + if (ReferenceEquals(HeaderNames.RequestId, key)) { - if ((_bits & 0x400000000L) == 0) - { - _bits |= 0x400000000L; - _headers._Host = value; - return true; - } - return false; + _bits |= 0x1000000000000L; + _headers._RequestId = value; + return; } - if (ReferenceEquals(HeaderNames.Date, key)) + if (ReferenceEquals(HeaderNames.TraceState, key)) { - if ((_bits & 0x4L) == 0) - { - _bits |= 0x4L; - _headers._Date = value; - return true; - } - return false; + _bits |= 0x8000000000000L; + _headers._TraceState = value; + return; } - if (ReferenceEquals(HeaderNames.From, key)) + + if (HeaderNames.Connection.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x80000000L) == 0) - { - _bits |= 0x80000000L; - _headers._From = value; - return true; - } - return false; + _bits |= 0x2L; + _headers._Connection = value; + return; } - - if (HeaderNames.Host.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.UserAgent.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x400000000L) == 0) - { - _bits |= 0x400000000L; - _headers._Host = value; - return true; - } - return false; + _bits |= 0x400000000000L; + _headers._UserAgent = value; + return; } - if (HeaderNames.Date.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.KeepAlive.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x4L) == 0) - { - _bits |= 0x4L; - _headers._Date = value; - return true; - } - return false; + _bits |= 0x10L; + _headers._KeepAlive = value; + return; } - if (HeaderNames.From.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Authority.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x80000000L) == 0) - { - _bits |= 0x80000000L; - _headers._From = value; - return true; - } - return false; + _bits |= 0x100000L; + _headers._Authority = value; + return; } - break; - } - case 5: - { - if (ReferenceEquals(HeaderNames.Allow, key)) + if (HeaderNames.RequestId.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x800L) == 0) - { - _bits |= 0x800L; - _headers._Allow = value; - return true; - } - return false; + _bits |= 0x1000000000000L; + _headers._RequestId = value; + return; } - if (ReferenceEquals(HeaderNames.Path, key)) + if (HeaderNames.TraceState.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x400000L) == 0) - { - _bits |= 0x400000L; - _headers._Path = value; - return true; - } - return false; + _bits |= 0x8000000000000L; + _headers._TraceState = value; + return; } - if (ReferenceEquals(HeaderNames.Range, key)) + break; + } + case 11: + { + if (ReferenceEquals(HeaderNames.ContentMD5, key)) { - if ((_bits & 0x80000000000L) == 0) - { - _bits |= 0x80000000000L; - _headers._Range = value; - return true; - } - return false; + _bits |= 0x10000L; + _headers._ContentMD5 = value; + return; } - - if (HeaderNames.Allow.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.TraceParent, key)) { - if ((_bits & 0x800L) == 0) - { - _bits |= 0x800L; - _headers._Allow = value; - return true; - } - return false; + _bits |= 0x4000000000000L; + _headers._TraceParent = value; + return; } - if (HeaderNames.Path.Equals(key, StringComparison.OrdinalIgnoreCase)) + + if (HeaderNames.ContentMD5.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x400000L) == 0) - { - _bits |= 0x400000L; - _headers._Path = value; - return true; - } - return false; + _bits |= 0x10000L; + _headers._ContentMD5 = value; + return; } - if (HeaderNames.Range.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.TraceParent.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x80000000000L) == 0) - { - _bits |= 0x80000000000L; - _headers._Range = value; - return true; - } - return false; + _bits |= 0x4000000000000L; + _headers._TraceParent = value; + return; } break; } - case 6: + case 12: { - if (ReferenceEquals(HeaderNames.Accept, key)) + if (ReferenceEquals(HeaderNames.ContentType, key)) { - if ((_bits & 0x1000000L) == 0) - { - _bits |= 0x1000000L; - _headers._Accept = value; - return true; - } - return false; + _bits |= 0x1000L; + _headers._ContentType = value; + return; } - if (ReferenceEquals(HeaderNames.Pragma, key)) + if (ReferenceEquals(HeaderNames.GrpcTimeout, key)) { - if ((_bits & 0x20L) == 0) - { - _bits |= 0x20L; - _headers._Pragma = value; - return true; - } - return false; + _bits |= 0x200000000L; + _headers._GrpcTimeout = value; + return; } - if (ReferenceEquals(HeaderNames.Cookie, key)) + if (ReferenceEquals(HeaderNames.MaxForwards, key)) { - if ((_bits & 0x20000000L) == 0) - { - _bits |= 0x20000000L; - _headers._Cookie = value; - return true; - } - return false; + _bits |= 0x10000000000L; + _headers._MaxForwards = value; + return; } - if (ReferenceEquals(HeaderNames.Expect, key)) + + if (HeaderNames.ContentType.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x40000000L) == 0) - { - _bits |= 0x40000000L; - _headers._Expect = value; - return true; - } - return false; + _bits |= 0x1000L; + _headers._ContentType = value; + return; } - if (ReferenceEquals(HeaderNames.Origin, key)) + if (HeaderNames.GrpcTimeout.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x20000000000000L) == 0) - { - _bits |= 0x20000000000000L; - _headers._Origin = value; - return true; - } - return false; + _bits |= 0x200000000L; + _headers._GrpcTimeout = value; + return; } - - if (HeaderNames.Accept.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.MaxForwards.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x1000000L) == 0) - { - _bits |= 0x1000000L; - _headers._Accept = value; - return true; - } - return false; + _bits |= 0x10000000000L; + _headers._MaxForwards = value; + return; } - if (HeaderNames.Pragma.Equals(key, StringComparison.OrdinalIgnoreCase)) + break; + } + case 13: + { + if (ReferenceEquals(HeaderNames.CacheControl, key)) { - if ((_bits & 0x20L) == 0) - { - _bits |= 0x20L; - _headers._Pragma = value; - return true; - } - return false; + _bits |= 0x1L; + _headers._CacheControl = value; + return; } - if (HeaderNames.Cookie.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.GrpcEncoding, key)) { - if ((_bits & 0x20000000L) == 0) - { - _bits |= 0x20000000L; - _headers._Cookie = value; - return true; - } - return false; + _bits |= 0x8L; + _headers._GrpcEncoding = value; + return; } - if (HeaderNames.Expect.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.ContentRange, key)) { - if ((_bits & 0x40000000L) == 0) - { - _bits |= 0x40000000L; - _headers._Expect = value; - return true; - } - return false; + _bits |= 0x20000L; + _headers._ContentRange = value; + return; } - if (HeaderNames.Origin.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.LastModified, key)) { - if ((_bits & 0x20000000000000L) == 0) - { - _bits |= 0x20000000000000L; - _headers._Origin = value; - return true; - } - return false; + _bits |= 0x80000L; + _headers._LastModified = value; + return; } - break; - } - case 7: - { - if (ReferenceEquals(HeaderNames.Trailer, key)) + if (ReferenceEquals(HeaderNames.Authorization, key)) { - if ((_bits & 0x40L) == 0) - { - _bits |= 0x40L; - _headers._Trailer = value; - return true; - } - return false; + _bits |= 0x10000000L; + _headers._Authorization = value; + return; } - if (ReferenceEquals(HeaderNames.Upgrade, key)) + if (ReferenceEquals(HeaderNames.IfNoneMatch, key)) { - if ((_bits & 0x100L) == 0) - { - _bits |= 0x100L; - _headers._Upgrade = value; - return true; - } - return false; + _bits |= 0x2000000000L; + _headers._IfNoneMatch = value; + return; } - if (ReferenceEquals(HeaderNames.Warning, key)) + + if (HeaderNames.CacheControl.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x400L) == 0) - { - _bits |= 0x400L; - _headers._Warning = value; - return true; - } - return false; + _bits |= 0x1L; + _headers._CacheControl = value; + return; } - if (ReferenceEquals(HeaderNames.Expires, key)) + if (HeaderNames.GrpcEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x40000L) == 0) - { - _bits |= 0x40000L; - _headers._Expires = value; - return true; - } - return false; + _bits |= 0x8L; + _headers._GrpcEncoding = value; + return; } - if (ReferenceEquals(HeaderNames.Method, key)) + if (HeaderNames.ContentRange.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x200000L) == 0) - { - _bits |= 0x200000L; - _headers._Method = value; - return true; - } - return false; + _bits |= 0x20000L; + _headers._ContentRange = value; + return; } - if (ReferenceEquals(HeaderNames.Scheme, key)) + if (HeaderNames.LastModified.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x800000L) == 0) - { - _bits |= 0x800000L; - _headers._Scheme = value; - return true; - } - return false; + _bits |= 0x80000L; + _headers._LastModified = value; + return; } - if (ReferenceEquals(HeaderNames.Referer, key)) + if (HeaderNames.Authorization.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x40000000000L) == 0) - { - _bits |= 0x40000000000L; - _headers._Referer = value; - return true; - } - return false; + _bits |= 0x10000000L; + _headers._Authorization = value; + return; } - if (ReferenceEquals(HeaderNames.Baggage, key)) + if (HeaderNames.IfNoneMatch.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x10000000000000L) == 0) - { - _bits |= 0x10000000000000L; - _headers._Baggage = value; - return true; - } - return false; + _bits |= 0x2000000000L; + _headers._IfNoneMatch = value; + return; } - - if (HeaderNames.Trailer.Equals(key, StringComparison.OrdinalIgnoreCase)) + break; + } + case 14: + { + if (ReferenceEquals(HeaderNames.AcceptCharset, key)) { - if ((_bits & 0x40L) == 0) - { - _bits |= 0x40L; - _headers._Trailer = value; - return true; - } - return false; + _bits |= 0x2000000L; + _headers._AcceptCharset = value; + return; } - if (HeaderNames.Upgrade.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.ContentLength, key)) { - if ((_bits & 0x100L) == 0) - { - _bits |= 0x100L; - _headers._Upgrade = value; - return true; - } - return false; + _contentLength = ParseContentLength(value.ToString()); + return; } - if (HeaderNames.Warning.Equals(key, StringComparison.OrdinalIgnoreCase)) + + if (HeaderNames.AcceptCharset.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x400L) == 0) - { - _bits |= 0x400L; - _headers._Warning = value; - return true; - } - return false; + _bits |= 0x2000000L; + _headers._AcceptCharset = value; + return; } - if (HeaderNames.Expires.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.ContentLength.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x40000L) == 0) - { - _bits |= 0x40000L; - _headers._Expires = value; - return true; - } - return false; + _contentLength = ParseContentLength(value.ToString()); + return; } - if (HeaderNames.Method.Equals(key, StringComparison.OrdinalIgnoreCase)) + break; + } + case 15: + { + if (ReferenceEquals(HeaderNames.AcceptEncoding, key)) { - if ((_bits & 0x200000L) == 0) - { - _bits |= 0x200000L; - _headers._Method = value; - return true; - } - return false; + _bits |= 0x4000000L; + _headers._AcceptEncoding = value; + return; } - if (HeaderNames.Scheme.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.AcceptLanguage, key)) { - if ((_bits & 0x800000L) == 0) - { - _bits |= 0x800000L; - _headers._Scheme = value; - return true; - } - return false; + _bits |= 0x8000000L; + _headers._AcceptLanguage = value; + return; } - if (HeaderNames.Referer.Equals(key, StringComparison.OrdinalIgnoreCase)) + + if (HeaderNames.AcceptEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x40000000000L) == 0) - { - _bits |= 0x40000000000L; - _headers._Referer = value; - return true; - } - return false; + _bits |= 0x4000000L; + _headers._AcceptEncoding = value; + return; } - if (HeaderNames.Baggage.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.AcceptLanguage.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x10000000000000L) == 0) - { - _bits |= 0x10000000000000L; - _headers._Baggage = value; - return true; - } - return false; + _bits |= 0x8000000L; + _headers._AcceptLanguage = value; + return; } break; } - case 8: + case 16: { - if (ReferenceEquals(HeaderNames.IfMatch, key)) + if (ReferenceEquals(HeaderNames.ContentEncoding, key)) { - if ((_bits & 0x800000000L) == 0) - { - _bits |= 0x800000000L; - _headers._IfMatch = value; - return true; - } - return false; + _bits |= 0x2000L; + _headers._ContentEncoding = value; + return; } - if (ReferenceEquals(HeaderNames.IfRange, key)) + if (ReferenceEquals(HeaderNames.ContentLanguage, key)) { - if ((_bits & 0x4000000000L) == 0) - { - _bits |= 0x4000000000L; - _headers._IfRange = value; - return true; - } - return false; + _bits |= 0x4000L; + _headers._ContentLanguage = value; + return; } - - if (HeaderNames.IfMatch.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.ContentLocation, key)) { - if ((_bits & 0x800000000L) == 0) - { - _bits |= 0x800000000L; - _headers._IfMatch = value; - return true; - } - return false; + _bits |= 0x8000L; + _headers._ContentLocation = value; + return; } - if (HeaderNames.IfRange.Equals(key, StringComparison.OrdinalIgnoreCase)) + + if (HeaderNames.ContentEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x4000000000L) == 0) - { - _bits |= 0x4000000000L; - _headers._IfRange = value; - return true; - } - return false; + _bits |= 0x2000L; + _headers._ContentEncoding = value; + return; } - break; - } - case 9: - { - if (ReferenceEquals(HeaderNames.Translate, key)) + if (HeaderNames.ContentLanguage.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x200000000000L) == 0) - { - _bits |= 0x200000000000L; - _headers._Translate = value; - return true; - } - return false; + _bits |= 0x4000L; + _headers._ContentLanguage = value; + return; } - - if (HeaderNames.Translate.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.ContentLocation.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x200000000000L) == 0) - { - _bits |= 0x200000000000L; - _headers._Translate = value; - return true; - } - return false; + _bits |= 0x8000L; + _headers._ContentLocation = value; + return; } break; } - case 10: + case 17: { - if (ReferenceEquals(HeaderNames.Connection, key)) - { - if ((_bits & 0x2L) == 0) - { - _bits |= 0x2L; - _headers._Connection = value; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.UserAgent, key)) - { - if ((_bits & 0x400000000000L) == 0) - { - _bits |= 0x400000000000L; - _headers._UserAgent = value; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.KeepAlive, key)) + if (ReferenceEquals(HeaderNames.TransferEncoding, key)) { - if ((_bits & 0x10L) == 0) - { - _bits |= 0x10L; - _headers._KeepAlive = value; - return true; - } - return false; + _bits |= 0x80L; + _headers._TransferEncoding = value; + return; } - if (ReferenceEquals(HeaderNames.Authority, key)) + if (ReferenceEquals(HeaderNames.IfModifiedSince, key)) { - if ((_bits & 0x100000L) == 0) - { - _bits |= 0x100000L; - _headers._Authority = value; - return true; - } - return false; + _bits |= 0x1000000000L; + _headers._IfModifiedSince = value; + return; } - if (ReferenceEquals(HeaderNames.RequestId, key)) + + if (HeaderNames.TransferEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x1000000000000L) == 0) - { - _bits |= 0x1000000000000L; - _headers._RequestId = value; - return true; - } - return false; + _bits |= 0x80L; + _headers._TransferEncoding = value; + return; } - if (ReferenceEquals(HeaderNames.TraceState, key)) + if (HeaderNames.IfModifiedSince.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x8000000000000L) == 0) - { - _bits |= 0x8000000000000L; - _headers._TraceState = value; - return true; - } - return false; + _bits |= 0x1000000000L; + _headers._IfModifiedSince = value; + return; } - - if (HeaderNames.Connection.Equals(key, StringComparison.OrdinalIgnoreCase)) + break; + } + case 19: + { + if (ReferenceEquals(HeaderNames.IfUnmodifiedSince, key)) { - if ((_bits & 0x2L) == 0) - { - _bits |= 0x2L; - _headers._Connection = value; - return true; - } - return false; + _bits |= 0x8000000000L; + _headers._IfUnmodifiedSince = value; + return; } - if (HeaderNames.UserAgent.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.ProxyAuthorization, key)) { - if ((_bits & 0x400000000000L) == 0) - { - _bits |= 0x400000000000L; - _headers._UserAgent = value; - return true; - } - return false; + _bits |= 0x20000000000L; + _headers._ProxyAuthorization = value; + return; } - if (HeaderNames.KeepAlive.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.CorrelationContext, key)) { - if ((_bits & 0x10L) == 0) - { - _bits |= 0x10L; - _headers._KeepAlive = value; - return true; - } - return false; + _bits |= 0x2000000000000L; + _headers._CorrelationContext = value; + return; } - if (HeaderNames.Authority.Equals(key, StringComparison.OrdinalIgnoreCase)) + + if (HeaderNames.IfUnmodifiedSince.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x100000L) == 0) - { - _bits |= 0x100000L; - _headers._Authority = value; - return true; - } - return false; + _bits |= 0x8000000000L; + _headers._IfUnmodifiedSince = value; + return; } - if (HeaderNames.RequestId.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.ProxyAuthorization.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x1000000000000L) == 0) - { - _bits |= 0x1000000000000L; - _headers._RequestId = value; - return true; - } - return false; + _bits |= 0x20000000000L; + _headers._ProxyAuthorization = value; + return; } - if (HeaderNames.TraceState.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.CorrelationContext.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x8000000000000L) == 0) - { - _bits |= 0x8000000000000L; - _headers._TraceState = value; - return true; - } - return false; + _bits |= 0x2000000000000L; + _headers._CorrelationContext = value; + return; } break; } - case 11: + case 20: { - if (ReferenceEquals(HeaderNames.ContentMD5, key)) + if (ReferenceEquals(HeaderNames.GrpcAcceptEncoding, key)) { - if ((_bits & 0x10000L) == 0) - { - _bits |= 0x10000L; - _headers._ContentMD5 = value; + _bits |= 0x100000000L; + _headers._GrpcAcceptEncoding = value; + return; + } + + if (HeaderNames.GrpcAcceptEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + _bits |= 0x100000000L; + _headers._GrpcAcceptEncoding = value; + return; + } + break; + } + case 25: + { + if (ReferenceEquals(HeaderNames.UpgradeInsecureRequests, key)) + { + _bits |= 0x800000000000L; + _headers._UpgradeInsecureRequests = value; + return; + } + + if (HeaderNames.UpgradeInsecureRequests.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + _bits |= 0x800000000000L; + _headers._UpgradeInsecureRequests = value; + return; + } + break; + } + case 29: + { + if (ReferenceEquals(HeaderNames.AccessControlRequestMethod, key)) + { + _bits |= 0x40000000000000L; + _headers._AccessControlRequestMethod = value; + return; + } + + if (HeaderNames.AccessControlRequestMethod.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + _bits |= 0x40000000000000L; + _headers._AccessControlRequestMethod = value; + return; + } + break; + } + case 30: + { + if (ReferenceEquals(HeaderNames.AccessControlRequestHeaders, key)) + { + _bits |= 0x80000000000000L; + _headers._AccessControlRequestHeaders = value; + return; + } + + if (HeaderNames.AccessControlRequestHeaders.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + _bits |= 0x80000000000000L; + _headers._AccessControlRequestHeaders = value; + return; + } + break; + } + } + + SetValueUnknown(key, value); + } + + protected override bool AddValueFast(string key, StringValues value) + { + switch (key.Length) + { + case 2: + { + if (ReferenceEquals(HeaderNames.TE, key)) + { + if ((_bits & 0x100000000000L) == 0) + { + _bits |= 0x100000000000L; + _headers._TE = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.TraceParent, key)) + + if (HeaderNames.TE.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x4000000000000L) == 0) + if ((_bits & 0x100000000000L) == 0) { - _bits |= 0x4000000000000L; - _headers._TraceParent = value; + _bits |= 0x100000000000L; + _headers._TE = value; return true; } return false; } - - if (HeaderNames.ContentMD5.Equals(key, StringComparison.OrdinalIgnoreCase)) + break; + } + case 3: + { + if (ReferenceEquals(HeaderNames.Via, key)) { - if ((_bits & 0x10000L) == 0) + if ((_bits & 0x200L) == 0) { - _bits |= 0x10000L; - _headers._ContentMD5 = value; + _bits |= 0x200L; + _headers._Via = value; return true; } return false; } - if (HeaderNames.TraceParent.Equals(key, StringComparison.OrdinalIgnoreCase)) + + if (HeaderNames.Via.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x4000000000000L) == 0) + if ((_bits & 0x200L) == 0) { - _bits |= 0x4000000000000L; - _headers._TraceParent = value; + _bits |= 0x200L; + _headers._Via = value; return true; } return false; } break; } - case 12: + case 4: { - if (ReferenceEquals(HeaderNames.ContentType, key)) + if (ReferenceEquals(HeaderNames.Host, key)) { - if ((_bits & 0x1000L) == 0) + if ((_bits & 0x400000000L) == 0) { - _bits |= 0x1000L; - _headers._ContentType = value; + _bits |= 0x400000000L; + _headers._Host = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.GrpcTimeout, key)) + if (ReferenceEquals(HeaderNames.Date, key)) { - if ((_bits & 0x200000000L) == 0) + if ((_bits & 0x4L) == 0) { - _bits |= 0x200000000L; - _headers._GrpcTimeout = value; + _bits |= 0x4L; + _headers._Date = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.MaxForwards, key)) + if (ReferenceEquals(HeaderNames.From, key)) { - if ((_bits & 0x10000000000L) == 0) + if ((_bits & 0x80000000L) == 0) { - _bits |= 0x10000000000L; - _headers._MaxForwards = value; + _bits |= 0x80000000L; + _headers._From = value; return true; } return false; } - if (HeaderNames.ContentType.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Host.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x1000L) == 0) + if ((_bits & 0x400000000L) == 0) { - _bits |= 0x1000L; - _headers._ContentType = value; + _bits |= 0x400000000L; + _headers._Host = value; return true; } return false; } - if (HeaderNames.GrpcTimeout.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Date.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x200000000L) == 0) + if ((_bits & 0x4L) == 0) { - _bits |= 0x200000000L; - _headers._GrpcTimeout = value; + _bits |= 0x4L; + _headers._Date = value; return true; } return false; } - if (HeaderNames.MaxForwards.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.From.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x10000000000L) == 0) + if ((_bits & 0x80000000L) == 0) { - _bits |= 0x10000000000L; - _headers._MaxForwards = value; + _bits |= 0x80000000L; + _headers._From = value; return true; } return false; } break; } - case 13: + case 5: { - if (ReferenceEquals(HeaderNames.CacheControl, key)) + if (ReferenceEquals(HeaderNames.Allow, key)) { - if ((_bits & 0x1L) == 0) + if ((_bits & 0x800L) == 0) { - _bits |= 0x1L; - _headers._CacheControl = value; + _bits |= 0x800L; + _headers._Allow = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.GrpcEncoding, key)) + if (ReferenceEquals(HeaderNames.Path, key)) { - if ((_bits & 0x8L) == 0) + if ((_bits & 0x400000L) == 0) { - _bits |= 0x8L; - _headers._GrpcEncoding = value; + _bits |= 0x400000L; + _headers._Path = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.ContentRange, key)) + if (ReferenceEquals(HeaderNames.Range, key)) { - if ((_bits & 0x20000L) == 0) + if ((_bits & 0x80000000000L) == 0) { - _bits |= 0x20000L; - _headers._ContentRange = value; + _bits |= 0x80000000000L; + _headers._Range = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.LastModified, key)) + + if (HeaderNames.Allow.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x80000L) == 0) + if ((_bits & 0x800L) == 0) { - _bits |= 0x80000L; - _headers._LastModified = value; + _bits |= 0x800L; + _headers._Allow = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.Authorization, key)) + if (HeaderNames.Path.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x10000000L) == 0) + if ((_bits & 0x400000L) == 0) { - _bits |= 0x10000000L; - _headers._Authorization = value; + _bits |= 0x400000L; + _headers._Path = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.IfNoneMatch, key)) + if (HeaderNames.Range.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x2000000000L) == 0) + if ((_bits & 0x80000000000L) == 0) { - _bits |= 0x2000000000L; - _headers._IfNoneMatch = value; + _bits |= 0x80000000000L; + _headers._Range = value; return true; } return false; } - - if (HeaderNames.CacheControl.Equals(key, StringComparison.OrdinalIgnoreCase)) + break; + } + case 6: + { + if (ReferenceEquals(HeaderNames.Accept, key)) { - if ((_bits & 0x1L) == 0) + if ((_bits & 0x1000000L) == 0) { - _bits |= 0x1L; - _headers._CacheControl = value; + _bits |= 0x1000000L; + _headers._Accept = value; return true; } return false; } - if (HeaderNames.GrpcEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.Pragma, key)) { - if ((_bits & 0x8L) == 0) + if ((_bits & 0x20L) == 0) { - _bits |= 0x8L; - _headers._GrpcEncoding = value; + _bits |= 0x20L; + _headers._Pragma = value; return true; } return false; } - if (HeaderNames.ContentRange.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.Cookie, key)) { - if ((_bits & 0x20000L) == 0) + if ((_bits & 0x20000000L) == 0) { - _bits |= 0x20000L; - _headers._ContentRange = value; + _bits |= 0x20000000L; + _headers._Cookie = value; return true; } return false; } - if (HeaderNames.LastModified.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.Expect, key)) { - if ((_bits & 0x80000L) == 0) + if ((_bits & 0x40000000L) == 0) { - _bits |= 0x80000L; - _headers._LastModified = value; + _bits |= 0x40000000L; + _headers._Expect = value; return true; } return false; } - if (HeaderNames.Authorization.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.Origin, key)) { - if ((_bits & 0x10000000L) == 0) + if ((_bits & 0x20000000000000L) == 0) { - _bits |= 0x10000000L; - _headers._Authorization = value; + _bits |= 0x20000000000000L; + _headers._Origin = value; return true; } return false; } - if (HeaderNames.IfNoneMatch.Equals(key, StringComparison.OrdinalIgnoreCase)) + + if (HeaderNames.Accept.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x2000000000L) == 0) + if ((_bits & 0x1000000L) == 0) { - _bits |= 0x2000000000L; - _headers._IfNoneMatch = value; + _bits |= 0x1000000L; + _headers._Accept = value; return true; } return false; } - break; - } - case 14: - { - if (ReferenceEquals(HeaderNames.AcceptCharset, key)) + if (HeaderNames.Pragma.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x2000000L) == 0) + if ((_bits & 0x20L) == 0) { - _bits |= 0x2000000L; - _headers._AcceptCharset = value; + _bits |= 0x20L; + _headers._Pragma = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.ContentLength, key)) + if (HeaderNames.Cookie.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if (!_contentLength.HasValue) + if ((_bits & 0x20000000L) == 0) { - _contentLength = ParseContentLength(value); + _bits |= 0x20000000L; + _headers._Cookie = value; return true; } return false; } - - if (HeaderNames.AcceptCharset.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Expect.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x2000000L) == 0) + if ((_bits & 0x40000000L) == 0) { - _bits |= 0x2000000L; - _headers._AcceptCharset = value; + _bits |= 0x40000000L; + _headers._Expect = value; return true; } return false; } - if (HeaderNames.ContentLength.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Origin.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if (!_contentLength.HasValue) + if ((_bits & 0x20000000000000L) == 0) { - _contentLength = ParseContentLength(value); + _bits |= 0x20000000000000L; + _headers._Origin = value; return true; } return false; } break; } - case 15: + case 7: { - if (ReferenceEquals(HeaderNames.AcceptEncoding, key)) + if (ReferenceEquals(HeaderNames.Trailer, key)) { - if ((_bits & 0x4000000L) == 0) + if ((_bits & 0x40L) == 0) { - _bits |= 0x4000000L; - _headers._AcceptEncoding = value; + _bits |= 0x40L; + _headers._Trailer = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.AcceptLanguage, key)) + if (ReferenceEquals(HeaderNames.Upgrade, key)) { - if ((_bits & 0x8000000L) == 0) + if ((_bits & 0x100L) == 0) { - _bits |= 0x8000000L; - _headers._AcceptLanguage = value; + _bits |= 0x100L; + _headers._Upgrade = value; return true; } return false; } - - if (HeaderNames.AcceptEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.Warning, key)) { - if ((_bits & 0x4000000L) == 0) + if ((_bits & 0x400L) == 0) { - _bits |= 0x4000000L; - _headers._AcceptEncoding = value; + _bits |= 0x400L; + _headers._Warning = value; return true; } return false; } - if (HeaderNames.AcceptLanguage.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.Expires, key)) { - if ((_bits & 0x8000000L) == 0) + if ((_bits & 0x40000L) == 0) { - _bits |= 0x8000000L; - _headers._AcceptLanguage = value; + _bits |= 0x40000L; + _headers._Expires = value; return true; } return false; } - break; - } - case 16: - { - if (ReferenceEquals(HeaderNames.ContentEncoding, key)) + if (ReferenceEquals(HeaderNames.Method, key)) { - if ((_bits & 0x2000L) == 0) + if ((_bits & 0x200000L) == 0) { - _bits |= 0x2000L; - _headers._ContentEncoding = value; + _bits |= 0x200000L; + _headers._Method = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.ContentLanguage, key)) + if (ReferenceEquals(HeaderNames.Scheme, key)) { - if ((_bits & 0x4000L) == 0) + if ((_bits & 0x800000L) == 0) { - _bits |= 0x4000L; - _headers._ContentLanguage = value; + _bits |= 0x800000L; + _headers._Scheme = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.ContentLocation, key)) + if (ReferenceEquals(HeaderNames.Referer, key)) { - if ((_bits & 0x8000L) == 0) + if ((_bits & 0x40000000000L) == 0) { - _bits |= 0x8000L; - _headers._ContentLocation = value; + _bits |= 0x40000000000L; + _headers._Referer = value; return true; } return false; } - - if (HeaderNames.ContentEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.Baggage, key)) { - if ((_bits & 0x2000L) == 0) + if ((_bits & 0x10000000000000L) == 0) { - _bits |= 0x2000L; - _headers._ContentEncoding = value; + _bits |= 0x10000000000000L; + _headers._Baggage = value; return true; } return false; } - if (HeaderNames.ContentLanguage.Equals(key, StringComparison.OrdinalIgnoreCase)) + + if (HeaderNames.Trailer.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x4000L) == 0) + if ((_bits & 0x40L) == 0) { - _bits |= 0x4000L; - _headers._ContentLanguage = value; + _bits |= 0x40L; + _headers._Trailer = value; return true; } return false; } - if (HeaderNames.ContentLocation.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Upgrade.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x8000L) == 0) + if ((_bits & 0x100L) == 0) { - _bits |= 0x8000L; - _headers._ContentLocation = value; + _bits |= 0x100L; + _headers._Upgrade = value; return true; } return false; } - break; - } - case 17: - { - if (ReferenceEquals(HeaderNames.TransferEncoding, key)) + if (HeaderNames.Warning.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x80L) == 0) + if ((_bits & 0x400L) == 0) { - _bits |= 0x80L; - _headers._TransferEncoding = value; + _bits |= 0x400L; + _headers._Warning = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.IfModifiedSince, key)) + if (HeaderNames.Expires.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x1000000000L) == 0) + if ((_bits & 0x40000L) == 0) { - _bits |= 0x1000000000L; - _headers._IfModifiedSince = value; + _bits |= 0x40000L; + _headers._Expires = value; return true; } return false; } - - if (HeaderNames.TransferEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Method.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x80L) == 0) + if ((_bits & 0x200000L) == 0) { - _bits |= 0x80L; - _headers._TransferEncoding = value; + _bits |= 0x200000L; + _headers._Method = value; return true; } return false; } - if (HeaderNames.IfModifiedSince.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Scheme.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x1000000000L) == 0) + if ((_bits & 0x800000L) == 0) { - _bits |= 0x1000000000L; - _headers._IfModifiedSince = value; + _bits |= 0x800000L; + _headers._Scheme = value; return true; } return false; } - break; - } - case 19: - { - if (ReferenceEquals(HeaderNames.IfUnmodifiedSince, key)) + if (HeaderNames.Referer.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x8000000000L) == 0) + if ((_bits & 0x40000000000L) == 0) { - _bits |= 0x8000000000L; - _headers._IfUnmodifiedSince = value; + _bits |= 0x40000000000L; + _headers._Referer = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.ProxyAuthorization, key)) + if (HeaderNames.Baggage.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x20000000000L) == 0) + if ((_bits & 0x10000000000000L) == 0) { - _bits |= 0x20000000000L; - _headers._ProxyAuthorization = value; + _bits |= 0x10000000000000L; + _headers._Baggage = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.CorrelationContext, key)) + break; + } + case 8: + { + if (ReferenceEquals(HeaderNames.IfMatch, key)) { - if ((_bits & 0x2000000000000L) == 0) + if ((_bits & 0x800000000L) == 0) { - _bits |= 0x2000000000000L; - _headers._CorrelationContext = value; + _bits |= 0x800000000L; + _headers._IfMatch = value; return true; } return false; } - - if (HeaderNames.IfUnmodifiedSince.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.IfRange, key)) { - if ((_bits & 0x8000000000L) == 0) + if ((_bits & 0x4000000000L) == 0) { - _bits |= 0x8000000000L; - _headers._IfUnmodifiedSince = value; + _bits |= 0x4000000000L; + _headers._IfRange = value; return true; } return false; } - if (HeaderNames.ProxyAuthorization.Equals(key, StringComparison.OrdinalIgnoreCase)) + + if (HeaderNames.IfMatch.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x20000000000L) == 0) + if ((_bits & 0x800000000L) == 0) { - _bits |= 0x20000000000L; - _headers._ProxyAuthorization = value; + _bits |= 0x800000000L; + _headers._IfMatch = value; return true; } return false; } - if (HeaderNames.CorrelationContext.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.IfRange.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x2000000000000L) == 0) + if ((_bits & 0x4000000000L) == 0) { - _bits |= 0x2000000000000L; - _headers._CorrelationContext = value; + _bits |= 0x4000000000L; + _headers._IfRange = value; return true; } return false; } break; } - case 20: + case 9: { - if (ReferenceEquals(HeaderNames.GrpcAcceptEncoding, key)) + if (ReferenceEquals(HeaderNames.Translate, key)) { - if ((_bits & 0x100000000L) == 0) + if ((_bits & 0x200000000000L) == 0) { - _bits |= 0x100000000L; - _headers._GrpcAcceptEncoding = value; + _bits |= 0x200000000000L; + _headers._Translate = value; return true; } return false; } - if (HeaderNames.GrpcAcceptEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Translate.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x100000000L) == 0) + if ((_bits & 0x200000000000L) == 0) { - _bits |= 0x100000000L; - _headers._GrpcAcceptEncoding = value; + _bits |= 0x200000000000L; + _headers._Translate = value; return true; } return false; } break; } - case 25: + case 10: { - if (ReferenceEquals(HeaderNames.UpgradeInsecureRequests, key)) + if (ReferenceEquals(HeaderNames.Connection, key)) { - if ((_bits & 0x800000000000L) == 0) + if ((_bits & 0x2L) == 0) { - _bits |= 0x800000000000L; - _headers._UpgradeInsecureRequests = value; + _bits |= 0x2L; + _headers._Connection = value; return true; } return false; } - - if (HeaderNames.UpgradeInsecureRequests.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.UserAgent, key)) { - if ((_bits & 0x800000000000L) == 0) + if ((_bits & 0x400000000000L) == 0) { - _bits |= 0x800000000000L; - _headers._UpgradeInsecureRequests = value; + _bits |= 0x400000000000L; + _headers._UserAgent = value; return true; } return false; } - break; - } - case 29: - { - if (ReferenceEquals(HeaderNames.AccessControlRequestMethod, key)) + if (ReferenceEquals(HeaderNames.KeepAlive, key)) { - if ((_bits & 0x40000000000000L) == 0) + if ((_bits & 0x10L) == 0) { - _bits |= 0x40000000000000L; - _headers._AccessControlRequestMethod = value; + _bits |= 0x10L; + _headers._KeepAlive = value; return true; } return false; } - - if (HeaderNames.AccessControlRequestMethod.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.Authority, key)) { - if ((_bits & 0x40000000000000L) == 0) + if ((_bits & 0x100000L) == 0) { - _bits |= 0x40000000000000L; - _headers._AccessControlRequestMethod = value; + _bits |= 0x100000L; + _headers._Authority = value; return true; } return false; } - break; - } - case 30: - { - if (ReferenceEquals(HeaderNames.AccessControlRequestHeaders, key)) + if (ReferenceEquals(HeaderNames.RequestId, key)) { - if ((_bits & 0x80000000000000L) == 0) + if ((_bits & 0x1000000000000L) == 0) { - _bits |= 0x80000000000000L; - _headers._AccessControlRequestHeaders = value; + _bits |= 0x1000000000000L; + _headers._RequestId = value; return true; } return false; } - - if (HeaderNames.AccessControlRequestHeaders.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.TraceState, key)) { - if ((_bits & 0x80000000000000L) == 0) + if ((_bits & 0x8000000000000L) == 0) { - _bits |= 0x80000000000000L; - _headers._AccessControlRequestHeaders = value; + _bits |= 0x8000000000000L; + _headers._TraceState = value; return true; } return false; } - break; - } - } - - return AddValueUnknown(key, value); - } - - protected override bool RemoveFast(string key) - { - switch (key.Length) - { - case 2: - { - if (ReferenceEquals(HeaderNames.TE, key)) + + if (HeaderNames.Connection.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x100000000000L) != 0) + if ((_bits & 0x2L) == 0) { - _bits &= ~0x100000000000L; - _headers._TE = default(StringValues); + _bits |= 0x2L; + _headers._Connection = value; return true; } return false; } - - if (HeaderNames.TE.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.UserAgent.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x100000000000L) != 0) + if ((_bits & 0x400000000000L) == 0) { - _bits &= ~0x100000000000L; - _headers._TE = default(StringValues); + _bits |= 0x400000000000L; + _headers._UserAgent = value; return true; } return false; } - break; - } - case 3: - { - if (ReferenceEquals(HeaderNames.Via, key)) + if (HeaderNames.KeepAlive.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x200L) != 0) + if ((_bits & 0x10L) == 0) { - _bits &= ~0x200L; - _headers._Via = default(StringValues); + _bits |= 0x10L; + _headers._KeepAlive = value; return true; } return false; } - - if (HeaderNames.Via.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Authority.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x200L) != 0) + if ((_bits & 0x100000L) == 0) { - _bits &= ~0x200L; - _headers._Via = default(StringValues); + _bits |= 0x100000L; + _headers._Authority = value; return true; } return false; } - break; - } - case 4: - { - if (ReferenceEquals(HeaderNames.Host, key)) + if (HeaderNames.RequestId.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x400000000L) != 0) + if ((_bits & 0x1000000000000L) == 0) { - _bits &= ~0x400000000L; - _headers._Host = default(StringValues); + _bits |= 0x1000000000000L; + _headers._RequestId = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.Date, key)) + if (HeaderNames.TraceState.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x4L) != 0) + if ((_bits & 0x8000000000000L) == 0) { - _bits &= ~0x4L; - _headers._Date = default(StringValues); + _bits |= 0x8000000000000L; + _headers._TraceState = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.From, key)) + break; + } + case 11: + { + if (ReferenceEquals(HeaderNames.ContentMD5, key)) { - if ((_bits & 0x80000000L) != 0) + if ((_bits & 0x10000L) == 0) { - _bits &= ~0x80000000L; - _headers._From = default(StringValues); + _bits |= 0x10000L; + _headers._ContentMD5 = value; return true; } return false; } - - if (HeaderNames.Host.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.TraceParent, key)) { - if ((_bits & 0x400000000L) != 0) + if ((_bits & 0x4000000000000L) == 0) { - _bits &= ~0x400000000L; - _headers._Host = default(StringValues); + _bits |= 0x4000000000000L; + _headers._TraceParent = value; return true; } return false; } - if (HeaderNames.Date.Equals(key, StringComparison.OrdinalIgnoreCase)) + + if (HeaderNames.ContentMD5.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x4L) != 0) + if ((_bits & 0x10000L) == 0) { - _bits &= ~0x4L; - _headers._Date = default(StringValues); + _bits |= 0x10000L; + _headers._ContentMD5 = value; return true; } return false; } - if (HeaderNames.From.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.TraceParent.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x80000000L) != 0) + if ((_bits & 0x4000000000000L) == 0) { - _bits &= ~0x80000000L; - _headers._From = default(StringValues); + _bits |= 0x4000000000000L; + _headers._TraceParent = value; return true; } return false; } break; } - case 5: + case 12: { - if (ReferenceEquals(HeaderNames.Allow, key)) + if (ReferenceEquals(HeaderNames.ContentType, key)) { - if ((_bits & 0x800L) != 0) + if ((_bits & 0x1000L) == 0) { - _bits &= ~0x800L; - _headers._Allow = default(StringValues); + _bits |= 0x1000L; + _headers._ContentType = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.Path, key)) + if (ReferenceEquals(HeaderNames.GrpcTimeout, key)) { - if ((_bits & 0x400000L) != 0) + if ((_bits & 0x200000000L) == 0) { - _bits &= ~0x400000L; - _headers._Path = default(StringValues); + _bits |= 0x200000000L; + _headers._GrpcTimeout = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.Range, key)) + if (ReferenceEquals(HeaderNames.MaxForwards, key)) { - if ((_bits & 0x80000000000L) != 0) + if ((_bits & 0x10000000000L) == 0) { - _bits &= ~0x80000000000L; - _headers._Range = default(StringValues); + _bits |= 0x10000000000L; + _headers._MaxForwards = value; return true; } return false; } - if (HeaderNames.Allow.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.ContentType.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x800L) != 0) + if ((_bits & 0x1000L) == 0) { - _bits &= ~0x800L; - _headers._Allow = default(StringValues); + _bits |= 0x1000L; + _headers._ContentType = value; return true; } return false; } - if (HeaderNames.Path.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.GrpcTimeout.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x400000L) != 0) + if ((_bits & 0x200000000L) == 0) { - _bits &= ~0x400000L; - _headers._Path = default(StringValues); + _bits |= 0x200000000L; + _headers._GrpcTimeout = value; return true; } return false; } - if (HeaderNames.Range.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.MaxForwards.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x80000000000L) != 0) + if ((_bits & 0x10000000000L) == 0) { - _bits &= ~0x80000000000L; - _headers._Range = default(StringValues); + _bits |= 0x10000000000L; + _headers._MaxForwards = value; return true; } return false; } break; } - case 6: + case 13: { - if (ReferenceEquals(HeaderNames.Accept, key)) + if (ReferenceEquals(HeaderNames.CacheControl, key)) { - if ((_bits & 0x1000000L) != 0) + if ((_bits & 0x1L) == 0) { - _bits &= ~0x1000000L; - _headers._Accept = default(StringValues); + _bits |= 0x1L; + _headers._CacheControl = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.Pragma, key)) + if (ReferenceEquals(HeaderNames.GrpcEncoding, key)) { - if ((_bits & 0x20L) != 0) + if ((_bits & 0x8L) == 0) { - _bits &= ~0x20L; - _headers._Pragma = default(StringValues); + _bits |= 0x8L; + _headers._GrpcEncoding = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.Cookie, key)) + if (ReferenceEquals(HeaderNames.ContentRange, key)) { - if ((_bits & 0x20000000L) != 0) + if ((_bits & 0x20000L) == 0) { - _bits &= ~0x20000000L; - _headers._Cookie = default(StringValues); + _bits |= 0x20000L; + _headers._ContentRange = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.Expect, key)) + if (ReferenceEquals(HeaderNames.LastModified, key)) { - if ((_bits & 0x40000000L) != 0) + if ((_bits & 0x80000L) == 0) { - _bits &= ~0x40000000L; - _headers._Expect = default(StringValues); + _bits |= 0x80000L; + _headers._LastModified = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.Origin, key)) + if (ReferenceEquals(HeaderNames.Authorization, key)) { - if ((_bits & 0x20000000000000L) != 0) + if ((_bits & 0x10000000L) == 0) { - _bits &= ~0x20000000000000L; - _headers._Origin = default(StringValues); - return true; + _bits |= 0x10000000L; + _headers._Authorization = value; + return true; } return false; } - - if (HeaderNames.Accept.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.IfNoneMatch, key)) { - if ((_bits & 0x1000000L) != 0) + if ((_bits & 0x2000000000L) == 0) { - _bits &= ~0x1000000L; - _headers._Accept = default(StringValues); + _bits |= 0x2000000000L; + _headers._IfNoneMatch = value; return true; } return false; } - if (HeaderNames.Pragma.Equals(key, StringComparison.OrdinalIgnoreCase)) + + if (HeaderNames.CacheControl.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x20L) != 0) + if ((_bits & 0x1L) == 0) { - _bits &= ~0x20L; - _headers._Pragma = default(StringValues); + _bits |= 0x1L; + _headers._CacheControl = value; return true; } return false; } - if (HeaderNames.Cookie.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.GrpcEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x20000000L) != 0) + if ((_bits & 0x8L) == 0) { - _bits &= ~0x20000000L; - _headers._Cookie = default(StringValues); + _bits |= 0x8L; + _headers._GrpcEncoding = value; return true; } return false; } - if (HeaderNames.Expect.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.ContentRange.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x40000000L) != 0) + if ((_bits & 0x20000L) == 0) { - _bits &= ~0x40000000L; - _headers._Expect = default(StringValues); + _bits |= 0x20000L; + _headers._ContentRange = value; return true; } return false; } - if (HeaderNames.Origin.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.LastModified.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x20000000000000L) != 0) + if ((_bits & 0x80000L) == 0) { - _bits &= ~0x20000000000000L; - _headers._Origin = default(StringValues); + _bits |= 0x80000L; + _headers._LastModified = value; return true; } return false; } - break; - } - case 7: - { - if (ReferenceEquals(HeaderNames.Trailer, key)) + if (HeaderNames.Authorization.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x40L) != 0) + if ((_bits & 0x10000000L) == 0) { - _bits &= ~0x40L; - _headers._Trailer = default(StringValues); + _bits |= 0x10000000L; + _headers._Authorization = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.Upgrade, key)) + if (HeaderNames.IfNoneMatch.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x100L) != 0) + if ((_bits & 0x2000000000L) == 0) { - _bits &= ~0x100L; - _headers._Upgrade = default(StringValues); + _bits |= 0x2000000000L; + _headers._IfNoneMatch = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.Warning, key)) + break; + } + case 14: + { + if (ReferenceEquals(HeaderNames.AcceptCharset, key)) { - if ((_bits & 0x400L) != 0) + if ((_bits & 0x2000000L) == 0) { - _bits &= ~0x400L; - _headers._Warning = default(StringValues); + _bits |= 0x2000000L; + _headers._AcceptCharset = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.Expires, key)) + if (ReferenceEquals(HeaderNames.ContentLength, key)) { - if ((_bits & 0x40000L) != 0) + if (!_contentLength.HasValue) { - _bits &= ~0x40000L; - _headers._Expires = default(StringValues); + _contentLength = ParseContentLength(value); return true; } return false; } - if (ReferenceEquals(HeaderNames.Method, key)) + + if (HeaderNames.AcceptCharset.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x200000L) != 0) + if ((_bits & 0x2000000L) == 0) { - _bits &= ~0x200000L; - _headers._Method = default(StringValues); + _bits |= 0x2000000L; + _headers._AcceptCharset = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.Scheme, key)) + if (HeaderNames.ContentLength.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x800000L) != 0) + if (!_contentLength.HasValue) { - _bits &= ~0x800000L; - _headers._Scheme = default(StringValues); + _contentLength = ParseContentLength(value); return true; } return false; } - if (ReferenceEquals(HeaderNames.Referer, key)) + break; + } + case 15: + { + if (ReferenceEquals(HeaderNames.AcceptEncoding, key)) { - if ((_bits & 0x40000000000L) != 0) + if ((_bits & 0x4000000L) == 0) { - _bits &= ~0x40000000000L; - _headers._Referer = default(StringValues); + _bits |= 0x4000000L; + _headers._AcceptEncoding = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.Baggage, key)) + if (ReferenceEquals(HeaderNames.AcceptLanguage, key)) { - if ((_bits & 0x10000000000000L) != 0) + if ((_bits & 0x8000000L) == 0) { - _bits &= ~0x10000000000000L; - _headers._Baggage = default(StringValues); + _bits |= 0x8000000L; + _headers._AcceptLanguage = value; return true; } return false; } - if (HeaderNames.Trailer.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.AcceptEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x40L) != 0) + if ((_bits & 0x4000000L) == 0) { - _bits &= ~0x40L; - _headers._Trailer = default(StringValues); + _bits |= 0x4000000L; + _headers._AcceptEncoding = value; return true; } return false; } - if (HeaderNames.Upgrade.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.AcceptLanguage.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x100L) != 0) + if ((_bits & 0x8000000L) == 0) { - _bits &= ~0x100L; - _headers._Upgrade = default(StringValues); + _bits |= 0x8000000L; + _headers._AcceptLanguage = value; return true; } return false; } - if (HeaderNames.Warning.Equals(key, StringComparison.OrdinalIgnoreCase)) + break; + } + case 16: + { + if (ReferenceEquals(HeaderNames.ContentEncoding, key)) { - if ((_bits & 0x400L) != 0) + if ((_bits & 0x2000L) == 0) { - _bits &= ~0x400L; - _headers._Warning = default(StringValues); + _bits |= 0x2000L; + _headers._ContentEncoding = value; return true; } return false; } - if (HeaderNames.Expires.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.ContentLanguage, key)) { - if ((_bits & 0x40000L) != 0) + if ((_bits & 0x4000L) == 0) { - _bits &= ~0x40000L; - _headers._Expires = default(StringValues); + _bits |= 0x4000L; + _headers._ContentLanguage = value; return true; } return false; } - if (HeaderNames.Method.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.ContentLocation, key)) { - if ((_bits & 0x200000L) != 0) + if ((_bits & 0x8000L) == 0) { - _bits &= ~0x200000L; - _headers._Method = default(StringValues); + _bits |= 0x8000L; + _headers._ContentLocation = value; return true; } return false; } - if (HeaderNames.Scheme.Equals(key, StringComparison.OrdinalIgnoreCase)) + + if (HeaderNames.ContentEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x800000L) != 0) + if ((_bits & 0x2000L) == 0) { - _bits &= ~0x800000L; - _headers._Scheme = default(StringValues); + _bits |= 0x2000L; + _headers._ContentEncoding = value; return true; } return false; } - if (HeaderNames.Referer.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.ContentLanguage.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x40000000000L) != 0) + if ((_bits & 0x4000L) == 0) { - _bits &= ~0x40000000000L; - _headers._Referer = default(StringValues); + _bits |= 0x4000L; + _headers._ContentLanguage = value; return true; } return false; } - if (HeaderNames.Baggage.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.ContentLocation.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x10000000000000L) != 0) + if ((_bits & 0x8000L) == 0) { - _bits &= ~0x10000000000000L; - _headers._Baggage = default(StringValues); + _bits |= 0x8000L; + _headers._ContentLocation = value; return true; } return false; } break; } - case 8: + case 17: { - if (ReferenceEquals(HeaderNames.IfMatch, key)) + if (ReferenceEquals(HeaderNames.TransferEncoding, key)) { - if ((_bits & 0x800000000L) != 0) + if ((_bits & 0x80L) == 0) { - _bits &= ~0x800000000L; - _headers._IfMatch = default(StringValues); + _bits |= 0x80L; + _headers._TransferEncoding = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.IfRange, key)) + if (ReferenceEquals(HeaderNames.IfModifiedSince, key)) { - if ((_bits & 0x4000000000L) != 0) + if ((_bits & 0x1000000000L) == 0) { - _bits &= ~0x4000000000L; - _headers._IfRange = default(StringValues); + _bits |= 0x1000000000L; + _headers._IfModifiedSince = value; return true; } return false; } - if (HeaderNames.IfMatch.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.TransferEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x800000000L) != 0) + if ((_bits & 0x80L) == 0) { - _bits &= ~0x800000000L; - _headers._IfMatch = default(StringValues); + _bits |= 0x80L; + _headers._TransferEncoding = value; return true; } return false; } - if (HeaderNames.IfRange.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.IfModifiedSince.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x4000000000L) != 0) + if ((_bits & 0x1000000000L) == 0) { - _bits &= ~0x4000000000L; - _headers._IfRange = default(StringValues); + _bits |= 0x1000000000L; + _headers._IfModifiedSince = value; return true; } return false; } break; } - case 9: + case 19: { - if (ReferenceEquals(HeaderNames.Translate, key)) + if (ReferenceEquals(HeaderNames.IfUnmodifiedSince, key)) { - if ((_bits & 0x200000000000L) != 0) + if ((_bits & 0x8000000000L) == 0) { - _bits &= ~0x200000000000L; - _headers._Translate = default(StringValues); + _bits |= 0x8000000000L; + _headers._IfUnmodifiedSince = value; return true; } return false; } - - if (HeaderNames.Translate.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.ProxyAuthorization, key)) { - if ((_bits & 0x200000000000L) != 0) + if ((_bits & 0x20000000000L) == 0) { - _bits &= ~0x200000000000L; - _headers._Translate = default(StringValues); + _bits |= 0x20000000000L; + _headers._ProxyAuthorization = value; return true; } return false; } - break; - } - case 10: - { - if (ReferenceEquals(HeaderNames.Connection, key)) + if (ReferenceEquals(HeaderNames.CorrelationContext, key)) { - if ((_bits & 0x2L) != 0) + if ((_bits & 0x2000000000000L) == 0) { - _bits &= ~0x2L; - _headers._Connection = default(StringValues); + _bits |= 0x2000000000000L; + _headers._CorrelationContext = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.UserAgent, key)) - { - if ((_bits & 0x400000000000L) != 0) + + if (HeaderNames.IfUnmodifiedSince.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x8000000000L) == 0) { - _bits &= ~0x400000000000L; - _headers._UserAgent = default(StringValues); + _bits |= 0x8000000000L; + _headers._IfUnmodifiedSince = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.KeepAlive, key)) + if (HeaderNames.ProxyAuthorization.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x10L) != 0) + if ((_bits & 0x20000000000L) == 0) { - _bits &= ~0x10L; - _headers._KeepAlive = default(StringValues); + _bits |= 0x20000000000L; + _headers._ProxyAuthorization = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.Authority, key)) + if (HeaderNames.CorrelationContext.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x100000L) != 0) + if ((_bits & 0x2000000000000L) == 0) { - _bits &= ~0x100000L; - _headers._Authority = default(StringValues); + _bits |= 0x2000000000000L; + _headers._CorrelationContext = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.RequestId, key)) + break; + } + case 20: + { + if (ReferenceEquals(HeaderNames.GrpcAcceptEncoding, key)) { - if ((_bits & 0x1000000000000L) != 0) + if ((_bits & 0x100000000L) == 0) { - _bits &= ~0x1000000000000L; - _headers._RequestId = default(StringValues); + _bits |= 0x100000000L; + _headers._GrpcAcceptEncoding = value; return true; } return false; } - if (ReferenceEquals(HeaderNames.TraceState, key)) + + if (HeaderNames.GrpcAcceptEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x8000000000000L) != 0) + if ((_bits & 0x100000000L) == 0) { - _bits &= ~0x8000000000000L; - _headers._TraceState = default(StringValues); + _bits |= 0x100000000L; + _headers._GrpcAcceptEncoding = value; return true; } return false; } - - if (HeaderNames.Connection.Equals(key, StringComparison.OrdinalIgnoreCase)) + break; + } + case 25: + { + if (ReferenceEquals(HeaderNames.UpgradeInsecureRequests, key)) { - if ((_bits & 0x2L) != 0) + if ((_bits & 0x800000000000L) == 0) { - _bits &= ~0x2L; - _headers._Connection = default(StringValues); + _bits |= 0x800000000000L; + _headers._UpgradeInsecureRequests = value; return true; } return false; } - if (HeaderNames.UserAgent.Equals(key, StringComparison.OrdinalIgnoreCase)) + + if (HeaderNames.UpgradeInsecureRequests.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x400000000000L) != 0) + if ((_bits & 0x800000000000L) == 0) { - _bits &= ~0x400000000000L; - _headers._UserAgent = default(StringValues); + _bits |= 0x800000000000L; + _headers._UpgradeInsecureRequests = value; return true; } return false; } - if (HeaderNames.KeepAlive.Equals(key, StringComparison.OrdinalIgnoreCase)) + break; + } + case 29: + { + if (ReferenceEquals(HeaderNames.AccessControlRequestMethod, key)) { - if ((_bits & 0x10L) != 0) + if ((_bits & 0x40000000000000L) == 0) { - _bits &= ~0x10L; - _headers._KeepAlive = default(StringValues); + _bits |= 0x40000000000000L; + _headers._AccessControlRequestMethod = value; return true; } return false; } - if (HeaderNames.Authority.Equals(key, StringComparison.OrdinalIgnoreCase)) + + if (HeaderNames.AccessControlRequestMethod.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x100000L) != 0) + if ((_bits & 0x40000000000000L) == 0) { - _bits &= ~0x100000L; - _headers._Authority = default(StringValues); + _bits |= 0x40000000000000L; + _headers._AccessControlRequestMethod = value; return true; } return false; } - if (HeaderNames.RequestId.Equals(key, StringComparison.OrdinalIgnoreCase)) + break; + } + case 30: + { + if (ReferenceEquals(HeaderNames.AccessControlRequestHeaders, key)) { - if ((_bits & 0x1000000000000L) != 0) + if ((_bits & 0x80000000000000L) == 0) { - _bits &= ~0x1000000000000L; - _headers._RequestId = default(StringValues); + _bits |= 0x80000000000000L; + _headers._AccessControlRequestHeaders = value; return true; } return false; } - if (HeaderNames.TraceState.Equals(key, StringComparison.OrdinalIgnoreCase)) + + if (HeaderNames.AccessControlRequestHeaders.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x8000000000000L) != 0) + if ((_bits & 0x80000000000000L) == 0) { - _bits &= ~0x8000000000000L; - _headers._TraceState = default(StringValues); + _bits |= 0x80000000000000L; + _headers._AccessControlRequestHeaders = value; return true; } return false; } break; } - case 11: + } + + return AddValueUnknown(key, value); + } + + protected override bool RemoveFast(string key) + { + switch (key.Length) + { + case 2: { - if (ReferenceEquals(HeaderNames.ContentMD5, key)) + if (ReferenceEquals(HeaderNames.TE, key)) { - if ((_bits & 0x10000L) != 0) + if ((_bits & 0x100000000000L) != 0) { - _bits &= ~0x10000L; - _headers._ContentMD5 = default(StringValues); + _bits &= ~0x100000000000L; + _headers._TE = default(StringValues); return true; } return false; } - if (ReferenceEquals(HeaderNames.TraceParent, key)) + + if (HeaderNames.TE.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x4000000000000L) != 0) + if ((_bits & 0x100000000000L) != 0) { - _bits &= ~0x4000000000000L; - _headers._TraceParent = default(StringValues); + _bits &= ~0x100000000000L; + _headers._TE = default(StringValues); return true; } return false; } - - if (HeaderNames.ContentMD5.Equals(key, StringComparison.OrdinalIgnoreCase)) + break; + } + case 3: + { + if (ReferenceEquals(HeaderNames.Via, key)) { - if ((_bits & 0x10000L) != 0) + if ((_bits & 0x200L) != 0) { - _bits &= ~0x10000L; - _headers._ContentMD5 = default(StringValues); + _bits &= ~0x200L; + _headers._Via = default(StringValues); return true; } return false; } - if (HeaderNames.TraceParent.Equals(key, StringComparison.OrdinalIgnoreCase)) + + if (HeaderNames.Via.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x4000000000000L) != 0) + if ((_bits & 0x200L) != 0) { - _bits &= ~0x4000000000000L; - _headers._TraceParent = default(StringValues); + _bits &= ~0x200L; + _headers._Via = default(StringValues); return true; } return false; } break; } - case 12: + case 4: { - if (ReferenceEquals(HeaderNames.ContentType, key)) + if (ReferenceEquals(HeaderNames.Host, key)) { - if ((_bits & 0x1000L) != 0) + if ((_bits & 0x400000000L) != 0) { - _bits &= ~0x1000L; - _headers._ContentType = default(StringValues); + _bits &= ~0x400000000L; + _headers._Host = default(StringValues); return true; } return false; } - if (ReferenceEquals(HeaderNames.GrpcTimeout, key)) + if (ReferenceEquals(HeaderNames.Date, key)) { - if ((_bits & 0x200000000L) != 0) + if ((_bits & 0x4L) != 0) { - _bits &= ~0x200000000L; - _headers._GrpcTimeout = default(StringValues); + _bits &= ~0x4L; + _headers._Date = default(StringValues); return true; } return false; } - if (ReferenceEquals(HeaderNames.MaxForwards, key)) + if (ReferenceEquals(HeaderNames.From, key)) { - if ((_bits & 0x10000000000L) != 0) + if ((_bits & 0x80000000L) != 0) { - _bits &= ~0x10000000000L; - _headers._MaxForwards = default(StringValues); + _bits &= ~0x80000000L; + _headers._From = default(StringValues); return true; } return false; } - if (HeaderNames.ContentType.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Host.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x1000L) != 0) + if ((_bits & 0x400000000L) != 0) { - _bits &= ~0x1000L; - _headers._ContentType = default(StringValues); + _bits &= ~0x400000000L; + _headers._Host = default(StringValues); return true; } return false; } - if (HeaderNames.GrpcTimeout.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Date.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x200000000L) != 0) + if ((_bits & 0x4L) != 0) { - _bits &= ~0x200000000L; - _headers._GrpcTimeout = default(StringValues); + _bits &= ~0x4L; + _headers._Date = default(StringValues); return true; } return false; } - if (HeaderNames.MaxForwards.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.From.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x10000000000L) != 0) + if ((_bits & 0x80000000L) != 0) { - _bits &= ~0x10000000000L; - _headers._MaxForwards = default(StringValues); + _bits &= ~0x80000000L; + _headers._From = default(StringValues); return true; } return false; } break; } - case 13: + case 5: { - if (ReferenceEquals(HeaderNames.CacheControl, key)) + if (ReferenceEquals(HeaderNames.Allow, key)) { - if ((_bits & 0x1L) != 0) + if ((_bits & 0x800L) != 0) { - _bits &= ~0x1L; - _headers._CacheControl = default(StringValues); + _bits &= ~0x800L; + _headers._Allow = default(StringValues); return true; } return false; } - if (ReferenceEquals(HeaderNames.GrpcEncoding, key)) + if (ReferenceEquals(HeaderNames.Path, key)) { - if ((_bits & 0x8L) != 0) + if ((_bits & 0x400000L) != 0) { - _bits &= ~0x8L; - _headers._GrpcEncoding = default(StringValues); + _bits &= ~0x400000L; + _headers._Path = default(StringValues); return true; } return false; } - if (ReferenceEquals(HeaderNames.ContentRange, key)) + if (ReferenceEquals(HeaderNames.Range, key)) { - if ((_bits & 0x20000L) != 0) + if ((_bits & 0x80000000000L) != 0) { - _bits &= ~0x20000L; - _headers._ContentRange = default(StringValues); + _bits &= ~0x80000000000L; + _headers._Range = default(StringValues); return true; } return false; } - if (ReferenceEquals(HeaderNames.LastModified, key)) + + if (HeaderNames.Allow.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x80000L) != 0) + if ((_bits & 0x800L) != 0) { - _bits &= ~0x80000L; - _headers._LastModified = default(StringValues); + _bits &= ~0x800L; + _headers._Allow = default(StringValues); return true; } return false; } - if (ReferenceEquals(HeaderNames.Authorization, key)) + if (HeaderNames.Path.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x10000000L) != 0) + if ((_bits & 0x400000L) != 0) { - _bits &= ~0x10000000L; - _headers._Authorization = default(StringValues); + _bits &= ~0x400000L; + _headers._Path = default(StringValues); return true; } return false; } - if (ReferenceEquals(HeaderNames.IfNoneMatch, key)) + if (HeaderNames.Range.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x2000000000L) != 0) + if ((_bits & 0x80000000000L) != 0) { - _bits &= ~0x2000000000L; - _headers._IfNoneMatch = default(StringValues); + _bits &= ~0x80000000000L; + _headers._Range = default(StringValues); return true; } return false; } - - if (HeaderNames.CacheControl.Equals(key, StringComparison.OrdinalIgnoreCase)) + break; + } + case 6: + { + if (ReferenceEquals(HeaderNames.Accept, key)) { - if ((_bits & 0x1L) != 0) + if ((_bits & 0x1000000L) != 0) { - _bits &= ~0x1L; - _headers._CacheControl = default(StringValues); + _bits &= ~0x1000000L; + _headers._Accept = default(StringValues); return true; } return false; } - if (HeaderNames.GrpcEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.Pragma, key)) { - if ((_bits & 0x8L) != 0) + if ((_bits & 0x20L) != 0) { - _bits &= ~0x8L; - _headers._GrpcEncoding = default(StringValues); + _bits &= ~0x20L; + _headers._Pragma = default(StringValues); return true; } return false; } - if (HeaderNames.ContentRange.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.Cookie, key)) { - if ((_bits & 0x20000L) != 0) + if ((_bits & 0x20000000L) != 0) { - _bits &= ~0x20000L; - _headers._ContentRange = default(StringValues); + _bits &= ~0x20000000L; + _headers._Cookie = default(StringValues); return true; } return false; } - if (HeaderNames.LastModified.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.Expect, key)) { - if ((_bits & 0x80000L) != 0) + if ((_bits & 0x40000000L) != 0) { - _bits &= ~0x80000L; - _headers._LastModified = default(StringValues); + _bits &= ~0x40000000L; + _headers._Expect = default(StringValues); return true; } return false; } - if (HeaderNames.Authorization.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.Origin, key)) { - if ((_bits & 0x10000000L) != 0) + if ((_bits & 0x20000000000000L) != 0) { - _bits &= ~0x10000000L; - _headers._Authorization = default(StringValues); + _bits &= ~0x20000000000000L; + _headers._Origin = default(StringValues); return true; } return false; } - if (HeaderNames.IfNoneMatch.Equals(key, StringComparison.OrdinalIgnoreCase)) + + if (HeaderNames.Accept.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x2000000000L) != 0) + if ((_bits & 0x1000000L) != 0) { - _bits &= ~0x2000000000L; - _headers._IfNoneMatch = default(StringValues); + _bits &= ~0x1000000L; + _headers._Accept = default(StringValues); return true; } return false; } - break; - } - case 14: - { - if (ReferenceEquals(HeaderNames.AcceptCharset, key)) + if (HeaderNames.Pragma.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x2000000L) != 0) + if ((_bits & 0x20L) != 0) { - _bits &= ~0x2000000L; - _headers._AcceptCharset = default(StringValues); + _bits &= ~0x20L; + _headers._Pragma = default(StringValues); return true; } return false; } - if (ReferenceEquals(HeaderNames.ContentLength, key)) + if (HeaderNames.Cookie.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if (_contentLength.HasValue) + if ((_bits & 0x20000000L) != 0) { - _contentLength = null; + _bits &= ~0x20000000L; + _headers._Cookie = default(StringValues); return true; } return false; } - - if (HeaderNames.AcceptCharset.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Expect.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x2000000L) != 0) + if ((_bits & 0x40000000L) != 0) { - _bits &= ~0x2000000L; - _headers._AcceptCharset = default(StringValues); + _bits &= ~0x40000000L; + _headers._Expect = default(StringValues); return true; } return false; } - if (HeaderNames.ContentLength.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Origin.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if (_contentLength.HasValue) + if ((_bits & 0x20000000000000L) != 0) { - _contentLength = null; + _bits &= ~0x20000000000000L; + _headers._Origin = default(StringValues); return true; } return false; } break; } - case 15: + case 7: { - if (ReferenceEquals(HeaderNames.AcceptEncoding, key)) + if (ReferenceEquals(HeaderNames.Trailer, key)) { - if ((_bits & 0x4000000L) != 0) + if ((_bits & 0x40L) != 0) { - _bits &= ~0x4000000L; - _headers._AcceptEncoding = default(StringValues); + _bits &= ~0x40L; + _headers._Trailer = default(StringValues); return true; } return false; } - if (ReferenceEquals(HeaderNames.AcceptLanguage, key)) + if (ReferenceEquals(HeaderNames.Upgrade, key)) { - if ((_bits & 0x8000000L) != 0) + if ((_bits & 0x100L) != 0) { - _bits &= ~0x8000000L; - _headers._AcceptLanguage = default(StringValues); + _bits &= ~0x100L; + _headers._Upgrade = default(StringValues); return true; } return false; } - - if (HeaderNames.AcceptEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.Warning, key)) { - if ((_bits & 0x4000000L) != 0) + if ((_bits & 0x400L) != 0) { - _bits &= ~0x4000000L; - _headers._AcceptEncoding = default(StringValues); + _bits &= ~0x400L; + _headers._Warning = default(StringValues); return true; } return false; } - if (HeaderNames.AcceptLanguage.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.Expires, key)) { - if ((_bits & 0x8000000L) != 0) + if ((_bits & 0x40000L) != 0) { - _bits &= ~0x8000000L; - _headers._AcceptLanguage = default(StringValues); + _bits &= ~0x40000L; + _headers._Expires = default(StringValues); return true; } return false; } - break; - } - case 16: - { - if (ReferenceEquals(HeaderNames.ContentEncoding, key)) + if (ReferenceEquals(HeaderNames.Method, key)) { - if ((_bits & 0x2000L) != 0) + if ((_bits & 0x200000L) != 0) { - _bits &= ~0x2000L; - _headers._ContentEncoding = default(StringValues); + _bits &= ~0x200000L; + _headers._Method = default(StringValues); return true; } return false; } - if (ReferenceEquals(HeaderNames.ContentLanguage, key)) + if (ReferenceEquals(HeaderNames.Scheme, key)) { - if ((_bits & 0x4000L) != 0) + if ((_bits & 0x800000L) != 0) { - _bits &= ~0x4000L; - _headers._ContentLanguage = default(StringValues); + _bits &= ~0x800000L; + _headers._Scheme = default(StringValues); return true; } return false; } - if (ReferenceEquals(HeaderNames.ContentLocation, key)) + if (ReferenceEquals(HeaderNames.Referer, key)) { - if ((_bits & 0x8000L) != 0) + if ((_bits & 0x40000000000L) != 0) { - _bits &= ~0x8000L; - _headers._ContentLocation = default(StringValues); + _bits &= ~0x40000000000L; + _headers._Referer = default(StringValues); return true; } return false; } - - if (HeaderNames.ContentEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.Baggage, key)) { - if ((_bits & 0x2000L) != 0) + if ((_bits & 0x10000000000000L) != 0) { - _bits &= ~0x2000L; - _headers._ContentEncoding = default(StringValues); + _bits &= ~0x10000000000000L; + _headers._Baggage = default(StringValues); return true; } return false; } - if (HeaderNames.ContentLanguage.Equals(key, StringComparison.OrdinalIgnoreCase)) + + if (HeaderNames.Trailer.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x4000L) != 0) + if ((_bits & 0x40L) != 0) { - _bits &= ~0x4000L; - _headers._ContentLanguage = default(StringValues); + _bits &= ~0x40L; + _headers._Trailer = default(StringValues); return true; } return false; } - if (HeaderNames.ContentLocation.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Upgrade.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x8000L) != 0) + if ((_bits & 0x100L) != 0) { - _bits &= ~0x8000L; - _headers._ContentLocation = default(StringValues); + _bits &= ~0x100L; + _headers._Upgrade = default(StringValues); return true; } return false; } - break; - } - case 17: - { - if (ReferenceEquals(HeaderNames.TransferEncoding, key)) + if (HeaderNames.Warning.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x80L) != 0) + if ((_bits & 0x400L) != 0) { - _bits &= ~0x80L; - _headers._TransferEncoding = default(StringValues); + _bits &= ~0x400L; + _headers._Warning = default(StringValues); return true; } return false; } - if (ReferenceEquals(HeaderNames.IfModifiedSince, key)) + if (HeaderNames.Expires.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x1000000000L) != 0) + if ((_bits & 0x40000L) != 0) { - _bits &= ~0x1000000000L; - _headers._IfModifiedSince = default(StringValues); + _bits &= ~0x40000L; + _headers._Expires = default(StringValues); return true; } return false; } - - if (HeaderNames.TransferEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Method.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x80L) != 0) + if ((_bits & 0x200000L) != 0) { - _bits &= ~0x80L; - _headers._TransferEncoding = default(StringValues); + _bits &= ~0x200000L; + _headers._Method = default(StringValues); return true; } return false; } - if (HeaderNames.IfModifiedSince.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Scheme.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x1000000000L) != 0) + if ((_bits & 0x800000L) != 0) { - _bits &= ~0x1000000000L; - _headers._IfModifiedSince = default(StringValues); + _bits &= ~0x800000L; + _headers._Scheme = default(StringValues); return true; } return false; } - break; - } - case 19: - { - if (ReferenceEquals(HeaderNames.IfUnmodifiedSince, key)) + if (HeaderNames.Referer.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x8000000000L) != 0) + if ((_bits & 0x40000000000L) != 0) { - _bits &= ~0x8000000000L; - _headers._IfUnmodifiedSince = default(StringValues); + _bits &= ~0x40000000000L; + _headers._Referer = default(StringValues); return true; } return false; } - if (ReferenceEquals(HeaderNames.ProxyAuthorization, key)) + if (HeaderNames.Baggage.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x20000000000L) != 0) + if ((_bits & 0x10000000000000L) != 0) { - _bits &= ~0x20000000000L; - _headers._ProxyAuthorization = default(StringValues); + _bits &= ~0x10000000000000L; + _headers._Baggage = default(StringValues); return true; } return false; } - if (ReferenceEquals(HeaderNames.CorrelationContext, key)) + break; + } + case 8: + { + if (ReferenceEquals(HeaderNames.IfMatch, key)) { - if ((_bits & 0x2000000000000L) != 0) + if ((_bits & 0x800000000L) != 0) { - _bits &= ~0x2000000000000L; - _headers._CorrelationContext = default(StringValues); + _bits &= ~0x800000000L; + _headers._IfMatch = default(StringValues); return true; } return false; } - - if (HeaderNames.IfUnmodifiedSince.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.IfRange, key)) { - if ((_bits & 0x8000000000L) != 0) + if ((_bits & 0x4000000000L) != 0) { - _bits &= ~0x8000000000L; - _headers._IfUnmodifiedSince = default(StringValues); + _bits &= ~0x4000000000L; + _headers._IfRange = default(StringValues); return true; } return false; } - if (HeaderNames.ProxyAuthorization.Equals(key, StringComparison.OrdinalIgnoreCase)) + + if (HeaderNames.IfMatch.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x20000000000L) != 0) + if ((_bits & 0x800000000L) != 0) { - _bits &= ~0x20000000000L; - _headers._ProxyAuthorization = default(StringValues); + _bits &= ~0x800000000L; + _headers._IfMatch = default(StringValues); return true; } return false; } - if (HeaderNames.CorrelationContext.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.IfRange.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x2000000000000L) != 0) + if ((_bits & 0x4000000000L) != 0) { - _bits &= ~0x2000000000000L; - _headers._CorrelationContext = default(StringValues); + _bits &= ~0x4000000000L; + _headers._IfRange = default(StringValues); return true; } return false; } break; } - case 20: + case 9: { - if (ReferenceEquals(HeaderNames.GrpcAcceptEncoding, key)) + if (ReferenceEquals(HeaderNames.Translate, key)) { - if ((_bits & 0x100000000L) != 0) + if ((_bits & 0x200000000000L) != 0) { - _bits &= ~0x100000000L; - _headers._GrpcAcceptEncoding = default(StringValues); + _bits &= ~0x200000000000L; + _headers._Translate = default(StringValues); return true; } return false; } - if (HeaderNames.GrpcAcceptEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Translate.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x100000000L) != 0) + if ((_bits & 0x200000000000L) != 0) { - _bits &= ~0x100000000L; - _headers._GrpcAcceptEncoding = default(StringValues); + _bits &= ~0x200000000000L; + _headers._Translate = default(StringValues); return true; } return false; } break; } - case 25: + case 10: { - if (ReferenceEquals(HeaderNames.UpgradeInsecureRequests, key)) + if (ReferenceEquals(HeaderNames.Connection, key)) { - if ((_bits & 0x800000000000L) != 0) + if ((_bits & 0x2L) != 0) { - _bits &= ~0x800000000000L; - _headers._UpgradeInsecureRequests = default(StringValues); + _bits &= ~0x2L; + _headers._Connection = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.UserAgent, key)) + { + if ((_bits & 0x400000000000L) != 0) + { + _bits &= ~0x400000000000L; + _headers._UserAgent = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.KeepAlive, key)) + { + if ((_bits & 0x10L) != 0) + { + _bits &= ~0x10L; + _headers._KeepAlive = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.Authority, key)) + { + if ((_bits & 0x100000L) != 0) + { + _bits &= ~0x100000L; + _headers._Authority = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.RequestId, key)) + { + if ((_bits & 0x1000000000000L) != 0) + { + _bits &= ~0x1000000000000L; + _headers._RequestId = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.TraceState, key)) + { + if ((_bits & 0x8000000000000L) != 0) + { + _bits &= ~0x8000000000000L; + _headers._TraceState = default(StringValues); return true; } return false; } - if (HeaderNames.UpgradeInsecureRequests.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Connection.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x800000000000L) != 0) + if ((_bits & 0x2L) != 0) { - _bits &= ~0x800000000000L; - _headers._UpgradeInsecureRequests = default(StringValues); + _bits &= ~0x2L; + _headers._Connection = default(StringValues); + return true; + } + return false; + } + if (HeaderNames.UserAgent.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x400000000000L) != 0) + { + _bits &= ~0x400000000000L; + _headers._UserAgent = default(StringValues); + return true; + } + return false; + } + if (HeaderNames.KeepAlive.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x10L) != 0) + { + _bits &= ~0x10L; + _headers._KeepAlive = default(StringValues); + return true; + } + return false; + } + if (HeaderNames.Authority.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x100000L) != 0) + { + _bits &= ~0x100000L; + _headers._Authority = default(StringValues); + return true; + } + return false; + } + if (HeaderNames.RequestId.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x1000000000000L) != 0) + { + _bits &= ~0x1000000000000L; + _headers._RequestId = default(StringValues); + return true; + } + return false; + } + if (HeaderNames.TraceState.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x8000000000000L) != 0) + { + _bits &= ~0x8000000000000L; + _headers._TraceState = default(StringValues); return true; } return false; } break; } - case 29: + case 11: { - if (ReferenceEquals(HeaderNames.AccessControlRequestMethod, key)) + if (ReferenceEquals(HeaderNames.ContentMD5, key)) { - if ((_bits & 0x40000000000000L) != 0) + if ((_bits & 0x10000L) != 0) { - _bits &= ~0x40000000000000L; - _headers._AccessControlRequestMethod = default(StringValues); + _bits &= ~0x10000L; + _headers._ContentMD5 = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.TraceParent, key)) + { + if ((_bits & 0x4000000000000L) != 0) + { + _bits &= ~0x4000000000000L; + _headers._TraceParent = default(StringValues); return true; } return false; } - if (HeaderNames.AccessControlRequestMethod.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.ContentMD5.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x40000000000000L) != 0) + if ((_bits & 0x10000L) != 0) { - _bits &= ~0x40000000000000L; - _headers._AccessControlRequestMethod = default(StringValues); + _bits &= ~0x10000L; + _headers._ContentMD5 = default(StringValues); + return true; + } + return false; + } + if (HeaderNames.TraceParent.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x4000000000000L) != 0) + { + _bits &= ~0x4000000000000L; + _headers._TraceParent = default(StringValues); return true; } return false; } break; } - case 30: + case 12: { - if (ReferenceEquals(HeaderNames.AccessControlRequestHeaders, key)) + if (ReferenceEquals(HeaderNames.ContentType, key)) { - if ((_bits & 0x80000000000000L) != 0) + if ((_bits & 0x1000L) != 0) { - _bits &= ~0x80000000000000L; - _headers._AccessControlRequestHeaders = default(StringValues); + _bits &= ~0x1000L; + _headers._ContentType = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.GrpcTimeout, key)) + { + if ((_bits & 0x200000000L) != 0) + { + _bits &= ~0x200000000L; + _headers._GrpcTimeout = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.MaxForwards, key)) + { + if ((_bits & 0x10000000000L) != 0) + { + _bits &= ~0x10000000000L; + _headers._MaxForwards = default(StringValues); return true; } return false; } - if (HeaderNames.AccessControlRequestHeaders.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.ContentType.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x80000000000000L) != 0) + if ((_bits & 0x1000L) != 0) { - _bits &= ~0x80000000000000L; - _headers._AccessControlRequestHeaders = default(StringValues); + _bits &= ~0x1000L; + _headers._ContentType = default(StringValues); + return true; + } + return false; + } + if (HeaderNames.GrpcTimeout.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x200000000L) != 0) + { + _bits &= ~0x200000000L; + _headers._GrpcTimeout = default(StringValues); + return true; + } + return false; + } + if (HeaderNames.MaxForwards.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x10000000000L) != 0) + { + _bits &= ~0x10000000000L; + _headers._MaxForwards = default(StringValues); return true; } return false; } break; } - } - - return RemoveUnknown(key); - } - private void Clear(long bitsToClear) - { - var tempBits = bitsToClear; - - if ((tempBits & 0x2L) != 0) - { - _headers._Connection = default; - if((tempBits & ~0x2L) == 0) - { - return; - } - tempBits &= ~0x2L; - } - - if ((tempBits & 0x1000000L) != 0) - { - _headers._Accept = default; - if((tempBits & ~0x1000000L) == 0) + case 13: { - return; + if (ReferenceEquals(HeaderNames.CacheControl, key)) + { + if ((_bits & 0x1L) != 0) + { + _bits &= ~0x1L; + _headers._CacheControl = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.GrpcEncoding, key)) + { + if ((_bits & 0x8L) != 0) + { + _bits &= ~0x8L; + _headers._GrpcEncoding = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.ContentRange, key)) + { + if ((_bits & 0x20000L) != 0) + { + _bits &= ~0x20000L; + _headers._ContentRange = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.LastModified, key)) + { + if ((_bits & 0x80000L) != 0) + { + _bits &= ~0x80000L; + _headers._LastModified = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.Authorization, key)) + { + if ((_bits & 0x10000000L) != 0) + { + _bits &= ~0x10000000L; + _headers._Authorization = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.IfNoneMatch, key)) + { + if ((_bits & 0x2000000000L) != 0) + { + _bits &= ~0x2000000000L; + _headers._IfNoneMatch = default(StringValues); + return true; + } + return false; + } + + if (HeaderNames.CacheControl.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x1L) != 0) + { + _bits &= ~0x1L; + _headers._CacheControl = default(StringValues); + return true; + } + return false; + } + if (HeaderNames.GrpcEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x8L) != 0) + { + _bits &= ~0x8L; + _headers._GrpcEncoding = default(StringValues); + return true; + } + return false; + } + if (HeaderNames.ContentRange.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x20000L) != 0) + { + _bits &= ~0x20000L; + _headers._ContentRange = default(StringValues); + return true; + } + return false; + } + if (HeaderNames.LastModified.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x80000L) != 0) + { + _bits &= ~0x80000L; + _headers._LastModified = default(StringValues); + return true; + } + return false; + } + if (HeaderNames.Authorization.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x10000000L) != 0) + { + _bits &= ~0x10000000L; + _headers._Authorization = default(StringValues); + return true; + } + return false; + } + if (HeaderNames.IfNoneMatch.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x2000000000L) != 0) + { + _bits &= ~0x2000000000L; + _headers._IfNoneMatch = default(StringValues); + return true; + } + return false; + } + break; } - tempBits &= ~0x1000000L; - } - - if ((tempBits & 0x400000000L) != 0) - { - _headers._Host = default; - if((tempBits & ~0x400000000L) == 0) + case 14: { - return; + if (ReferenceEquals(HeaderNames.AcceptCharset, key)) + { + if ((_bits & 0x2000000L) != 0) + { + _bits &= ~0x2000000L; + _headers._AcceptCharset = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.ContentLength, key)) + { + if (_contentLength.HasValue) + { + _contentLength = null; + return true; + } + return false; + } + + if (HeaderNames.AcceptCharset.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x2000000L) != 0) + { + _bits &= ~0x2000000L; + _headers._AcceptCharset = default(StringValues); + return true; + } + return false; + } + if (HeaderNames.ContentLength.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if (_contentLength.HasValue) + { + _contentLength = null; + return true; + } + return false; + } + break; } - tempBits &= ~0x400000000L; - } - - if ((tempBits & 0x400000000000L) != 0) - { - _headers._UserAgent = default; - if((tempBits & ~0x400000000000L) == 0) + case 15: { - return; + if (ReferenceEquals(HeaderNames.AcceptEncoding, key)) + { + if ((_bits & 0x4000000L) != 0) + { + _bits &= ~0x4000000L; + _headers._AcceptEncoding = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.AcceptLanguage, key)) + { + if ((_bits & 0x8000000L) != 0) + { + _bits &= ~0x8000000L; + _headers._AcceptLanguage = default(StringValues); + return true; + } + return false; + } + + if (HeaderNames.AcceptEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x4000000L) != 0) + { + _bits &= ~0x4000000L; + _headers._AcceptEncoding = default(StringValues); + return true; + } + return false; + } + if (HeaderNames.AcceptLanguage.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x8000000L) != 0) + { + _bits &= ~0x8000000L; + _headers._AcceptLanguage = default(StringValues); + return true; + } + return false; + } + break; } - tempBits &= ~0x400000000000L; - } - - if ((tempBits & 0x1L) != 0) - { - _headers._CacheControl = default; - if((tempBits & ~0x1L) == 0) + case 16: { - return; - } - tempBits &= ~0x1L; - } - - if ((tempBits & 0x4L) != 0) - { - _headers._Date = default; - if((tempBits & ~0x4L) == 0) - { - return; + if (ReferenceEquals(HeaderNames.ContentEncoding, key)) + { + if ((_bits & 0x2000L) != 0) + { + _bits &= ~0x2000L; + _headers._ContentEncoding = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.ContentLanguage, key)) + { + if ((_bits & 0x4000L) != 0) + { + _bits &= ~0x4000L; + _headers._ContentLanguage = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.ContentLocation, key)) + { + if ((_bits & 0x8000L) != 0) + { + _bits &= ~0x8000L; + _headers._ContentLocation = default(StringValues); + return true; + } + return false; + } + + if (HeaderNames.ContentEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x2000L) != 0) + { + _bits &= ~0x2000L; + _headers._ContentEncoding = default(StringValues); + return true; + } + return false; + } + if (HeaderNames.ContentLanguage.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x4000L) != 0) + { + _bits &= ~0x4000L; + _headers._ContentLanguage = default(StringValues); + return true; + } + return false; + } + if (HeaderNames.ContentLocation.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x8000L) != 0) + { + _bits &= ~0x8000L; + _headers._ContentLocation = default(StringValues); + return true; + } + return false; + } + break; } - tempBits &= ~0x4L; - } - - if ((tempBits & 0x8L) != 0) - { - _headers._GrpcEncoding = default; - if((tempBits & ~0x8L) == 0) + case 17: { - return; + if (ReferenceEquals(HeaderNames.TransferEncoding, key)) + { + if ((_bits & 0x80L) != 0) + { + _bits &= ~0x80L; + _headers._TransferEncoding = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.IfModifiedSince, key)) + { + if ((_bits & 0x1000000000L) != 0) + { + _bits &= ~0x1000000000L; + _headers._IfModifiedSince = default(StringValues); + return true; + } + return false; + } + + if (HeaderNames.TransferEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x80L) != 0) + { + _bits &= ~0x80L; + _headers._TransferEncoding = default(StringValues); + return true; + } + return false; + } + if (HeaderNames.IfModifiedSince.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x1000000000L) != 0) + { + _bits &= ~0x1000000000L; + _headers._IfModifiedSince = default(StringValues); + return true; + } + return false; + } + break; } - tempBits &= ~0x8L; - } - - if ((tempBits & 0x10L) != 0) - { - _headers._KeepAlive = default; - if((tempBits & ~0x10L) == 0) + case 19: { - return; + if (ReferenceEquals(HeaderNames.IfUnmodifiedSince, key)) + { + if ((_bits & 0x8000000000L) != 0) + { + _bits &= ~0x8000000000L; + _headers._IfUnmodifiedSince = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.ProxyAuthorization, key)) + { + if ((_bits & 0x20000000000L) != 0) + { + _bits &= ~0x20000000000L; + _headers._ProxyAuthorization = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.CorrelationContext, key)) + { + if ((_bits & 0x2000000000000L) != 0) + { + _bits &= ~0x2000000000000L; + _headers._CorrelationContext = default(StringValues); + return true; + } + return false; + } + + if (HeaderNames.IfUnmodifiedSince.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x8000000000L) != 0) + { + _bits &= ~0x8000000000L; + _headers._IfUnmodifiedSince = default(StringValues); + return true; + } + return false; + } + if (HeaderNames.ProxyAuthorization.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x20000000000L) != 0) + { + _bits &= ~0x20000000000L; + _headers._ProxyAuthorization = default(StringValues); + return true; + } + return false; + } + if (HeaderNames.CorrelationContext.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x2000000000000L) != 0) + { + _bits &= ~0x2000000000000L; + _headers._CorrelationContext = default(StringValues); + return true; + } + return false; + } + break; } - tempBits &= ~0x10L; - } - - if ((tempBits & 0x20L) != 0) - { - _headers._Pragma = default; - if((tempBits & ~0x20L) == 0) + case 20: { - return; + if (ReferenceEquals(HeaderNames.GrpcAcceptEncoding, key)) + { + if ((_bits & 0x100000000L) != 0) + { + _bits &= ~0x100000000L; + _headers._GrpcAcceptEncoding = default(StringValues); + return true; + } + return false; + } + + if (HeaderNames.GrpcAcceptEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x100000000L) != 0) + { + _bits &= ~0x100000000L; + _headers._GrpcAcceptEncoding = default(StringValues); + return true; + } + return false; + } + break; } - tempBits &= ~0x20L; - } - - if ((tempBits & 0x40L) != 0) - { - _headers._Trailer = default; - if((tempBits & ~0x40L) == 0) + case 25: { - return; + if (ReferenceEquals(HeaderNames.UpgradeInsecureRequests, key)) + { + if ((_bits & 0x800000000000L) != 0) + { + _bits &= ~0x800000000000L; + _headers._UpgradeInsecureRequests = default(StringValues); + return true; + } + return false; + } + + if (HeaderNames.UpgradeInsecureRequests.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x800000000000L) != 0) + { + _bits &= ~0x800000000000L; + _headers._UpgradeInsecureRequests = default(StringValues); + return true; + } + return false; + } + break; } - tempBits &= ~0x40L; - } - + case 29: + { + if (ReferenceEquals(HeaderNames.AccessControlRequestMethod, key)) + { + if ((_bits & 0x40000000000000L) != 0) + { + _bits &= ~0x40000000000000L; + _headers._AccessControlRequestMethod = default(StringValues); + return true; + } + return false; + } + + if (HeaderNames.AccessControlRequestMethod.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x40000000000000L) != 0) + { + _bits &= ~0x40000000000000L; + _headers._AccessControlRequestMethod = default(StringValues); + return true; + } + return false; + } + break; + } + case 30: + { + if (ReferenceEquals(HeaderNames.AccessControlRequestHeaders, key)) + { + if ((_bits & 0x80000000000000L) != 0) + { + _bits &= ~0x80000000000000L; + _headers._AccessControlRequestHeaders = default(StringValues); + return true; + } + return false; + } + + if (HeaderNames.AccessControlRequestHeaders.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x80000000000000L) != 0) + { + _bits &= ~0x80000000000000L; + _headers._AccessControlRequestHeaders = default(StringValues); + return true; + } + return false; + } + break; + } + } + + return RemoveUnknown(key); + } + private void Clear(long bitsToClear) + { + var tempBits = bitsToClear; + + if ((tempBits & 0x2L) != 0) + { + _headers._Connection = default; + if((tempBits & ~0x2L) == 0) + { + return; + } + tempBits &= ~0x2L; + } + + if ((tempBits & 0x1000000L) != 0) + { + _headers._Accept = default; + if((tempBits & ~0x1000000L) == 0) + { + return; + } + tempBits &= ~0x1000000L; + } + + if ((tempBits & 0x400000000L) != 0) + { + _headers._Host = default; + if((tempBits & ~0x400000000L) == 0) + { + return; + } + tempBits &= ~0x400000000L; + } + + if ((tempBits & 0x400000000000L) != 0) + { + _headers._UserAgent = default; + if((tempBits & ~0x400000000000L) == 0) + { + return; + } + tempBits &= ~0x400000000000L; + } + + if ((tempBits & 0x1L) != 0) + { + _headers._CacheControl = default; + if((tempBits & ~0x1L) == 0) + { + return; + } + tempBits &= ~0x1L; + } + + if ((tempBits & 0x4L) != 0) + { + _headers._Date = default; + if((tempBits & ~0x4L) == 0) + { + return; + } + tempBits &= ~0x4L; + } + + if ((tempBits & 0x8L) != 0) + { + _headers._GrpcEncoding = default; + if((tempBits & ~0x8L) == 0) + { + return; + } + tempBits &= ~0x8L; + } + + if ((tempBits & 0x10L) != 0) + { + _headers._KeepAlive = default; + if((tempBits & ~0x10L) == 0) + { + return; + } + tempBits &= ~0x10L; + } + + if ((tempBits & 0x20L) != 0) + { + _headers._Pragma = default; + if((tempBits & ~0x20L) == 0) + { + return; + } + tempBits &= ~0x20L; + } + + if ((tempBits & 0x40L) != 0) + { + _headers._Trailer = default; + if((tempBits & ~0x40L) == 0) + { + return; + } + tempBits &= ~0x40L; + } + if ((tempBits & 0x80L) != 0) { _headers._TransferEncoding = default; @@ -8073,7 +9366,7 @@ public bool MoveNext() } } - internal partial class HttpResponseHeaders + internal partial class HttpResponseHeaders : IHeaderDictionary { private static ReadOnlySpan HeaderBytes => new byte[] { @@ -8086,24 +9379,7 @@ internal partial class HttpResponseHeaders public bool HasTransferEncoding => (_bits & 0x80L) != 0; public bool HasServer => (_bits & 0x10000000L) != 0; - - public StringValues HeaderCacheControl - { - get - { - StringValues value = default; - if ((_bits & 0x1L) != 0) - { - value = _headers._CacheControl; - } - return value; - } - set - { - _bits |= 0x1L; - _headers._CacheControl = value; - } - } + public override StringValues HeaderConnection { get @@ -8122,1548 +9398,2176 @@ public override StringValues HeaderConnection _headers._rawConnection = null; } } - public StringValues HeaderDate + public StringValues HeaderTransferEncoding { get { StringValues value = default; - if ((_bits & 0x4L) != 0) + if ((_bits & 0x80L) != 0) { - value = _headers._Date; + value = _headers._TransferEncoding; } return value; } set { - _bits |= 0x4L; - _headers._Date = value; - _headers._rawDate = null; + _bits |= 0x80L; + _headers._TransferEncoding = value; + _headers._rawTransferEncoding = null; } } - public StringValues HeaderGrpcEncoding + public StringValues HeaderAllow { get { StringValues value = default; - if ((_bits & 0x8L) != 0) + if ((_bits & 0x800L) != 0) { - value = _headers._GrpcEncoding; + value = _headers._Allow; } return value; } set { - _bits |= 0x8L; - _headers._GrpcEncoding = value; + _bits |= 0x800L; + _headers._Allow = value; } } - public StringValues HeaderKeepAlive + public StringValues HeaderAltSvc { get { StringValues value = default; - if ((_bits & 0x10L) != 0) + if ((_bits & 0x400000L) != 0) { - value = _headers._KeepAlive; + value = _headers._AltSvc; } return value; } set { - _bits |= 0x10L; - _headers._KeepAlive = value; + _bits |= 0x400000L; + _headers._AltSvc = value; } } - public StringValues HeaderPragma + public StringValues HeaderContentLength { get { StringValues value = default; - if ((_bits & 0x20L) != 0) + if (_contentLength.HasValue) { - value = _headers._Pragma; + value = new StringValues(HeaderUtilities.FormatNonNegativeInt64(_contentLength.Value)); } return value; } set { - _bits |= 0x20L; - _headers._Pragma = value; + _contentLength = ParseContentLength(value); } } - public StringValues HeaderTrailer + + StringValues IHeaderDictionary.CacheControl { get { - StringValues value = default; - if ((_bits & 0x40L) != 0) + var value = _headers._CacheControl; + if ((_bits & 0x1L) != 0) { - value = _headers._Trailer; + return value; } - return value; + return default; } set { - _bits |= 0x40L; - _headers._Trailer = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x1L; + if (value.Count > 0) + { + _bits |= flag; + _headers._CacheControl = value; + } + else + { + _bits &= ~flag; + _headers._CacheControl = default; + } } } - public StringValues HeaderTransferEncoding + StringValues IHeaderDictionary.Connection { get { - StringValues value = default; - if ((_bits & 0x80L) != 0) + var value = _headers._Connection; + if ((_bits & 0x2L) != 0) { - value = _headers._TransferEncoding; + return value; } - return value; + return default; } set { - _bits |= 0x80L; - _headers._TransferEncoding = value; - _headers._rawTransferEncoding = null; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x2L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Connection = value; + } + else + { + _bits &= ~flag; + _headers._Connection = default; + } + _headers._rawConnection = null; } } - public StringValues HeaderUpgrade + StringValues IHeaderDictionary.Date { get { - StringValues value = default; - if ((_bits & 0x100L) != 0) + var value = _headers._Date; + if ((_bits & 0x4L) != 0) { - value = _headers._Upgrade; + return value; } - return value; + return default; } set { - _bits |= 0x100L; - _headers._Upgrade = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x4L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Date = value; + } + else + { + _bits &= ~flag; + _headers._Date = default; + } + _headers._rawDate = null; } } - public StringValues HeaderVia + StringValues IHeaderDictionary.GrpcEncoding { get { - StringValues value = default; - if ((_bits & 0x200L) != 0) + var value = _headers._GrpcEncoding; + if ((_bits & 0x8L) != 0) { - value = _headers._Via; + return value; } - return value; + return default; } set { - _bits |= 0x200L; - _headers._Via = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x8L; + if (value.Count > 0) + { + _bits |= flag; + _headers._GrpcEncoding = value; + } + else + { + _bits &= ~flag; + _headers._GrpcEncoding = default; + } } } - public StringValues HeaderWarning + StringValues IHeaderDictionary.KeepAlive { get { - StringValues value = default; - if ((_bits & 0x400L) != 0) + var value = _headers._KeepAlive; + if ((_bits & 0x10L) != 0) { - value = _headers._Warning; + return value; } - return value; + return default; } set { - _bits |= 0x400L; - _headers._Warning = value; - } - } - public StringValues HeaderAllow - { - get - { - StringValues value = default; - if ((_bits & 0x800L) != 0) + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x10L; + if (value.Count > 0) { - value = _headers._Allow; + _bits |= flag; + _headers._KeepAlive = value; + } + else + { + _bits &= ~flag; + _headers._KeepAlive = default; } - return value; - } - set - { - _bits |= 0x800L; - _headers._Allow = value; } } - public StringValues HeaderContentType + StringValues IHeaderDictionary.Pragma { get { - StringValues value = default; - if ((_bits & 0x1000L) != 0) + var value = _headers._Pragma; + if ((_bits & 0x20L) != 0) { - value = _headers._ContentType; + return value; } - return value; + return default; } set { - _bits |= 0x1000L; - _headers._ContentType = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x20L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Pragma = value; + } + else + { + _bits &= ~flag; + _headers._Pragma = default; + } } } - public StringValues HeaderContentEncoding + StringValues IHeaderDictionary.Trailer { get { - StringValues value = default; - if ((_bits & 0x2000L) != 0) + var value = _headers._Trailer; + if ((_bits & 0x40L) != 0) { - value = _headers._ContentEncoding; + return value; } - return value; + return default; } set { - _bits |= 0x2000L; - _headers._ContentEncoding = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x40L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Trailer = value; + } + else + { + _bits &= ~flag; + _headers._Trailer = default; + } } } - public StringValues HeaderContentLanguage + StringValues IHeaderDictionary.TransferEncoding { get { - StringValues value = default; - if ((_bits & 0x4000L) != 0) + var value = _headers._TransferEncoding; + if ((_bits & 0x80L) != 0) { - value = _headers._ContentLanguage; + return value; } - return value; + return default; } set { - _bits |= 0x4000L; - _headers._ContentLanguage = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x80L; + if (value.Count > 0) + { + _bits |= flag; + _headers._TransferEncoding = value; + } + else + { + _bits &= ~flag; + _headers._TransferEncoding = default; + } + _headers._rawTransferEncoding = null; } } - public StringValues HeaderContentLocation + StringValues IHeaderDictionary.Upgrade { get { - StringValues value = default; - if ((_bits & 0x8000L) != 0) + var value = _headers._Upgrade; + if ((_bits & 0x100L) != 0) { - value = _headers._ContentLocation; + return value; } - return value; + return default; } set { - _bits |= 0x8000L; - _headers._ContentLocation = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x100L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Upgrade = value; + } + else + { + _bits &= ~flag; + _headers._Upgrade = default; + } } } - public StringValues HeaderContentMD5 + StringValues IHeaderDictionary.Via { get { - StringValues value = default; - if ((_bits & 0x10000L) != 0) + var value = _headers._Via; + if ((_bits & 0x200L) != 0) { - value = _headers._ContentMD5; + return value; } - return value; + return default; } set { - _bits |= 0x10000L; - _headers._ContentMD5 = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x200L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Via = value; + } + else + { + _bits &= ~flag; + _headers._Via = default; + } } } - public StringValues HeaderContentRange + StringValues IHeaderDictionary.Warning { get { - StringValues value = default; - if ((_bits & 0x20000L) != 0) + var value = _headers._Warning; + if ((_bits & 0x400L) != 0) { - value = _headers._ContentRange; + return value; } - return value; + return default; } set { - _bits |= 0x20000L; - _headers._ContentRange = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x400L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Warning = value; + } + else + { + _bits &= ~flag; + _headers._Warning = default; + } } } - public StringValues HeaderExpires + StringValues IHeaderDictionary.Allow { get { - StringValues value = default; - if ((_bits & 0x40000L) != 0) + var value = _headers._Allow; + if ((_bits & 0x800L) != 0) { - value = _headers._Expires; + return value; } - return value; + return default; } set { - _bits |= 0x40000L; - _headers._Expires = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x800L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Allow = value; + } + else + { + _bits &= ~flag; + _headers._Allow = default; + } } } - public StringValues HeaderLastModified + StringValues IHeaderDictionary.ContentType { get { - StringValues value = default; - if ((_bits & 0x80000L) != 0) + var value = _headers._ContentType; + if ((_bits & 0x1000L) != 0) { - value = _headers._LastModified; + return value; } - return value; + return default; } set { - _bits |= 0x80000L; - _headers._LastModified = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x1000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._ContentType = value; + } + else + { + _bits &= ~flag; + _headers._ContentType = default; + } } } - public StringValues HeaderAcceptRanges + StringValues IHeaderDictionary.ContentEncoding { get { - StringValues value = default; - if ((_bits & 0x100000L) != 0) + var value = _headers._ContentEncoding; + if ((_bits & 0x2000L) != 0) { - value = _headers._AcceptRanges; + return value; } - return value; + return default; } set { - _bits |= 0x100000L; - _headers._AcceptRanges = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x2000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._ContentEncoding = value; + } + else + { + _bits &= ~flag; + _headers._ContentEncoding = default; + } } } - public StringValues HeaderAge + StringValues IHeaderDictionary.ContentLanguage { get { - StringValues value = default; - if ((_bits & 0x200000L) != 0) + var value = _headers._ContentLanguage; + if ((_bits & 0x4000L) != 0) { - value = _headers._Age; + return value; } - return value; + return default; } set { - _bits |= 0x200000L; - _headers._Age = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x4000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._ContentLanguage = value; + } + else + { + _bits &= ~flag; + _headers._ContentLanguage = default; + } } } - public StringValues HeaderAltSvc + StringValues IHeaderDictionary.ContentLocation { get { - StringValues value = default; - if ((_bits & 0x400000L) != 0) + var value = _headers._ContentLocation; + if ((_bits & 0x8000L) != 0) { - value = _headers._AltSvc; + return value; } - return value; + return default; } set { - _bits |= 0x400000L; - _headers._AltSvc = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x8000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._ContentLocation = value; + } + else + { + _bits &= ~flag; + _headers._ContentLocation = default; + } } } - public StringValues HeaderETag + StringValues IHeaderDictionary.ContentMD5 { get { - StringValues value = default; - if ((_bits & 0x800000L) != 0) + var value = _headers._ContentMD5; + if ((_bits & 0x10000L) != 0) { - value = _headers._ETag; + return value; } - return value; + return default; } set { - _bits |= 0x800000L; - _headers._ETag = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x10000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._ContentMD5 = value; + } + else + { + _bits &= ~flag; + _headers._ContentMD5 = default; + } } } - public StringValues HeaderLocation + StringValues IHeaderDictionary.ContentRange { get { - StringValues value = default; - if ((_bits & 0x1000000L) != 0) + var value = _headers._ContentRange; + if ((_bits & 0x20000L) != 0) { - value = _headers._Location; + return value; } - return value; + return default; } set { - _bits |= 0x1000000L; - _headers._Location = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x20000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._ContentRange = value; + } + else + { + _bits &= ~flag; + _headers._ContentRange = default; + } } } - public StringValues HeaderProxyAuthenticate + StringValues IHeaderDictionary.Expires { get { - StringValues value = default; - if ((_bits & 0x2000000L) != 0) + var value = _headers._Expires; + if ((_bits & 0x40000L) != 0) { - value = _headers._ProxyAuthenticate; + return value; } - return value; + return default; } set { - _bits |= 0x2000000L; - _headers._ProxyAuthenticate = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x40000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Expires = value; + } + else + { + _bits &= ~flag; + _headers._Expires = default; + } } } - public StringValues HeaderProxyConnection + StringValues IHeaderDictionary.LastModified { get { - StringValues value = default; - if ((_bits & 0x4000000L) != 0) + var value = _headers._LastModified; + if ((_bits & 0x80000L) != 0) { - value = _headers._ProxyConnection; + return value; } - return value; + return default; } set { - _bits |= 0x4000000L; - _headers._ProxyConnection = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x80000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._LastModified = value; + } + else + { + _bits &= ~flag; + _headers._LastModified = default; + } } } - public StringValues HeaderRetryAfter + StringValues IHeaderDictionary.AcceptRanges { get { - StringValues value = default; - if ((_bits & 0x8000000L) != 0) + var value = _headers._AcceptRanges; + if ((_bits & 0x100000L) != 0) { - value = _headers._RetryAfter; + return value; } - return value; + return default; } set { - _bits |= 0x8000000L; - _headers._RetryAfter = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x100000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._AcceptRanges = value; + } + else + { + _bits &= ~flag; + _headers._AcceptRanges = default; + } } } - public StringValues HeaderServer + StringValues IHeaderDictionary.Age { get { - StringValues value = default; - if ((_bits & 0x10000000L) != 0) + var value = _headers._Age; + if ((_bits & 0x200000L) != 0) { - value = _headers._Server; + return value; } - return value; + return default; } set { - _bits |= 0x10000000L; - _headers._Server = value; - _headers._rawServer = null; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x200000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Age = value; + } + else + { + _bits &= ~flag; + _headers._Age = default; + } } } - public StringValues HeaderSetCookie + StringValues IHeaderDictionary.AltSvc { get { - StringValues value = default; - if ((_bits & 0x20000000L) != 0) + var value = _headers._AltSvc; + if ((_bits & 0x400000L) != 0) { - value = _headers._SetCookie; + return value; } - return value; + return default; } set { - _bits |= 0x20000000L; - _headers._SetCookie = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x400000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._AltSvc = value; + } + else + { + _bits &= ~flag; + _headers._AltSvc = default; + } } } - public StringValues HeaderVary + StringValues IHeaderDictionary.ETag { get { - StringValues value = default; - if ((_bits & 0x40000000L) != 0) + var value = _headers._ETag; + if ((_bits & 0x800000L) != 0) { - value = _headers._Vary; + return value; } - return value; + return default; } set { - _bits |= 0x40000000L; - _headers._Vary = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x800000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._ETag = value; + } + else + { + _bits &= ~flag; + _headers._ETag = default; + } } } - public StringValues HeaderWWWAuthenticate + StringValues IHeaderDictionary.Location { get { - StringValues value = default; - if ((_bits & 0x80000000L) != 0) + var value = _headers._Location; + if ((_bits & 0x1000000L) != 0) { - value = _headers._WWWAuthenticate; + return value; } - return value; + return default; } set { - _bits |= 0x80000000L; - _headers._WWWAuthenticate = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x1000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Location = value; + } + else + { + _bits &= ~flag; + _headers._Location = default; + } } } - public StringValues HeaderAccessControlAllowCredentials + StringValues IHeaderDictionary.ProxyAuthenticate { get { - StringValues value = default; - if ((_bits & 0x100000000L) != 0) + var value = _headers._ProxyAuthenticate; + if ((_bits & 0x2000000L) != 0) { - value = _headers._AccessControlAllowCredentials; + return value; } - return value; + return default; } set { - _bits |= 0x100000000L; - _headers._AccessControlAllowCredentials = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x2000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._ProxyAuthenticate = value; + } + else + { + _bits &= ~flag; + _headers._ProxyAuthenticate = default; + } } } - public StringValues HeaderAccessControlAllowHeaders + StringValues IHeaderDictionary.ProxyConnection { get { - StringValues value = default; - if ((_bits & 0x200000000L) != 0) + var value = _headers._ProxyConnection; + if ((_bits & 0x4000000L) != 0) { - value = _headers._AccessControlAllowHeaders; + return value; } - return value; + return default; } set { - _bits |= 0x200000000L; - _headers._AccessControlAllowHeaders = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x4000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._ProxyConnection = value; + } + else + { + _bits &= ~flag; + _headers._ProxyConnection = default; + } } } - public StringValues HeaderAccessControlAllowMethods + StringValues IHeaderDictionary.RetryAfter { get { - StringValues value = default; + var value = _headers._RetryAfter; + if ((_bits & 0x8000000L) != 0) + { + return value; + } + return default; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x8000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._RetryAfter = value; + } + else + { + _bits &= ~flag; + _headers._RetryAfter = default; + } + } + } + StringValues IHeaderDictionary.Server + { + get + { + var value = _headers._Server; + if ((_bits & 0x10000000L) != 0) + { + return value; + } + return default; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x10000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Server = value; + } + else + { + _bits &= ~flag; + _headers._Server = default; + } + _headers._rawServer = null; + } + } + StringValues IHeaderDictionary.SetCookie + { + get + { + var value = _headers._SetCookie; + if ((_bits & 0x20000000L) != 0) + { + return value; + } + return default; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x20000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._SetCookie = value; + } + else + { + _bits &= ~flag; + _headers._SetCookie = default; + } + } + } + StringValues IHeaderDictionary.Vary + { + get + { + var value = _headers._Vary; + if ((_bits & 0x40000000L) != 0) + { + return value; + } + return default; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x40000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._Vary = value; + } + else + { + _bits &= ~flag; + _headers._Vary = default; + } + } + } + StringValues IHeaderDictionary.WWWAuthenticate + { + get + { + var value = _headers._WWWAuthenticate; + if ((_bits & 0x80000000L) != 0) + { + return value; + } + return default; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x80000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._WWWAuthenticate = value; + } + else + { + _bits &= ~flag; + _headers._WWWAuthenticate = default; + } + } + } + StringValues IHeaderDictionary.AccessControlAllowCredentials + { + get + { + var value = _headers._AccessControlAllowCredentials; + if ((_bits & 0x100000000L) != 0) + { + return value; + } + return default; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x100000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._AccessControlAllowCredentials = value; + } + else + { + _bits &= ~flag; + _headers._AccessControlAllowCredentials = default; + } + } + } + StringValues IHeaderDictionary.AccessControlAllowHeaders + { + get + { + var value = _headers._AccessControlAllowHeaders; + if ((_bits & 0x200000000L) != 0) + { + return value; + } + return default; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x200000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._AccessControlAllowHeaders = value; + } + else + { + _bits &= ~flag; + _headers._AccessControlAllowHeaders = default; + } + } + } + StringValues IHeaderDictionary.AccessControlAllowMethods + { + get + { + var value = _headers._AccessControlAllowMethods; if ((_bits & 0x400000000L) != 0) { - value = _headers._AccessControlAllowMethods; + return value; } - return value; + return default; } set { - _bits |= 0x400000000L; - _headers._AccessControlAllowMethods = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x400000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._AccessControlAllowMethods = value; + } + else + { + _bits &= ~flag; + _headers._AccessControlAllowMethods = default; + } } } - public StringValues HeaderAccessControlAllowOrigin + StringValues IHeaderDictionary.AccessControlAllowOrigin { get { - StringValues value = default; + var value = _headers._AccessControlAllowOrigin; if ((_bits & 0x800000000L) != 0) { - value = _headers._AccessControlAllowOrigin; + return value; } - return value; + return default; } set { - _bits |= 0x800000000L; - _headers._AccessControlAllowOrigin = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x800000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._AccessControlAllowOrigin = value; + } + else + { + _bits &= ~flag; + _headers._AccessControlAllowOrigin = default; + } } } - public StringValues HeaderAccessControlExposeHeaders + StringValues IHeaderDictionary.AccessControlExposeHeaders { get { - StringValues value = default; + var value = _headers._AccessControlExposeHeaders; if ((_bits & 0x1000000000L) != 0) { - value = _headers._AccessControlExposeHeaders; + return value; } - return value; + return default; } set { - _bits |= 0x1000000000L; - _headers._AccessControlExposeHeaders = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x1000000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._AccessControlExposeHeaders = value; + } + else + { + _bits &= ~flag; + _headers._AccessControlExposeHeaders = default; + } } } - public StringValues HeaderAccessControlMaxAge + StringValues IHeaderDictionary.AccessControlMaxAge { get { - StringValues value = default; + var value = _headers._AccessControlMaxAge; if ((_bits & 0x2000000000L) != 0) { - value = _headers._AccessControlMaxAge; + return value; } - return value; + return default; } set { - _bits |= 0x2000000000L; - _headers._AccessControlMaxAge = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x2000000000L; + if (value.Count > 0) + { + _bits |= flag; + _headers._AccessControlMaxAge = value; + } + else + { + _bits &= ~flag; + _headers._AccessControlMaxAge = default; + } } } - public StringValues HeaderContentLength + + StringValues IHeaderDictionary.Accept { get { StringValues value = default; - if (_contentLength.HasValue) + if (!TryGetUnknown(HeaderNames.Accept, ref value)) { - value = new StringValues(HeaderUtilities.FormatNonNegativeInt64(_contentLength.Value)); + value = default; } return value; } set { - _contentLength = ParseContentLength(value); + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Accept, value); } } - - public void SetRawConnection(StringValues value, byte[] raw) + StringValues IHeaderDictionary.AcceptCharset { - _bits |= 0x2L; - _headers._Connection = value; - _headers._rawConnection = raw; + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.AcceptCharset, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.AcceptCharset, value); + } } - public void SetRawDate(StringValues value, byte[] raw) + StringValues IHeaderDictionary.AcceptEncoding { - _bits |= 0x4L; - _headers._Date = value; - _headers._rawDate = raw; + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.AcceptEncoding, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.AcceptEncoding, value); + } } - public void SetRawTransferEncoding(StringValues value, byte[] raw) + StringValues IHeaderDictionary.AcceptLanguage { - _bits |= 0x80L; - _headers._TransferEncoding = value; - _headers._rawTransferEncoding = raw; + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.AcceptLanguage, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.AcceptLanguage, value); + } } - public void SetRawServer(StringValues value, byte[] raw) + StringValues IHeaderDictionary.AccessControlRequestHeaders { - _bits |= 0x10000000L; - _headers._Server = value; - _headers._rawServer = raw; + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.AccessControlRequestHeaders, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.AccessControlRequestHeaders, value); + } } - protected override int GetCountFast() + StringValues IHeaderDictionary.AccessControlRequestMethod { - return (_contentLength.HasValue ? 1 : 0 ) + BitOperations.PopCount((ulong)_bits) + (MaybeUnknown?.Count ?? 0); - } + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.AccessControlRequestMethod, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - protected override bool TryGetValueFast(string key, out StringValues value) + SetValueUnknown(HeaderNames.AccessControlRequestMethod, value); + } + } + StringValues IHeaderDictionary.Authorization { - value = default; - switch (key.Length) + get { - case 3: + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Authorization, ref value)) { - if (ReferenceEquals(HeaderNames.Via, key)) - { - if ((_bits & 0x200L) != 0) - { - value = _headers._Via; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.Age, key)) - { - if ((_bits & 0x200000L) != 0) - { - value = _headers._Age; - return true; - } - return false; - } + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - if (HeaderNames.Via.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x200L) != 0) - { - value = _headers._Via; - return true; - } - return false; - } - if (HeaderNames.Age.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x200000L) != 0) - { - value = _headers._Age; - return true; - } - return false; - } - break; + SetValueUnknown(HeaderNames.Authorization, value); + } + } + StringValues IHeaderDictionary.Baggage + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Baggage, ref value)) + { + value = default; } - case 4: + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Baggage, value); + } + } + StringValues IHeaderDictionary.ContentDisposition + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.ContentDisposition, ref value)) { - if (ReferenceEquals(HeaderNames.Date, key)) - { - if ((_bits & 0x4L) != 0) - { - value = _headers._Date; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.ETag, key)) - { - if ((_bits & 0x800000L) != 0) - { - value = _headers._ETag; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.Vary, key)) - { - if ((_bits & 0x40000000L) != 0) - { - value = _headers._Vary; - return true; - } - return false; - } + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - if (HeaderNames.Date.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x4L) != 0) - { - value = _headers._Date; - return true; - } - return false; - } - if (HeaderNames.ETag.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x800000L) != 0) - { - value = _headers._ETag; - return true; - } - return false; - } - if (HeaderNames.Vary.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x40000000L) != 0) - { - value = _headers._Vary; - return true; - } - return false; - } - break; + SetValueUnknown(HeaderNames.ContentDisposition, value); + } + } + StringValues IHeaderDictionary.ContentSecurityPolicy + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.ContentSecurityPolicy, ref value)) + { + value = default; } - case 5: + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.ContentSecurityPolicy, value); + } + } + StringValues IHeaderDictionary.ContentSecurityPolicyReportOnly + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.ContentSecurityPolicyReportOnly, ref value)) { - if (ReferenceEquals(HeaderNames.Allow, key)) - { - if ((_bits & 0x800L) != 0) - { - value = _headers._Allow; - return true; - } - return false; - } + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - if (HeaderNames.Allow.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x800L) != 0) - { - value = _headers._Allow; - return true; - } - return false; - } - break; + SetValueUnknown(HeaderNames.ContentSecurityPolicyReportOnly, value); + } + } + StringValues IHeaderDictionary.CorrelationContext + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.CorrelationContext, ref value)) + { + value = default; } - case 6: + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.CorrelationContext, value); + } + } + StringValues IHeaderDictionary.Cookie + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Cookie, ref value)) { - if (ReferenceEquals(HeaderNames.Server, key)) - { - if ((_bits & 0x10000000L) != 0) - { - value = _headers._Server; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.Pragma, key)) - { - if ((_bits & 0x20L) != 0) - { - value = _headers._Pragma; - return true; - } - return false; - } + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - if (HeaderNames.Server.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x10000000L) != 0) - { - value = _headers._Server; - return true; - } - return false; - } - if (HeaderNames.Pragma.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x20L) != 0) - { - value = _headers._Pragma; - return true; - } - return false; - } - break; + SetValueUnknown(HeaderNames.Cookie, value); + } + } + StringValues IHeaderDictionary.Expect + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Expect, ref value)) + { + value = default; } - case 7: + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Expect, value); + } + } + StringValues IHeaderDictionary.From + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.From, ref value)) { - if (ReferenceEquals(HeaderNames.Trailer, key)) - { - if ((_bits & 0x40L) != 0) - { - value = _headers._Trailer; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.Upgrade, key)) - { - if ((_bits & 0x100L) != 0) - { - value = _headers._Upgrade; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.Warning, key)) - { - if ((_bits & 0x400L) != 0) - { - value = _headers._Warning; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.Expires, key)) - { - if ((_bits & 0x40000L) != 0) - { - value = _headers._Expires; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.AltSvc, key)) - { - if ((_bits & 0x400000L) != 0) - { - value = _headers._AltSvc; - return true; - } - return false; - } + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - if (HeaderNames.Trailer.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x40L) != 0) - { - value = _headers._Trailer; - return true; - } - return false; - } - if (HeaderNames.Upgrade.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x100L) != 0) - { - value = _headers._Upgrade; - return true; - } - return false; - } - if (HeaderNames.Warning.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x400L) != 0) - { - value = _headers._Warning; - return true; - } - return false; - } - if (HeaderNames.Expires.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x40000L) != 0) - { - value = _headers._Expires; - return true; - } - return false; - } - if (HeaderNames.AltSvc.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x400000L) != 0) - { - value = _headers._AltSvc; - return true; - } - return false; - } - break; + SetValueUnknown(HeaderNames.From, value); + } + } + StringValues IHeaderDictionary.GrpcAcceptEncoding + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.GrpcAcceptEncoding, ref value)) + { + value = default; } - case 8: + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.GrpcAcceptEncoding, value); + } + } + StringValues IHeaderDictionary.GrpcMessage + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.GrpcMessage, ref value)) { - if (ReferenceEquals(HeaderNames.Location, key)) - { - if ((_bits & 0x1000000L) != 0) - { - value = _headers._Location; - return true; - } - return false; - } + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - if (HeaderNames.Location.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x1000000L) != 0) - { - value = _headers._Location; - return true; - } - return false; - } - break; + SetValueUnknown(HeaderNames.GrpcMessage, value); + } + } + StringValues IHeaderDictionary.GrpcStatus + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.GrpcStatus, ref value)) + { + value = default; } - case 10: + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.GrpcStatus, value); + } + } + StringValues IHeaderDictionary.GrpcTimeout + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.GrpcTimeout, ref value)) { - if (ReferenceEquals(HeaderNames.Connection, key)) - { - if ((_bits & 0x2L) != 0) - { - value = _headers._Connection; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.KeepAlive, key)) - { - if ((_bits & 0x10L) != 0) - { - value = _headers._KeepAlive; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.SetCookie, key)) - { - if ((_bits & 0x20000000L) != 0) - { - value = _headers._SetCookie; - return true; - } - return false; - } + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - if (HeaderNames.Connection.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x2L) != 0) - { - value = _headers._Connection; - return true; - } - return false; - } - if (HeaderNames.KeepAlive.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x10L) != 0) - { - value = _headers._KeepAlive; - return true; - } - return false; - } - if (HeaderNames.SetCookie.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x20000000L) != 0) - { - value = _headers._SetCookie; - return true; - } - return false; - } - break; + SetValueUnknown(HeaderNames.GrpcTimeout, value); + } + } + StringValues IHeaderDictionary.Host + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Host, ref value)) + { + value = default; } - case 11: + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Host, value); + } + } + StringValues IHeaderDictionary.IfMatch + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.IfMatch, ref value)) { - if (ReferenceEquals(HeaderNames.ContentMD5, key)) - { - if ((_bits & 0x10000L) != 0) - { - value = _headers._ContentMD5; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.RetryAfter, key)) - { - if ((_bits & 0x8000000L) != 0) - { - value = _headers._RetryAfter; - return true; - } - return false; - } + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - if (HeaderNames.ContentMD5.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x10000L) != 0) - { - value = _headers._ContentMD5; - return true; - } - return false; - } - if (HeaderNames.RetryAfter.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x8000000L) != 0) - { - value = _headers._RetryAfter; - return true; - } - return false; - } - break; + SetValueUnknown(HeaderNames.IfMatch, value); + } + } + StringValues IHeaderDictionary.IfModifiedSince + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.IfModifiedSince, ref value)) + { + value = default; } - case 12: + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.IfModifiedSince, value); + } + } + StringValues IHeaderDictionary.IfNoneMatch + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.IfNoneMatch, ref value)) { - if (ReferenceEquals(HeaderNames.ContentType, key)) - { - if ((_bits & 0x1000L) != 0) - { - value = _headers._ContentType; - return true; - } - return false; - } + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - if (HeaderNames.ContentType.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x1000L) != 0) - { - value = _headers._ContentType; - return true; - } - return false; - } - break; + SetValueUnknown(HeaderNames.IfNoneMatch, value); + } + } + StringValues IHeaderDictionary.IfRange + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.IfRange, ref value)) + { + value = default; } - case 13: + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.IfRange, value); + } + } + StringValues IHeaderDictionary.IfUnmodifiedSince + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.IfUnmodifiedSince, ref value)) { - if (ReferenceEquals(HeaderNames.CacheControl, key)) - { - if ((_bits & 0x1L) != 0) - { - value = _headers._CacheControl; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.GrpcEncoding, key)) - { - if ((_bits & 0x8L) != 0) - { - value = _headers._GrpcEncoding; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.ContentRange, key)) - { - if ((_bits & 0x20000L) != 0) - { - value = _headers._ContentRange; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.LastModified, key)) - { - if ((_bits & 0x80000L) != 0) - { - value = _headers._LastModified; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.AcceptRanges, key)) - { - if ((_bits & 0x100000L) != 0) - { - value = _headers._AcceptRanges; - return true; - } - return false; - } + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - if (HeaderNames.CacheControl.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x1L) != 0) - { - value = _headers._CacheControl; - return true; - } - return false; - } - if (HeaderNames.GrpcEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x8L) != 0) - { - value = _headers._GrpcEncoding; - return true; - } - return false; - } - if (HeaderNames.ContentRange.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x20000L) != 0) - { - value = _headers._ContentRange; - return true; - } - return false; - } - if (HeaderNames.LastModified.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x80000L) != 0) - { - value = _headers._LastModified; - return true; - } - return false; - } - if (HeaderNames.AcceptRanges.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x100000L) != 0) - { - value = _headers._AcceptRanges; - return true; - } - return false; - } - break; + SetValueUnknown(HeaderNames.IfUnmodifiedSince, value); + } + } + StringValues IHeaderDictionary.Link + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Link, ref value)) + { + value = default; } - case 14: + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Link, value); + } + } + StringValues IHeaderDictionary.MaxForwards + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.MaxForwards, ref value)) { - if (ReferenceEquals(HeaderNames.ContentLength, key)) - { - if (_contentLength.HasValue) - { - value = HeaderUtilities.FormatNonNegativeInt64(_contentLength.Value); - return true; - } - return false; - } + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - if (HeaderNames.ContentLength.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if (_contentLength.HasValue) - { - value = HeaderUtilities.FormatNonNegativeInt64(_contentLength.Value); - return true; - } - return false; - } - break; + SetValueUnknown(HeaderNames.MaxForwards, value); + } + } + StringValues IHeaderDictionary.Origin + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Origin, ref value)) + { + value = default; } - case 16: + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Origin, value); + } + } + StringValues IHeaderDictionary.ProxyAuthorization + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.ProxyAuthorization, ref value)) { - if (ReferenceEquals(HeaderNames.ContentEncoding, key)) - { - if ((_bits & 0x2000L) != 0) - { - value = _headers._ContentEncoding; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.ContentLanguage, key)) - { - if ((_bits & 0x4000L) != 0) - { - value = _headers._ContentLanguage; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.ContentLocation, key)) - { - if ((_bits & 0x8000L) != 0) - { - value = _headers._ContentLocation; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.ProxyConnection, key)) - { - if ((_bits & 0x4000000L) != 0) - { - value = _headers._ProxyConnection; - return true; - } - return false; - } - if (ReferenceEquals(HeaderNames.WWWAuthenticate, key)) - { - if ((_bits & 0x80000000L) != 0) - { - value = _headers._WWWAuthenticate; - return true; - } - return false; - } - - if (HeaderNames.ContentEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x2000L) != 0) - { - value = _headers._ContentEncoding; - return true; - } - return false; - } - if (HeaderNames.ContentLanguage.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x4000L) != 0) - { - value = _headers._ContentLanguage; - return true; - } - return false; - } - if (HeaderNames.ContentLocation.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x8000L) != 0) - { - value = _headers._ContentLocation; - return true; - } - return false; - } - if (HeaderNames.ProxyConnection.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x4000000L) != 0) - { - value = _headers._ProxyConnection; - return true; - } - return false; - } - if (HeaderNames.WWWAuthenticate.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x80000000L) != 0) - { - value = _headers._WWWAuthenticate; - return true; - } - return false; - } - break; + value = default; } - case 17: + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.ProxyAuthorization, value); + } + } + StringValues IHeaderDictionary.Range + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Range, ref value)) { - if (ReferenceEquals(HeaderNames.TransferEncoding, key)) - { - if ((_bits & 0x80L) != 0) - { - value = _headers._TransferEncoding; - return true; - } - return false; - } + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - if (HeaderNames.TransferEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x80L) != 0) - { - value = _headers._TransferEncoding; - return true; - } - return false; - } - break; + SetValueUnknown(HeaderNames.Range, value); + } + } + StringValues IHeaderDictionary.Referer + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Referer, ref value)) + { + value = default; } - case 18: + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Referer, value); + } + } + StringValues IHeaderDictionary.RequestId + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.RequestId, ref value)) { - if (ReferenceEquals(HeaderNames.ProxyAuthenticate, key)) - { - if ((_bits & 0x2000000L) != 0) - { - value = _headers._ProxyAuthenticate; - return true; - } - return false; - } + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - if (HeaderNames.ProxyAuthenticate.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x2000000L) != 0) - { - value = _headers._ProxyAuthenticate; - return true; - } - return false; - } - break; + SetValueUnknown(HeaderNames.RequestId, value); + } + } + StringValues IHeaderDictionary.SecWebSocketAccept + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.SecWebSocketAccept, ref value)) + { + value = default; } - case 22: + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.SecWebSocketAccept, value); + } + } + StringValues IHeaderDictionary.SecWebSocketKey + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.SecWebSocketKey, ref value)) { - if (ReferenceEquals(HeaderNames.AccessControlMaxAge, key)) - { - if ((_bits & 0x2000000000L) != 0) - { - value = _headers._AccessControlMaxAge; - return true; - } - return false; - } + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - if (HeaderNames.AccessControlMaxAge.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x2000000000L) != 0) - { - value = _headers._AccessControlMaxAge; - return true; - } - return false; - } - break; + SetValueUnknown(HeaderNames.SecWebSocketKey, value); + } + } + StringValues IHeaderDictionary.SecWebSocketProtocol + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.SecWebSocketProtocol, ref value)) + { + value = default; } - case 27: + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.SecWebSocketProtocol, value); + } + } + StringValues IHeaderDictionary.SecWebSocketVersion + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.SecWebSocketVersion, ref value)) { - if (ReferenceEquals(HeaderNames.AccessControlAllowOrigin, key)) - { - if ((_bits & 0x800000000L) != 0) - { - value = _headers._AccessControlAllowOrigin; - return true; - } - return false; - } + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - if (HeaderNames.AccessControlAllowOrigin.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - if ((_bits & 0x800000000L) != 0) - { - value = _headers._AccessControlAllowOrigin; - return true; - } - return false; - } - break; + SetValueUnknown(HeaderNames.SecWebSocketVersion, value); + } + } + StringValues IHeaderDictionary.StrictTransportSecurity + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.StrictTransportSecurity, ref value)) + { + value = default; } - case 28: + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.StrictTransportSecurity, value); + } + } + StringValues IHeaderDictionary.TE + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.TE, ref value)) { - if (ReferenceEquals(HeaderNames.AccessControlAllowHeaders, key)) - { - if ((_bits & 0x200000000L) != 0) + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.TE, value); + } + } + StringValues IHeaderDictionary.Translate + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Translate, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Translate, value); + } + } + StringValues IHeaderDictionary.TraceParent + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.TraceParent, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.TraceParent, value); + } + } + StringValues IHeaderDictionary.TraceState + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.TraceState, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.TraceState, value); + } + } + StringValues IHeaderDictionary.UpgradeInsecureRequests + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.UpgradeInsecureRequests, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.UpgradeInsecureRequests, value); + } + } + StringValues IHeaderDictionary.UserAgent + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.UserAgent, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.UserAgent, value); + } + } + StringValues IHeaderDictionary.WebSocketSubProtocols + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.WebSocketSubProtocols, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.WebSocketSubProtocols, value); + } + } + StringValues IHeaderDictionary.XContentTypeOptions + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.XContentTypeOptions, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.XContentTypeOptions, value); + } + } + StringValues IHeaderDictionary.XFrameOptions + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.XFrameOptions, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.XFrameOptions, value); + } + } + StringValues IHeaderDictionary.XPoweredBy + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.XPoweredBy, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.XPoweredBy, value); + } + } + StringValues IHeaderDictionary.XRequestedWith + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.XRequestedWith, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.XRequestedWith, value); + } + } + StringValues IHeaderDictionary.XUACompatible + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.XUACompatible, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.XUACompatible, value); + } + } + StringValues IHeaderDictionary.XXSSProtection + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.XXSSProtection, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.XXSSProtection, value); + } + } + + public void SetRawConnection(StringValues value, byte[] raw) + { + _bits |= 0x2L; + _headers._Connection = value; + _headers._rawConnection = raw; + } + public void SetRawDate(StringValues value, byte[] raw) + { + _bits |= 0x4L; + _headers._Date = value; + _headers._rawDate = raw; + } + public void SetRawTransferEncoding(StringValues value, byte[] raw) + { + _bits |= 0x80L; + _headers._TransferEncoding = value; + _headers._rawTransferEncoding = raw; + } + public void SetRawServer(StringValues value, byte[] raw) + { + _bits |= 0x10000000L; + _headers._Server = value; + _headers._rawServer = raw; + } + protected override int GetCountFast() + { + return (_contentLength.HasValue ? 1 : 0 ) + BitOperations.PopCount((ulong)_bits) + (MaybeUnknown?.Count ?? 0); + } + + protected override bool TryGetValueFast(string key, out StringValues value) + { + value = default; + switch (key.Length) + { + case 3: + { + if (ReferenceEquals(HeaderNames.Via, key)) + { + if ((_bits & 0x200L) != 0) { - value = _headers._AccessControlAllowHeaders; + value = _headers._Via; return true; } return false; } - if (ReferenceEquals(HeaderNames.AccessControlAllowMethods, key)) + if (ReferenceEquals(HeaderNames.Age, key)) { - if ((_bits & 0x400000000L) != 0) + if ((_bits & 0x200000L) != 0) { - value = _headers._AccessControlAllowMethods; + value = _headers._Age; return true; } return false; } - if (HeaderNames.AccessControlAllowHeaders.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Via.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x200000000L) != 0) + if ((_bits & 0x200L) != 0) { - value = _headers._AccessControlAllowHeaders; + value = _headers._Via; return true; } return false; } - if (HeaderNames.AccessControlAllowMethods.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Age.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x400000000L) != 0) + if ((_bits & 0x200000L) != 0) { - value = _headers._AccessControlAllowMethods; + value = _headers._Age; return true; } return false; } break; } - case 29: + case 4: { - if (ReferenceEquals(HeaderNames.AccessControlExposeHeaders, key)) + if (ReferenceEquals(HeaderNames.Date, key)) { - if ((_bits & 0x1000000000L) != 0) + if ((_bits & 0x4L) != 0) { - value = _headers._AccessControlExposeHeaders; + value = _headers._Date; return true; } return false; } - - if (HeaderNames.AccessControlExposeHeaders.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (ReferenceEquals(HeaderNames.ETag, key)) { - if ((_bits & 0x1000000000L) != 0) + if ((_bits & 0x800000L) != 0) { - value = _headers._AccessControlExposeHeaders; + value = _headers._ETag; return true; } return false; } - break; - } - case 32: - { - if (ReferenceEquals(HeaderNames.AccessControlAllowCredentials, key)) + if (ReferenceEquals(HeaderNames.Vary, key)) { - if ((_bits & 0x100000000L) != 0) + if ((_bits & 0x40000000L) != 0) { - value = _headers._AccessControlAllowCredentials; + value = _headers._Vary; return true; } return false; } - if (HeaderNames.AccessControlAllowCredentials.Equals(key, StringComparison.OrdinalIgnoreCase)) + if (HeaderNames.Date.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x100000000L) != 0) + if ((_bits & 0x4L) != 0) { - value = _headers._AccessControlAllowCredentials; + value = _headers._Date; return true; } return false; } - break; - } - } - - return TryGetUnknown(key, ref value); - } - - protected override void SetValueFast(string key, StringValues value) - { - ValidateHeaderValueCharacters(value); - switch (key.Length) - { - case 3: - { - if (ReferenceEquals(HeaderNames.Via, key)) - { - _bits |= 0x200L; - _headers._Via = value; - return; - } - if (ReferenceEquals(HeaderNames.Age, key)) - { - _bits |= 0x200000L; - _headers._Age = value; - return; - } - - if (HeaderNames.Via.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - _bits |= 0x200L; - _headers._Via = value; - return; - } - if (HeaderNames.Age.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - _bits |= 0x200000L; - _headers._Age = value; - return; - } - break; - } - case 4: - { - if (ReferenceEquals(HeaderNames.Date, key)) - { - _bits |= 0x4L; - _headers._Date = value; - _headers._rawDate = null; - return; - } - if (ReferenceEquals(HeaderNames.ETag, key)) - { - _bits |= 0x800000L; - _headers._ETag = value; - return; - } - if (ReferenceEquals(HeaderNames.Vary, key)) - { - _bits |= 0x40000000L; - _headers._Vary = value; - return; - } - - if (HeaderNames.Date.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - _bits |= 0x4L; - _headers._Date = value; - _headers._rawDate = null; - return; - } if (HeaderNames.ETag.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x800000L; - _headers._ETag = value; - return; + if ((_bits & 0x800000L) != 0) + { + value = _headers._ETag; + return true; + } + return false; } if (HeaderNames.Vary.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x40000000L; - _headers._Vary = value; - return; + if ((_bits & 0x40000000L) != 0) + { + value = _headers._Vary; + return true; + } + return false; } break; } @@ -9671,16 +11575,22 @@ protected override void SetValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.Allow, key)) { - _bits |= 0x800L; - _headers._Allow = value; - return; + if ((_bits & 0x800L) != 0) + { + value = _headers._Allow; + return true; + } + return false; } if (HeaderNames.Allow.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x800L; - _headers._Allow = value; - return; + if ((_bits & 0x800L) != 0) + { + value = _headers._Allow; + return true; + } + return false; } break; } @@ -9688,30 +11598,40 @@ protected override void SetValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.Server, key)) { - _bits |= 0x10000000L; - _headers._Server = value; - _headers._rawServer = null; - return; + if ((_bits & 0x10000000L) != 0) + { + value = _headers._Server; + return true; + } + return false; } if (ReferenceEquals(HeaderNames.Pragma, key)) { - _bits |= 0x20L; - _headers._Pragma = value; - return; + if ((_bits & 0x20L) != 0) + { + value = _headers._Pragma; + return true; + } + return false; } if (HeaderNames.Server.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x10000000L; - _headers._Server = value; - _headers._rawServer = null; - return; + if ((_bits & 0x10000000L) != 0) + { + value = _headers._Server; + return true; + } + return false; } if (HeaderNames.Pragma.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x20L; - _headers._Pragma = value; - return; + if ((_bits & 0x20L) != 0) + { + value = _headers._Pragma; + return true; + } + return false; } break; } @@ -9719,64 +11639,94 @@ protected override void SetValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.Trailer, key)) { - _bits |= 0x40L; - _headers._Trailer = value; - return; + if ((_bits & 0x40L) != 0) + { + value = _headers._Trailer; + return true; + } + return false; } if (ReferenceEquals(HeaderNames.Upgrade, key)) { - _bits |= 0x100L; - _headers._Upgrade = value; - return; + if ((_bits & 0x100L) != 0) + { + value = _headers._Upgrade; + return true; + } + return false; } if (ReferenceEquals(HeaderNames.Warning, key)) { - _bits |= 0x400L; - _headers._Warning = value; - return; + if ((_bits & 0x400L) != 0) + { + value = _headers._Warning; + return true; + } + return false; } if (ReferenceEquals(HeaderNames.Expires, key)) { - _bits |= 0x40000L; - _headers._Expires = value; - return; + if ((_bits & 0x40000L) != 0) + { + value = _headers._Expires; + return true; + } + return false; } if (ReferenceEquals(HeaderNames.AltSvc, key)) { - _bits |= 0x400000L; - _headers._AltSvc = value; - return; + if ((_bits & 0x400000L) != 0) + { + value = _headers._AltSvc; + return true; + } + return false; } if (HeaderNames.Trailer.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x40L; - _headers._Trailer = value; - return; + if ((_bits & 0x40L) != 0) + { + value = _headers._Trailer; + return true; + } + return false; } if (HeaderNames.Upgrade.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x100L; - _headers._Upgrade = value; - return; + if ((_bits & 0x100L) != 0) + { + value = _headers._Upgrade; + return true; + } + return false; } if (HeaderNames.Warning.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x400L; - _headers._Warning = value; - return; + if ((_bits & 0x400L) != 0) + { + value = _headers._Warning; + return true; + } + return false; } if (HeaderNames.Expires.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x40000L; - _headers._Expires = value; - return; + if ((_bits & 0x40000L) != 0) + { + value = _headers._Expires; + return true; + } + return false; } if (HeaderNames.AltSvc.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x400000L; - _headers._AltSvc = value; - return; + if ((_bits & 0x400000L) != 0) + { + value = _headers._AltSvc; + return true; + } + return false; } break; } @@ -9784,16 +11734,22 @@ protected override void SetValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.Location, key)) { - _bits |= 0x1000000L; - _headers._Location = value; - return; + if ((_bits & 0x1000000L) != 0) + { + value = _headers._Location; + return true; + } + return false; } if (HeaderNames.Location.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x1000000L; - _headers._Location = value; - return; + if ((_bits & 0x1000000L) != 0) + { + value = _headers._Location; + return true; + } + return false; } break; } @@ -9801,42 +11757,58 @@ protected override void SetValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.Connection, key)) { - _bits |= 0x2L; - _headers._Connection = value; - _headers._rawConnection = null; - return; - } + if ((_bits & 0x2L) != 0) + { + value = _headers._Connection; + return true; + } + return false; + } if (ReferenceEquals(HeaderNames.KeepAlive, key)) { - _bits |= 0x10L; - _headers._KeepAlive = value; - return; + if ((_bits & 0x10L) != 0) + { + value = _headers._KeepAlive; + return true; + } + return false; } if (ReferenceEquals(HeaderNames.SetCookie, key)) { - _bits |= 0x20000000L; - _headers._SetCookie = value; - return; + if ((_bits & 0x20000000L) != 0) + { + value = _headers._SetCookie; + return true; + } + return false; } if (HeaderNames.Connection.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x2L; - _headers._Connection = value; - _headers._rawConnection = null; - return; + if ((_bits & 0x2L) != 0) + { + value = _headers._Connection; + return true; + } + return false; } if (HeaderNames.KeepAlive.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x10L; - _headers._KeepAlive = value; - return; + if ((_bits & 0x10L) != 0) + { + value = _headers._KeepAlive; + return true; + } + return false; } if (HeaderNames.SetCookie.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x20000000L; - _headers._SetCookie = value; - return; + if ((_bits & 0x20000000L) != 0) + { + value = _headers._SetCookie; + return true; + } + return false; } break; } @@ -9844,28 +11816,40 @@ protected override void SetValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.ContentMD5, key)) { - _bits |= 0x10000L; - _headers._ContentMD5 = value; - return; + if ((_bits & 0x10000L) != 0) + { + value = _headers._ContentMD5; + return true; + } + return false; } if (ReferenceEquals(HeaderNames.RetryAfter, key)) { - _bits |= 0x8000000L; - _headers._RetryAfter = value; - return; + if ((_bits & 0x8000000L) != 0) + { + value = _headers._RetryAfter; + return true; + } + return false; } if (HeaderNames.ContentMD5.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x10000L; - _headers._ContentMD5 = value; - return; + if ((_bits & 0x10000L) != 0) + { + value = _headers._ContentMD5; + return true; + } + return false; } if (HeaderNames.RetryAfter.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x8000000L; - _headers._RetryAfter = value; - return; + if ((_bits & 0x8000000L) != 0) + { + value = _headers._RetryAfter; + return true; + } + return false; } break; } @@ -9873,16 +11857,22 @@ protected override void SetValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.ContentType, key)) { - _bits |= 0x1000L; - _headers._ContentType = value; - return; + if ((_bits & 0x1000L) != 0) + { + value = _headers._ContentType; + return true; + } + return false; } if (HeaderNames.ContentType.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x1000L; - _headers._ContentType = value; - return; + if ((_bits & 0x1000L) != 0) + { + value = _headers._ContentType; + return true; + } + return false; } break; } @@ -9890,64 +11880,94 @@ protected override void SetValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.CacheControl, key)) { - _bits |= 0x1L; - _headers._CacheControl = value; - return; + if ((_bits & 0x1L) != 0) + { + value = _headers._CacheControl; + return true; + } + return false; } if (ReferenceEquals(HeaderNames.GrpcEncoding, key)) { - _bits |= 0x8L; - _headers._GrpcEncoding = value; - return; + if ((_bits & 0x8L) != 0) + { + value = _headers._GrpcEncoding; + return true; + } + return false; } if (ReferenceEquals(HeaderNames.ContentRange, key)) { - _bits |= 0x20000L; - _headers._ContentRange = value; - return; + if ((_bits & 0x20000L) != 0) + { + value = _headers._ContentRange; + return true; + } + return false; } if (ReferenceEquals(HeaderNames.LastModified, key)) { - _bits |= 0x80000L; - _headers._LastModified = value; - return; + if ((_bits & 0x80000L) != 0) + { + value = _headers._LastModified; + return true; + } + return false; } if (ReferenceEquals(HeaderNames.AcceptRanges, key)) { - _bits |= 0x100000L; - _headers._AcceptRanges = value; - return; + if ((_bits & 0x100000L) != 0) + { + value = _headers._AcceptRanges; + return true; + } + return false; } if (HeaderNames.CacheControl.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x1L; - _headers._CacheControl = value; - return; + if ((_bits & 0x1L) != 0) + { + value = _headers._CacheControl; + return true; + } + return false; } if (HeaderNames.GrpcEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x8L; - _headers._GrpcEncoding = value; - return; + if ((_bits & 0x8L) != 0) + { + value = _headers._GrpcEncoding; + return true; + } + return false; } if (HeaderNames.ContentRange.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x20000L; - _headers._ContentRange = value; - return; + if ((_bits & 0x20000L) != 0) + { + value = _headers._ContentRange; + return true; + } + return false; } if (HeaderNames.LastModified.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x80000L; - _headers._LastModified = value; - return; + if ((_bits & 0x80000L) != 0) + { + value = _headers._LastModified; + return true; + } + return false; } if (HeaderNames.AcceptRanges.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x100000L; - _headers._AcceptRanges = value; - return; + if ((_bits & 0x100000L) != 0) + { + value = _headers._AcceptRanges; + return true; + } + return false; } break; } @@ -9955,14 +11975,22 @@ protected override void SetValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.ContentLength, key)) { - _contentLength = ParseContentLength(value.ToString()); - return; + if (_contentLength.HasValue) + { + value = HeaderUtilities.FormatNonNegativeInt64(_contentLength.Value); + return true; + } + return false; } if (HeaderNames.ContentLength.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _contentLength = ParseContentLength(value.ToString()); - return; + if (_contentLength.HasValue) + { + value = HeaderUtilities.FormatNonNegativeInt64(_contentLength.Value); + return true; + } + return false; } break; } @@ -9970,64 +11998,94 @@ protected override void SetValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.ContentEncoding, key)) { - _bits |= 0x2000L; - _headers._ContentEncoding = value; - return; + if ((_bits & 0x2000L) != 0) + { + value = _headers._ContentEncoding; + return true; + } + return false; } if (ReferenceEquals(HeaderNames.ContentLanguage, key)) { - _bits |= 0x4000L; - _headers._ContentLanguage = value; - return; + if ((_bits & 0x4000L) != 0) + { + value = _headers._ContentLanguage; + return true; + } + return false; } if (ReferenceEquals(HeaderNames.ContentLocation, key)) { - _bits |= 0x8000L; - _headers._ContentLocation = value; - return; + if ((_bits & 0x8000L) != 0) + { + value = _headers._ContentLocation; + return true; + } + return false; } if (ReferenceEquals(HeaderNames.ProxyConnection, key)) { - _bits |= 0x4000000L; - _headers._ProxyConnection = value; - return; + if ((_bits & 0x4000000L) != 0) + { + value = _headers._ProxyConnection; + return true; + } + return false; } if (ReferenceEquals(HeaderNames.WWWAuthenticate, key)) { - _bits |= 0x80000000L; - _headers._WWWAuthenticate = value; - return; - } - - if (HeaderNames.ContentEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) - { - _bits |= 0x2000L; - _headers._ContentEncoding = value; - return; + if ((_bits & 0x80000000L) != 0) + { + value = _headers._WWWAuthenticate; + return true; + } + return false; + } + + if (HeaderNames.ContentEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x2000L) != 0) + { + value = _headers._ContentEncoding; + return true; + } + return false; } if (HeaderNames.ContentLanguage.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x4000L; - _headers._ContentLanguage = value; - return; + if ((_bits & 0x4000L) != 0) + { + value = _headers._ContentLanguage; + return true; + } + return false; } if (HeaderNames.ContentLocation.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x8000L; - _headers._ContentLocation = value; - return; + if ((_bits & 0x8000L) != 0) + { + value = _headers._ContentLocation; + return true; + } + return false; } if (HeaderNames.ProxyConnection.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x4000000L; - _headers._ProxyConnection = value; - return; + if ((_bits & 0x4000000L) != 0) + { + value = _headers._ProxyConnection; + return true; + } + return false; } if (HeaderNames.WWWAuthenticate.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x80000000L; - _headers._WWWAuthenticate = value; - return; + if ((_bits & 0x80000000L) != 0) + { + value = _headers._WWWAuthenticate; + return true; + } + return false; } break; } @@ -10035,18 +12093,22 @@ protected override void SetValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.TransferEncoding, key)) { - _bits |= 0x80L; - _headers._TransferEncoding = value; - _headers._rawTransferEncoding = null; - return; + if ((_bits & 0x80L) != 0) + { + value = _headers._TransferEncoding; + return true; + } + return false; } if (HeaderNames.TransferEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x80L; - _headers._TransferEncoding = value; - _headers._rawTransferEncoding = null; - return; + if ((_bits & 0x80L) != 0) + { + value = _headers._TransferEncoding; + return true; + } + return false; } break; } @@ -10054,16 +12116,22 @@ protected override void SetValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.ProxyAuthenticate, key)) { - _bits |= 0x2000000L; - _headers._ProxyAuthenticate = value; - return; + if ((_bits & 0x2000000L) != 0) + { + value = _headers._ProxyAuthenticate; + return true; + } + return false; } if (HeaderNames.ProxyAuthenticate.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x2000000L; - _headers._ProxyAuthenticate = value; - return; + if ((_bits & 0x2000000L) != 0) + { + value = _headers._ProxyAuthenticate; + return true; + } + return false; } break; } @@ -10071,16 +12139,22 @@ protected override void SetValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.AccessControlMaxAge, key)) { - _bits |= 0x2000000000L; - _headers._AccessControlMaxAge = value; - return; + if ((_bits & 0x2000000000L) != 0) + { + value = _headers._AccessControlMaxAge; + return true; + } + return false; } if (HeaderNames.AccessControlMaxAge.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x2000000000L; - _headers._AccessControlMaxAge = value; - return; + if ((_bits & 0x2000000000L) != 0) + { + value = _headers._AccessControlMaxAge; + return true; + } + return false; } break; } @@ -10088,16 +12162,22 @@ protected override void SetValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.AccessControlAllowOrigin, key)) { - _bits |= 0x800000000L; - _headers._AccessControlAllowOrigin = value; - return; + if ((_bits & 0x800000000L) != 0) + { + value = _headers._AccessControlAllowOrigin; + return true; + } + return false; } if (HeaderNames.AccessControlAllowOrigin.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x800000000L; - _headers._AccessControlAllowOrigin = value; - return; + if ((_bits & 0x800000000L) != 0) + { + value = _headers._AccessControlAllowOrigin; + return true; + } + return false; } break; } @@ -10105,28 +12185,40 @@ protected override void SetValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.AccessControlAllowHeaders, key)) { - _bits |= 0x200000000L; - _headers._AccessControlAllowHeaders = value; - return; + if ((_bits & 0x200000000L) != 0) + { + value = _headers._AccessControlAllowHeaders; + return true; + } + return false; } if (ReferenceEquals(HeaderNames.AccessControlAllowMethods, key)) { - _bits |= 0x400000000L; - _headers._AccessControlAllowMethods = value; - return; + if ((_bits & 0x400000000L) != 0) + { + value = _headers._AccessControlAllowMethods; + return true; + } + return false; } if (HeaderNames.AccessControlAllowHeaders.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x200000000L; - _headers._AccessControlAllowHeaders = value; - return; + if ((_bits & 0x200000000L) != 0) + { + value = _headers._AccessControlAllowHeaders; + return true; + } + return false; } if (HeaderNames.AccessControlAllowMethods.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x400000000L; - _headers._AccessControlAllowMethods = value; - return; + if ((_bits & 0x400000000L) != 0) + { + value = _headers._AccessControlAllowMethods; + return true; + } + return false; } break; } @@ -10134,16 +12226,22 @@ protected override void SetValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.AccessControlExposeHeaders, key)) { - _bits |= 0x1000000000L; - _headers._AccessControlExposeHeaders = value; - return; + if ((_bits & 0x1000000000L) != 0) + { + value = _headers._AccessControlExposeHeaders; + return true; + } + return false; } if (HeaderNames.AccessControlExposeHeaders.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x1000000000L; - _headers._AccessControlExposeHeaders = value; - return; + if ((_bits & 0x1000000000L) != 0) + { + value = _headers._AccessControlExposeHeaders; + return true; + } + return false; } break; } @@ -10151,25 +12249,31 @@ protected override void SetValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.AccessControlAllowCredentials, key)) { - _bits |= 0x100000000L; - _headers._AccessControlAllowCredentials = value; - return; + if ((_bits & 0x100000000L) != 0) + { + value = _headers._AccessControlAllowCredentials; + return true; + } + return false; } if (HeaderNames.AccessControlAllowCredentials.Equals(key, StringComparison.OrdinalIgnoreCase)) { - _bits |= 0x100000000L; - _headers._AccessControlAllowCredentials = value; - return; + if ((_bits & 0x100000000L) != 0) + { + value = _headers._AccessControlAllowCredentials; + return true; + } + return false; } break; } } - SetValueUnknown(key, value); + return TryGetUnknown(key, ref value); } - protected override bool AddValueFast(string key, StringValues value) + protected override void SetValueFast(string key, StringValues value) { ValidateHeaderValueCharacters(value); switch (key.Length) @@ -10178,44 +12282,28 @@ protected override bool AddValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.Via, key)) { - if ((_bits & 0x200L) == 0) - { - _bits |= 0x200L; - _headers._Via = value; - return true; - } - return false; + _bits |= 0x200L; + _headers._Via = value; + return; } if (ReferenceEquals(HeaderNames.Age, key)) { - if ((_bits & 0x200000L) == 0) - { - _bits |= 0x200000L; - _headers._Age = value; - return true; - } - return false; + _bits |= 0x200000L; + _headers._Age = value; + return; } - + if (HeaderNames.Via.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x200L) == 0) - { - _bits |= 0x200L; - _headers._Via = value; - return true; - } - return false; + _bits |= 0x200L; + _headers._Via = value; + return; } if (HeaderNames.Age.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x200000L) == 0) - { - _bits |= 0x200000L; - _headers._Age = value; - return true; - } - return false; + _bits |= 0x200000L; + _headers._Age = value; + return; } break; } @@ -10223,66 +12311,42 @@ protected override bool AddValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.Date, key)) { - if ((_bits & 0x4L) == 0) - { - _bits |= 0x4L; - _headers._Date = value; - _headers._rawDate = null; - return true; - } - return false; - } + _bits |= 0x4L; + _headers._Date = value; + _headers._rawDate = null; + return; + } if (ReferenceEquals(HeaderNames.ETag, key)) { - if ((_bits & 0x800000L) == 0) - { - _bits |= 0x800000L; - _headers._ETag = value; - return true; - } - return false; + _bits |= 0x800000L; + _headers._ETag = value; + return; } if (ReferenceEquals(HeaderNames.Vary, key)) { - if ((_bits & 0x40000000L) == 0) - { - _bits |= 0x40000000L; - _headers._Vary = value; - return true; - } - return false; + _bits |= 0x40000000L; + _headers._Vary = value; + return; } - + if (HeaderNames.Date.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x4L) == 0) - { - _bits |= 0x4L; - _headers._Date = value; - _headers._rawDate = null; - return true; - } - return false; + _bits |= 0x4L; + _headers._Date = value; + _headers._rawDate = null; + return; } if (HeaderNames.ETag.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x800000L) == 0) - { - _bits |= 0x800000L; - _headers._ETag = value; - return true; - } - return false; + _bits |= 0x800000L; + _headers._ETag = value; + return; } if (HeaderNames.Vary.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x40000000L) == 0) - { - _bits |= 0x40000000L; - _headers._Vary = value; - return true; - } - return false; + _bits |= 0x40000000L; + _headers._Vary = value; + return; } break; } @@ -10290,24 +12354,16 @@ protected override bool AddValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.Allow, key)) { - if ((_bits & 0x800L) == 0) - { - _bits |= 0x800L; - _headers._Allow = value; - return true; - } - return false; + _bits |= 0x800L; + _headers._Allow = value; + return; } - + if (HeaderNames.Allow.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x800L) == 0) - { - _bits |= 0x800L; - _headers._Allow = value; - return true; - } - return false; + _bits |= 0x800L; + _headers._Allow = value; + return; } break; } @@ -10315,46 +12371,30 @@ protected override bool AddValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.Server, key)) { - if ((_bits & 0x10000000L) == 0) - { - _bits |= 0x10000000L; - _headers._Server = value; - _headers._rawServer = null; - return true; - } - return false; + _bits |= 0x10000000L; + _headers._Server = value; + _headers._rawServer = null; + return; } if (ReferenceEquals(HeaderNames.Pragma, key)) { - if ((_bits & 0x20L) == 0) - { - _bits |= 0x20L; - _headers._Pragma = value; - return true; - } - return false; + _bits |= 0x20L; + _headers._Pragma = value; + return; } - + if (HeaderNames.Server.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x10000000L) == 0) - { - _bits |= 0x10000000L; - _headers._Server = value; - _headers._rawServer = null; - return true; - } - return false; + _bits |= 0x10000000L; + _headers._Server = value; + _headers._rawServer = null; + return; } if (HeaderNames.Pragma.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x20L) == 0) - { - _bits |= 0x20L; - _headers._Pragma = value; - return true; - } - return false; + _bits |= 0x20L; + _headers._Pragma = value; + return; } break; } @@ -10362,104 +12402,64 @@ protected override bool AddValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.Trailer, key)) { - if ((_bits & 0x40L) == 0) - { - _bits |= 0x40L; - _headers._Trailer = value; - return true; - } - return false; + _bits |= 0x40L; + _headers._Trailer = value; + return; } if (ReferenceEquals(HeaderNames.Upgrade, key)) { - if ((_bits & 0x100L) == 0) - { - _bits |= 0x100L; - _headers._Upgrade = value; - return true; - } - return false; + _bits |= 0x100L; + _headers._Upgrade = value; + return; } if (ReferenceEquals(HeaderNames.Warning, key)) { - if ((_bits & 0x400L) == 0) - { - _bits |= 0x400L; - _headers._Warning = value; - return true; - } - return false; + _bits |= 0x400L; + _headers._Warning = value; + return; } if (ReferenceEquals(HeaderNames.Expires, key)) { - if ((_bits & 0x40000L) == 0) - { - _bits |= 0x40000L; - _headers._Expires = value; - return true; - } - return false; + _bits |= 0x40000L; + _headers._Expires = value; + return; } if (ReferenceEquals(HeaderNames.AltSvc, key)) { - if ((_bits & 0x400000L) == 0) - { - _bits |= 0x400000L; - _headers._AltSvc = value; - return true; - } - return false; + _bits |= 0x400000L; + _headers._AltSvc = value; + return; } - + if (HeaderNames.Trailer.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x40L) == 0) - { - _bits |= 0x40L; - _headers._Trailer = value; - return true; - } - return false; + _bits |= 0x40L; + _headers._Trailer = value; + return; } if (HeaderNames.Upgrade.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x100L) == 0) - { - _bits |= 0x100L; - _headers._Upgrade = value; - return true; - } - return false; + _bits |= 0x100L; + _headers._Upgrade = value; + return; } if (HeaderNames.Warning.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x400L) == 0) - { - _bits |= 0x400L; - _headers._Warning = value; - return true; - } - return false; + _bits |= 0x400L; + _headers._Warning = value; + return; } if (HeaderNames.Expires.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x40000L) == 0) - { - _bits |= 0x40000L; - _headers._Expires = value; - return true; - } - return false; + _bits |= 0x40000L; + _headers._Expires = value; + return; } if (HeaderNames.AltSvc.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x400000L) == 0) - { - _bits |= 0x400000L; - _headers._AltSvc = value; - return true; - } - return false; + _bits |= 0x400000L; + _headers._AltSvc = value; + return; } break; } @@ -10467,24 +12467,16 @@ protected override bool AddValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.Location, key)) { - if ((_bits & 0x1000000L) == 0) - { - _bits |= 0x1000000L; - _headers._Location = value; - return true; - } - return false; + _bits |= 0x1000000L; + _headers._Location = value; + return; } - + if (HeaderNames.Location.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x1000000L) == 0) - { - _bits |= 0x1000000L; - _headers._Location = value; - return true; - } - return false; + _bits |= 0x1000000L; + _headers._Location = value; + return; } break; } @@ -10492,66 +12484,42 @@ protected override bool AddValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.Connection, key)) { - if ((_bits & 0x2L) == 0) - { - _bits |= 0x2L; - _headers._Connection = value; - _headers._rawConnection = null; - return true; - } - return false; + _bits |= 0x2L; + _headers._Connection = value; + _headers._rawConnection = null; + return; } if (ReferenceEquals(HeaderNames.KeepAlive, key)) { - if ((_bits & 0x10L) == 0) - { - _bits |= 0x10L; - _headers._KeepAlive = value; - return true; - } - return false; + _bits |= 0x10L; + _headers._KeepAlive = value; + return; } if (ReferenceEquals(HeaderNames.SetCookie, key)) { - if ((_bits & 0x20000000L) == 0) - { - _bits |= 0x20000000L; - _headers._SetCookie = value; - return true; - } - return false; + _bits |= 0x20000000L; + _headers._SetCookie = value; + return; } - + if (HeaderNames.Connection.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x2L) == 0) - { - _bits |= 0x2L; - _headers._Connection = value; - _headers._rawConnection = null; - return true; - } - return false; + _bits |= 0x2L; + _headers._Connection = value; + _headers._rawConnection = null; + return; } if (HeaderNames.KeepAlive.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x10L) == 0) - { - _bits |= 0x10L; - _headers._KeepAlive = value; - return true; - } - return false; + _bits |= 0x10L; + _headers._KeepAlive = value; + return; } if (HeaderNames.SetCookie.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x20000000L) == 0) - { - _bits |= 0x20000000L; - _headers._SetCookie = value; - return true; - } - return false; + _bits |= 0x20000000L; + _headers._SetCookie = value; + return; } break; } @@ -10559,44 +12527,28 @@ protected override bool AddValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.ContentMD5, key)) { - if ((_bits & 0x10000L) == 0) - { - _bits |= 0x10000L; - _headers._ContentMD5 = value; - return true; - } - return false; + _bits |= 0x10000L; + _headers._ContentMD5 = value; + return; } if (ReferenceEquals(HeaderNames.RetryAfter, key)) { - if ((_bits & 0x8000000L) == 0) - { - _bits |= 0x8000000L; - _headers._RetryAfter = value; - return true; - } - return false; + _bits |= 0x8000000L; + _headers._RetryAfter = value; + return; } - + if (HeaderNames.ContentMD5.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x10000L) == 0) - { - _bits |= 0x10000L; - _headers._ContentMD5 = value; - return true; - } - return false; + _bits |= 0x10000L; + _headers._ContentMD5 = value; + return; } if (HeaderNames.RetryAfter.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x8000000L) == 0) - { - _bits |= 0x8000000L; - _headers._RetryAfter = value; - return true; - } - return false; + _bits |= 0x8000000L; + _headers._RetryAfter = value; + return; } break; } @@ -10604,24 +12556,16 @@ protected override bool AddValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.ContentType, key)) { - if ((_bits & 0x1000L) == 0) - { - _bits |= 0x1000L; - _headers._ContentType = value; - return true; - } - return false; + _bits |= 0x1000L; + _headers._ContentType = value; + return; } - + if (HeaderNames.ContentType.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x1000L) == 0) - { - _bits |= 0x1000L; - _headers._ContentType = value; - return true; - } - return false; + _bits |= 0x1000L; + _headers._ContentType = value; + return; } break; } @@ -10629,104 +12573,64 @@ protected override bool AddValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.CacheControl, key)) { - if ((_bits & 0x1L) == 0) - { - _bits |= 0x1L; - _headers._CacheControl = value; - return true; - } - return false; + _bits |= 0x1L; + _headers._CacheControl = value; + return; } if (ReferenceEquals(HeaderNames.GrpcEncoding, key)) { - if ((_bits & 0x8L) == 0) - { - _bits |= 0x8L; - _headers._GrpcEncoding = value; - return true; - } - return false; + _bits |= 0x8L; + _headers._GrpcEncoding = value; + return; } if (ReferenceEquals(HeaderNames.ContentRange, key)) { - if ((_bits & 0x20000L) == 0) - { - _bits |= 0x20000L; - _headers._ContentRange = value; - return true; - } - return false; + _bits |= 0x20000L; + _headers._ContentRange = value; + return; } if (ReferenceEquals(HeaderNames.LastModified, key)) { - if ((_bits & 0x80000L) == 0) - { - _bits |= 0x80000L; - _headers._LastModified = value; - return true; - } - return false; + _bits |= 0x80000L; + _headers._LastModified = value; + return; } if (ReferenceEquals(HeaderNames.AcceptRanges, key)) { - if ((_bits & 0x100000L) == 0) - { - _bits |= 0x100000L; - _headers._AcceptRanges = value; - return true; - } - return false; + _bits |= 0x100000L; + _headers._AcceptRanges = value; + return; } - + if (HeaderNames.CacheControl.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x1L) == 0) - { - _bits |= 0x1L; - _headers._CacheControl = value; - return true; - } - return false; + _bits |= 0x1L; + _headers._CacheControl = value; + return; } if (HeaderNames.GrpcEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x8L) == 0) - { - _bits |= 0x8L; - _headers._GrpcEncoding = value; - return true; - } - return false; + _bits |= 0x8L; + _headers._GrpcEncoding = value; + return; } if (HeaderNames.ContentRange.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x20000L) == 0) - { - _bits |= 0x20000L; - _headers._ContentRange = value; - return true; - } - return false; + _bits |= 0x20000L; + _headers._ContentRange = value; + return; } if (HeaderNames.LastModified.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x80000L) == 0) - { - _bits |= 0x80000L; - _headers._LastModified = value; - return true; - } - return false; + _bits |= 0x80000L; + _headers._LastModified = value; + return; } if (HeaderNames.AcceptRanges.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x100000L) == 0) - { - _bits |= 0x100000L; - _headers._AcceptRanges = value; - return true; - } - return false; + _bits |= 0x100000L; + _headers._AcceptRanges = value; + return; } break; } @@ -10734,22 +12638,14 @@ protected override bool AddValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.ContentLength, key)) { - if (!_contentLength.HasValue) - { - _contentLength = ParseContentLength(value); - return true; - } - return false; + _contentLength = ParseContentLength(value.ToString()); + return; } - + if (HeaderNames.ContentLength.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if (!_contentLength.HasValue) - { - _contentLength = ParseContentLength(value); - return true; - } - return false; + _contentLength = ParseContentLength(value.ToString()); + return; } break; } @@ -10757,104 +12653,64 @@ protected override bool AddValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.ContentEncoding, key)) { - if ((_bits & 0x2000L) == 0) - { - _bits |= 0x2000L; - _headers._ContentEncoding = value; - return true; - } - return false; + _bits |= 0x2000L; + _headers._ContentEncoding = value; + return; } if (ReferenceEquals(HeaderNames.ContentLanguage, key)) { - if ((_bits & 0x4000L) == 0) - { - _bits |= 0x4000L; - _headers._ContentLanguage = value; - return true; - } - return false; + _bits |= 0x4000L; + _headers._ContentLanguage = value; + return; } if (ReferenceEquals(HeaderNames.ContentLocation, key)) { - if ((_bits & 0x8000L) == 0) - { - _bits |= 0x8000L; - _headers._ContentLocation = value; - return true; - } - return false; + _bits |= 0x8000L; + _headers._ContentLocation = value; + return; } if (ReferenceEquals(HeaderNames.ProxyConnection, key)) { - if ((_bits & 0x4000000L) == 0) - { - _bits |= 0x4000000L; - _headers._ProxyConnection = value; - return true; - } - return false; + _bits |= 0x4000000L; + _headers._ProxyConnection = value; + return; } if (ReferenceEquals(HeaderNames.WWWAuthenticate, key)) { - if ((_bits & 0x80000000L) == 0) - { - _bits |= 0x80000000L; - _headers._WWWAuthenticate = value; - return true; - } - return false; + _bits |= 0x80000000L; + _headers._WWWAuthenticate = value; + return; } - + if (HeaderNames.ContentEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x2000L) == 0) - { - _bits |= 0x2000L; - _headers._ContentEncoding = value; - return true; - } - return false; + _bits |= 0x2000L; + _headers._ContentEncoding = value; + return; } if (HeaderNames.ContentLanguage.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x4000L) == 0) - { - _bits |= 0x4000L; - _headers._ContentLanguage = value; - return true; - } - return false; + _bits |= 0x4000L; + _headers._ContentLanguage = value; + return; } if (HeaderNames.ContentLocation.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x8000L) == 0) - { - _bits |= 0x8000L; - _headers._ContentLocation = value; - return true; - } - return false; + _bits |= 0x8000L; + _headers._ContentLocation = value; + return; } if (HeaderNames.ProxyConnection.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x4000000L) == 0) - { - _bits |= 0x4000000L; - _headers._ProxyConnection = value; - return true; - } - return false; + _bits |= 0x4000000L; + _headers._ProxyConnection = value; + return; } if (HeaderNames.WWWAuthenticate.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x80000000L) == 0) - { - _bits |= 0x80000000L; - _headers._WWWAuthenticate = value; - return true; - } - return false; + _bits |= 0x80000000L; + _headers._WWWAuthenticate = value; + return; } break; } @@ -10862,26 +12718,18 @@ protected override bool AddValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.TransferEncoding, key)) { - if ((_bits & 0x80L) == 0) - { - _bits |= 0x80L; - _headers._TransferEncoding = value; - _headers._rawTransferEncoding = null; - return true; - } - return false; + _bits |= 0x80L; + _headers._TransferEncoding = value; + _headers._rawTransferEncoding = null; + return; } - + if (HeaderNames.TransferEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x80L) == 0) - { - _bits |= 0x80L; - _headers._TransferEncoding = value; - _headers._rawTransferEncoding = null; - return true; - } - return false; + _bits |= 0x80L; + _headers._TransferEncoding = value; + _headers._rawTransferEncoding = null; + return; } break; } @@ -10889,24 +12737,16 @@ protected override bool AddValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.ProxyAuthenticate, key)) { - if ((_bits & 0x2000000L) == 0) - { - _bits |= 0x2000000L; - _headers._ProxyAuthenticate = value; - return true; - } - return false; + _bits |= 0x2000000L; + _headers._ProxyAuthenticate = value; + return; } - + if (HeaderNames.ProxyAuthenticate.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x2000000L) == 0) - { - _bits |= 0x2000000L; - _headers._ProxyAuthenticate = value; - return true; - } - return false; + _bits |= 0x2000000L; + _headers._ProxyAuthenticate = value; + return; } break; } @@ -10914,24 +12754,16 @@ protected override bool AddValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.AccessControlMaxAge, key)) { - if ((_bits & 0x2000000000L) == 0) - { - _bits |= 0x2000000000L; - _headers._AccessControlMaxAge = value; - return true; - } - return false; + _bits |= 0x2000000000L; + _headers._AccessControlMaxAge = value; + return; } - + if (HeaderNames.AccessControlMaxAge.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x2000000000L) == 0) - { - _bits |= 0x2000000000L; - _headers._AccessControlMaxAge = value; - return true; - } - return false; + _bits |= 0x2000000000L; + _headers._AccessControlMaxAge = value; + return; } break; } @@ -10939,24 +12771,16 @@ protected override bool AddValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.AccessControlAllowOrigin, key)) { - if ((_bits & 0x800000000L) == 0) - { - _bits |= 0x800000000L; - _headers._AccessControlAllowOrigin = value; - return true; - } - return false; + _bits |= 0x800000000L; + _headers._AccessControlAllowOrigin = value; + return; } - + if (HeaderNames.AccessControlAllowOrigin.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x800000000L) == 0) - { - _bits |= 0x800000000L; - _headers._AccessControlAllowOrigin = value; - return true; - } - return false; + _bits |= 0x800000000L; + _headers._AccessControlAllowOrigin = value; + return; } break; } @@ -10964,44 +12788,28 @@ protected override bool AddValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.AccessControlAllowHeaders, key)) { - if ((_bits & 0x200000000L) == 0) - { - _bits |= 0x200000000L; - _headers._AccessControlAllowHeaders = value; - return true; - } - return false; + _bits |= 0x200000000L; + _headers._AccessControlAllowHeaders = value; + return; } if (ReferenceEquals(HeaderNames.AccessControlAllowMethods, key)) { - if ((_bits & 0x400000000L) == 0) - { - _bits |= 0x400000000L; - _headers._AccessControlAllowMethods = value; - return true; - } - return false; + _bits |= 0x400000000L; + _headers._AccessControlAllowMethods = value; + return; } - + if (HeaderNames.AccessControlAllowHeaders.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x200000000L) == 0) - { - _bits |= 0x200000000L; - _headers._AccessControlAllowHeaders = value; - return true; - } - return false; + _bits |= 0x200000000L; + _headers._AccessControlAllowHeaders = value; + return; } if (HeaderNames.AccessControlAllowMethods.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x400000000L) == 0) - { - _bits |= 0x400000000L; - _headers._AccessControlAllowMethods = value; - return true; - } - return false; + _bits |= 0x400000000L; + _headers._AccessControlAllowMethods = value; + return; } break; } @@ -11009,24 +12817,16 @@ protected override bool AddValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.AccessControlExposeHeaders, key)) { - if ((_bits & 0x1000000000L) == 0) - { - _bits |= 0x1000000000L; - _headers._AccessControlExposeHeaders = value; - return true; - } - return false; + _bits |= 0x1000000000L; + _headers._AccessControlExposeHeaders = value; + return; } - + if (HeaderNames.AccessControlExposeHeaders.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x1000000000L) == 0) - { - _bits |= 0x1000000000L; - _headers._AccessControlExposeHeaders = value; - return true; - } - return false; + _bits |= 0x1000000000L; + _headers._AccessControlExposeHeaders = value; + return; } break; } @@ -11034,54 +12834,47 @@ protected override bool AddValueFast(string key, StringValues value) { if (ReferenceEquals(HeaderNames.AccessControlAllowCredentials, key)) { - if ((_bits & 0x100000000L) == 0) - { - _bits |= 0x100000000L; - _headers._AccessControlAllowCredentials = value; - return true; - } - return false; - } - + _bits |= 0x100000000L; + _headers._AccessControlAllowCredentials = value; + return; + } + if (HeaderNames.AccessControlAllowCredentials.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x100000000L) == 0) - { - _bits |= 0x100000000L; - _headers._AccessControlAllowCredentials = value; - return true; - } - return false; + _bits |= 0x100000000L; + _headers._AccessControlAllowCredentials = value; + return; } break; } } - return AddValueUnknown(key, value); + SetValueUnknown(key, value); } - protected override bool RemoveFast(string key) + protected override bool AddValueFast(string key, StringValues value) { + ValidateHeaderValueCharacters(value); switch (key.Length) { case 3: { if (ReferenceEquals(HeaderNames.Via, key)) { - if ((_bits & 0x200L) != 0) + if ((_bits & 0x200L) == 0) { - _bits &= ~0x200L; - _headers._Via = default(StringValues); + _bits |= 0x200L; + _headers._Via = value; return true; } return false; } if (ReferenceEquals(HeaderNames.Age, key)) { - if ((_bits & 0x200000L) != 0) + if ((_bits & 0x200000L) == 0) { - _bits &= ~0x200000L; - _headers._Age = default(StringValues); + _bits |= 0x200000L; + _headers._Age = value; return true; } return false; @@ -11089,20 +12882,20 @@ protected override bool RemoveFast(string key) if (HeaderNames.Via.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x200L) != 0) + if ((_bits & 0x200L) == 0) { - _bits &= ~0x200L; - _headers._Via = default(StringValues); + _bits |= 0x200L; + _headers._Via = value; return true; } return false; } if (HeaderNames.Age.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x200000L) != 0) + if ((_bits & 0x200000L) == 0) { - _bits &= ~0x200000L; - _headers._Age = default(StringValues); + _bits |= 0x200000L; + _headers._Age = value; return true; } return false; @@ -11113,10 +12906,10 @@ protected override bool RemoveFast(string key) { if (ReferenceEquals(HeaderNames.Date, key)) { - if ((_bits & 0x4L) != 0) + if ((_bits & 0x4L) == 0) { - _bits &= ~0x4L; - _headers._Date = default(StringValues); + _bits |= 0x4L; + _headers._Date = value; _headers._rawDate = null; return true; } @@ -11124,20 +12917,20 @@ protected override bool RemoveFast(string key) } if (ReferenceEquals(HeaderNames.ETag, key)) { - if ((_bits & 0x800000L) != 0) + if ((_bits & 0x800000L) == 0) { - _bits &= ~0x800000L; - _headers._ETag = default(StringValues); + _bits |= 0x800000L; + _headers._ETag = value; return true; } return false; } if (ReferenceEquals(HeaderNames.Vary, key)) { - if ((_bits & 0x40000000L) != 0) + if ((_bits & 0x40000000L) == 0) { - _bits &= ~0x40000000L; - _headers._Vary = default(StringValues); + _bits |= 0x40000000L; + _headers._Vary = value; return true; } return false; @@ -11145,10 +12938,10 @@ protected override bool RemoveFast(string key) if (HeaderNames.Date.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x4L) != 0) + if ((_bits & 0x4L) == 0) { - _bits &= ~0x4L; - _headers._Date = default(StringValues); + _bits |= 0x4L; + _headers._Date = value; _headers._rawDate = null; return true; } @@ -11156,20 +12949,20 @@ protected override bool RemoveFast(string key) } if (HeaderNames.ETag.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x800000L) != 0) + if ((_bits & 0x800000L) == 0) { - _bits &= ~0x800000L; - _headers._ETag = default(StringValues); + _bits |= 0x800000L; + _headers._ETag = value; return true; } return false; } if (HeaderNames.Vary.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x40000000L) != 0) + if ((_bits & 0x40000000L) == 0) { - _bits &= ~0x40000000L; - _headers._Vary = default(StringValues); + _bits |= 0x40000000L; + _headers._Vary = value; return true; } return false; @@ -11180,10 +12973,10 @@ protected override bool RemoveFast(string key) { if (ReferenceEquals(HeaderNames.Allow, key)) { - if ((_bits & 0x800L) != 0) + if ((_bits & 0x800L) == 0) { - _bits &= ~0x800L; - _headers._Allow = default(StringValues); + _bits |= 0x800L; + _headers._Allow = value; return true; } return false; @@ -11191,10 +12984,10 @@ protected override bool RemoveFast(string key) if (HeaderNames.Allow.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x800L) != 0) + if ((_bits & 0x800L) == 0) { - _bits &= ~0x800L; - _headers._Allow = default(StringValues); + _bits |= 0x800L; + _headers._Allow = value; return true; } return false; @@ -11205,10 +12998,10 @@ protected override bool RemoveFast(string key) { if (ReferenceEquals(HeaderNames.Server, key)) { - if ((_bits & 0x10000000L) != 0) + if ((_bits & 0x10000000L) == 0) { - _bits &= ~0x10000000L; - _headers._Server = default(StringValues); + _bits |= 0x10000000L; + _headers._Server = value; _headers._rawServer = null; return true; } @@ -11216,10 +13009,10 @@ protected override bool RemoveFast(string key) } if (ReferenceEquals(HeaderNames.Pragma, key)) { - if ((_bits & 0x20L) != 0) + if ((_bits & 0x20L) == 0) { - _bits &= ~0x20L; - _headers._Pragma = default(StringValues); + _bits |= 0x20L; + _headers._Pragma = value; return true; } return false; @@ -11227,10 +13020,10 @@ protected override bool RemoveFast(string key) if (HeaderNames.Server.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x10000000L) != 0) + if ((_bits & 0x10000000L) == 0) { - _bits &= ~0x10000000L; - _headers._Server = default(StringValues); + _bits |= 0x10000000L; + _headers._Server = value; _headers._rawServer = null; return true; } @@ -11238,10 +13031,10 @@ protected override bool RemoveFast(string key) } if (HeaderNames.Pragma.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x20L) != 0) + if ((_bits & 0x20L) == 0) { - _bits &= ~0x20L; - _headers._Pragma = default(StringValues); + _bits |= 0x20L; + _headers._Pragma = value; return true; } return false; @@ -11252,50 +13045,50 @@ protected override bool RemoveFast(string key) { if (ReferenceEquals(HeaderNames.Trailer, key)) { - if ((_bits & 0x40L) != 0) + if ((_bits & 0x40L) == 0) { - _bits &= ~0x40L; - _headers._Trailer = default(StringValues); + _bits |= 0x40L; + _headers._Trailer = value; return true; } return false; } if (ReferenceEquals(HeaderNames.Upgrade, key)) { - if ((_bits & 0x100L) != 0) + if ((_bits & 0x100L) == 0) { - _bits &= ~0x100L; - _headers._Upgrade = default(StringValues); + _bits |= 0x100L; + _headers._Upgrade = value; return true; } return false; } if (ReferenceEquals(HeaderNames.Warning, key)) { - if ((_bits & 0x400L) != 0) + if ((_bits & 0x400L) == 0) { - _bits &= ~0x400L; - _headers._Warning = default(StringValues); + _bits |= 0x400L; + _headers._Warning = value; return true; } return false; } if (ReferenceEquals(HeaderNames.Expires, key)) { - if ((_bits & 0x40000L) != 0) + if ((_bits & 0x40000L) == 0) { - _bits &= ~0x40000L; - _headers._Expires = default(StringValues); + _bits |= 0x40000L; + _headers._Expires = value; return true; } return false; } if (ReferenceEquals(HeaderNames.AltSvc, key)) { - if ((_bits & 0x400000L) != 0) + if ((_bits & 0x400000L) == 0) { - _bits &= ~0x400000L; - _headers._AltSvc = default(StringValues); + _bits |= 0x400000L; + _headers._AltSvc = value; return true; } return false; @@ -11303,50 +13096,50 @@ protected override bool RemoveFast(string key) if (HeaderNames.Trailer.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x40L) != 0) + if ((_bits & 0x40L) == 0) { - _bits &= ~0x40L; - _headers._Trailer = default(StringValues); + _bits |= 0x40L; + _headers._Trailer = value; return true; } return false; } if (HeaderNames.Upgrade.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x100L) != 0) + if ((_bits & 0x100L) == 0) { - _bits &= ~0x100L; - _headers._Upgrade = default(StringValues); + _bits |= 0x100L; + _headers._Upgrade = value; return true; } return false; } if (HeaderNames.Warning.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x400L) != 0) + if ((_bits & 0x400L) == 0) { - _bits &= ~0x400L; - _headers._Warning = default(StringValues); + _bits |= 0x400L; + _headers._Warning = value; return true; } return false; } if (HeaderNames.Expires.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x40000L) != 0) + if ((_bits & 0x40000L) == 0) { - _bits &= ~0x40000L; - _headers._Expires = default(StringValues); + _bits |= 0x40000L; + _headers._Expires = value; return true; } return false; } if (HeaderNames.AltSvc.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x400000L) != 0) + if ((_bits & 0x400000L) == 0) { - _bits &= ~0x400000L; - _headers._AltSvc = default(StringValues); + _bits |= 0x400000L; + _headers._AltSvc = value; return true; } return false; @@ -11357,10 +13150,10 @@ protected override bool RemoveFast(string key) { if (ReferenceEquals(HeaderNames.Location, key)) { - if ((_bits & 0x1000000L) != 0) + if ((_bits & 0x1000000L) == 0) { - _bits &= ~0x1000000L; - _headers._Location = default(StringValues); + _bits |= 0x1000000L; + _headers._Location = value; return true; } return false; @@ -11368,10 +13161,10 @@ protected override bool RemoveFast(string key) if (HeaderNames.Location.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x1000000L) != 0) + if ((_bits & 0x1000000L) == 0) { - _bits &= ~0x1000000L; - _headers._Location = default(StringValues); + _bits |= 0x1000000L; + _headers._Location = value; return true; } return false; @@ -11382,10 +13175,10 @@ protected override bool RemoveFast(string key) { if (ReferenceEquals(HeaderNames.Connection, key)) { - if ((_bits & 0x2L) != 0) + if ((_bits & 0x2L) == 0) { - _bits &= ~0x2L; - _headers._Connection = default(StringValues); + _bits |= 0x2L; + _headers._Connection = value; _headers._rawConnection = null; return true; } @@ -11393,20 +13186,20 @@ protected override bool RemoveFast(string key) } if (ReferenceEquals(HeaderNames.KeepAlive, key)) { - if ((_bits & 0x10L) != 0) + if ((_bits & 0x10L) == 0) { - _bits &= ~0x10L; - _headers._KeepAlive = default(StringValues); + _bits |= 0x10L; + _headers._KeepAlive = value; return true; } return false; } if (ReferenceEquals(HeaderNames.SetCookie, key)) { - if ((_bits & 0x20000000L) != 0) + if ((_bits & 0x20000000L) == 0) { - _bits &= ~0x20000000L; - _headers._SetCookie = default(StringValues); + _bits |= 0x20000000L; + _headers._SetCookie = value; return true; } return false; @@ -11414,10 +13207,10 @@ protected override bool RemoveFast(string key) if (HeaderNames.Connection.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x2L) != 0) + if ((_bits & 0x2L) == 0) { - _bits &= ~0x2L; - _headers._Connection = default(StringValues); + _bits |= 0x2L; + _headers._Connection = value; _headers._rawConnection = null; return true; } @@ -11425,20 +13218,20 @@ protected override bool RemoveFast(string key) } if (HeaderNames.KeepAlive.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x10L) != 0) + if ((_bits & 0x10L) == 0) { - _bits &= ~0x10L; - _headers._KeepAlive = default(StringValues); + _bits |= 0x10L; + _headers._KeepAlive = value; return true; } return false; } if (HeaderNames.SetCookie.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x20000000L) != 0) + if ((_bits & 0x20000000L) == 0) { - _bits &= ~0x20000000L; - _headers._SetCookie = default(StringValues); + _bits |= 0x20000000L; + _headers._SetCookie = value; return true; } return false; @@ -11449,20 +13242,20 @@ protected override bool RemoveFast(string key) { if (ReferenceEquals(HeaderNames.ContentMD5, key)) { - if ((_bits & 0x10000L) != 0) + if ((_bits & 0x10000L) == 0) { - _bits &= ~0x10000L; - _headers._ContentMD5 = default(StringValues); + _bits |= 0x10000L; + _headers._ContentMD5 = value; return true; } return false; } if (ReferenceEquals(HeaderNames.RetryAfter, key)) { - if ((_bits & 0x8000000L) != 0) + if ((_bits & 0x8000000L) == 0) { - _bits &= ~0x8000000L; - _headers._RetryAfter = default(StringValues); + _bits |= 0x8000000L; + _headers._RetryAfter = value; return true; } return false; @@ -11470,20 +13263,20 @@ protected override bool RemoveFast(string key) if (HeaderNames.ContentMD5.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x10000L) != 0) + if ((_bits & 0x10000L) == 0) { - _bits &= ~0x10000L; - _headers._ContentMD5 = default(StringValues); + _bits |= 0x10000L; + _headers._ContentMD5 = value; return true; } return false; } if (HeaderNames.RetryAfter.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x8000000L) != 0) + if ((_bits & 0x8000000L) == 0) { - _bits &= ~0x8000000L; - _headers._RetryAfter = default(StringValues); + _bits |= 0x8000000L; + _headers._RetryAfter = value; return true; } return false; @@ -11494,10 +13287,10 @@ protected override bool RemoveFast(string key) { if (ReferenceEquals(HeaderNames.ContentType, key)) { - if ((_bits & 0x1000L) != 0) + if ((_bits & 0x1000L) == 0) { - _bits &= ~0x1000L; - _headers._ContentType = default(StringValues); + _bits |= 0x1000L; + _headers._ContentType = value; return true; } return false; @@ -11505,10 +13298,10 @@ protected override bool RemoveFast(string key) if (HeaderNames.ContentType.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x1000L) != 0) + if ((_bits & 0x1000L) == 0) { - _bits &= ~0x1000L; - _headers._ContentType = default(StringValues); + _bits |= 0x1000L; + _headers._ContentType = value; return true; } return false; @@ -11519,50 +13312,50 @@ protected override bool RemoveFast(string key) { if (ReferenceEquals(HeaderNames.CacheControl, key)) { - if ((_bits & 0x1L) != 0) + if ((_bits & 0x1L) == 0) { - _bits &= ~0x1L; - _headers._CacheControl = default(StringValues); + _bits |= 0x1L; + _headers._CacheControl = value; return true; } return false; } if (ReferenceEquals(HeaderNames.GrpcEncoding, key)) { - if ((_bits & 0x8L) != 0) + if ((_bits & 0x8L) == 0) { - _bits &= ~0x8L; - _headers._GrpcEncoding = default(StringValues); + _bits |= 0x8L; + _headers._GrpcEncoding = value; return true; } return false; } if (ReferenceEquals(HeaderNames.ContentRange, key)) { - if ((_bits & 0x20000L) != 0) + if ((_bits & 0x20000L) == 0) { - _bits &= ~0x20000L; - _headers._ContentRange = default(StringValues); + _bits |= 0x20000L; + _headers._ContentRange = value; return true; } return false; } if (ReferenceEquals(HeaderNames.LastModified, key)) { - if ((_bits & 0x80000L) != 0) + if ((_bits & 0x80000L) == 0) { - _bits &= ~0x80000L; - _headers._LastModified = default(StringValues); + _bits |= 0x80000L; + _headers._LastModified = value; return true; } return false; } if (ReferenceEquals(HeaderNames.AcceptRanges, key)) { - if ((_bits & 0x100000L) != 0) + if ((_bits & 0x100000L) == 0) { - _bits &= ~0x100000L; - _headers._AcceptRanges = default(StringValues); + _bits |= 0x100000L; + _headers._AcceptRanges = value; return true; } return false; @@ -11570,50 +13363,50 @@ protected override bool RemoveFast(string key) if (HeaderNames.CacheControl.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x1L) != 0) + if ((_bits & 0x1L) == 0) { - _bits &= ~0x1L; - _headers._CacheControl = default(StringValues); + _bits |= 0x1L; + _headers._CacheControl = value; return true; } return false; } if (HeaderNames.GrpcEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x8L) != 0) + if ((_bits & 0x8L) == 0) { - _bits &= ~0x8L; - _headers._GrpcEncoding = default(StringValues); + _bits |= 0x8L; + _headers._GrpcEncoding = value; return true; } return false; } if (HeaderNames.ContentRange.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x20000L) != 0) + if ((_bits & 0x20000L) == 0) { - _bits &= ~0x20000L; - _headers._ContentRange = default(StringValues); + _bits |= 0x20000L; + _headers._ContentRange = value; return true; } return false; } if (HeaderNames.LastModified.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x80000L) != 0) + if ((_bits & 0x80000L) == 0) { - _bits &= ~0x80000L; - _headers._LastModified = default(StringValues); + _bits |= 0x80000L; + _headers._LastModified = value; return true; } return false; } if (HeaderNames.AcceptRanges.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x100000L) != 0) + if ((_bits & 0x100000L) == 0) { - _bits &= ~0x100000L; - _headers._AcceptRanges = default(StringValues); + _bits |= 0x100000L; + _headers._AcceptRanges = value; return true; } return false; @@ -11624,9 +13417,9 @@ protected override bool RemoveFast(string key) { if (ReferenceEquals(HeaderNames.ContentLength, key)) { - if (_contentLength.HasValue) + if (!_contentLength.HasValue) { - _contentLength = null; + _contentLength = ParseContentLength(value); return true; } return false; @@ -11634,9 +13427,9 @@ protected override bool RemoveFast(string key) if (HeaderNames.ContentLength.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if (_contentLength.HasValue) + if (!_contentLength.HasValue) { - _contentLength = null; + _contentLength = ParseContentLength(value); return true; } return false; @@ -11647,50 +13440,50 @@ protected override bool RemoveFast(string key) { if (ReferenceEquals(HeaderNames.ContentEncoding, key)) { - if ((_bits & 0x2000L) != 0) + if ((_bits & 0x2000L) == 0) { - _bits &= ~0x2000L; - _headers._ContentEncoding = default(StringValues); + _bits |= 0x2000L; + _headers._ContentEncoding = value; return true; } return false; } if (ReferenceEquals(HeaderNames.ContentLanguage, key)) { - if ((_bits & 0x4000L) != 0) + if ((_bits & 0x4000L) == 0) { - _bits &= ~0x4000L; - _headers._ContentLanguage = default(StringValues); + _bits |= 0x4000L; + _headers._ContentLanguage = value; return true; } return false; } if (ReferenceEquals(HeaderNames.ContentLocation, key)) { - if ((_bits & 0x8000L) != 0) + if ((_bits & 0x8000L) == 0) { - _bits &= ~0x8000L; - _headers._ContentLocation = default(StringValues); + _bits |= 0x8000L; + _headers._ContentLocation = value; return true; } return false; } if (ReferenceEquals(HeaderNames.ProxyConnection, key)) { - if ((_bits & 0x4000000L) != 0) + if ((_bits & 0x4000000L) == 0) { - _bits &= ~0x4000000L; - _headers._ProxyConnection = default(StringValues); + _bits |= 0x4000000L; + _headers._ProxyConnection = value; return true; } return false; } if (ReferenceEquals(HeaderNames.WWWAuthenticate, key)) { - if ((_bits & 0x80000000L) != 0) + if ((_bits & 0x80000000L) == 0) { - _bits &= ~0x80000000L; - _headers._WWWAuthenticate = default(StringValues); + _bits |= 0x80000000L; + _headers._WWWAuthenticate = value; return true; } return false; @@ -11698,50 +13491,50 @@ protected override bool RemoveFast(string key) if (HeaderNames.ContentEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x2000L) != 0) + if ((_bits & 0x2000L) == 0) { - _bits &= ~0x2000L; - _headers._ContentEncoding = default(StringValues); + _bits |= 0x2000L; + _headers._ContentEncoding = value; return true; } return false; } if (HeaderNames.ContentLanguage.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x4000L) != 0) + if ((_bits & 0x4000L) == 0) { - _bits &= ~0x4000L; - _headers._ContentLanguage = default(StringValues); + _bits |= 0x4000L; + _headers._ContentLanguage = value; return true; } return false; } if (HeaderNames.ContentLocation.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x8000L) != 0) + if ((_bits & 0x8000L) == 0) { - _bits &= ~0x8000L; - _headers._ContentLocation = default(StringValues); + _bits |= 0x8000L; + _headers._ContentLocation = value; return true; } return false; } if (HeaderNames.ProxyConnection.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x4000000L) != 0) + if ((_bits & 0x4000000L) == 0) { - _bits &= ~0x4000000L; - _headers._ProxyConnection = default(StringValues); + _bits |= 0x4000000L; + _headers._ProxyConnection = value; return true; } return false; } if (HeaderNames.WWWAuthenticate.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x80000000L) != 0) + if ((_bits & 0x80000000L) == 0) { - _bits &= ~0x80000000L; - _headers._WWWAuthenticate = default(StringValues); + _bits |= 0x80000000L; + _headers._WWWAuthenticate = value; return true; } return false; @@ -11752,10 +13545,10 @@ protected override bool RemoveFast(string key) { if (ReferenceEquals(HeaderNames.TransferEncoding, key)) { - if ((_bits & 0x80L) != 0) + if ((_bits & 0x80L) == 0) { - _bits &= ~0x80L; - _headers._TransferEncoding = default(StringValues); + _bits |= 0x80L; + _headers._TransferEncoding = value; _headers._rawTransferEncoding = null; return true; } @@ -11764,10 +13557,10 @@ protected override bool RemoveFast(string key) if (HeaderNames.TransferEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x80L) != 0) + if ((_bits & 0x80L) == 0) { - _bits &= ~0x80L; - _headers._TransferEncoding = default(StringValues); + _bits |= 0x80L; + _headers._TransferEncoding = value; _headers._rawTransferEncoding = null; return true; } @@ -11779,10 +13572,10 @@ protected override bool RemoveFast(string key) { if (ReferenceEquals(HeaderNames.ProxyAuthenticate, key)) { - if ((_bits & 0x2000000L) != 0) + if ((_bits & 0x2000000L) == 0) { - _bits &= ~0x2000000L; - _headers._ProxyAuthenticate = default(StringValues); + _bits |= 0x2000000L; + _headers._ProxyAuthenticate = value; return true; } return false; @@ -11790,10 +13583,10 @@ protected override bool RemoveFast(string key) if (HeaderNames.ProxyAuthenticate.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x2000000L) != 0) + if ((_bits & 0x2000000L) == 0) { - _bits &= ~0x2000000L; - _headers._ProxyAuthenticate = default(StringValues); + _bits |= 0x2000000L; + _headers._ProxyAuthenticate = value; return true; } return false; @@ -11804,10 +13597,10 @@ protected override bool RemoveFast(string key) { if (ReferenceEquals(HeaderNames.AccessControlMaxAge, key)) { - if ((_bits & 0x2000000000L) != 0) + if ((_bits & 0x2000000000L) == 0) { - _bits &= ~0x2000000000L; - _headers._AccessControlMaxAge = default(StringValues); + _bits |= 0x2000000000L; + _headers._AccessControlMaxAge = value; return true; } return false; @@ -11815,10 +13608,10 @@ protected override bool RemoveFast(string key) if (HeaderNames.AccessControlMaxAge.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x2000000000L) != 0) + if ((_bits & 0x2000000000L) == 0) { - _bits &= ~0x2000000000L; - _headers._AccessControlMaxAge = default(StringValues); + _bits |= 0x2000000000L; + _headers._AccessControlMaxAge = value; return true; } return false; @@ -11829,10 +13622,10 @@ protected override bool RemoveFast(string key) { if (ReferenceEquals(HeaderNames.AccessControlAllowOrigin, key)) { - if ((_bits & 0x800000000L) != 0) + if ((_bits & 0x800000000L) == 0) { - _bits &= ~0x800000000L; - _headers._AccessControlAllowOrigin = default(StringValues); + _bits |= 0x800000000L; + _headers._AccessControlAllowOrigin = value; return true; } return false; @@ -11840,10 +13633,10 @@ protected override bool RemoveFast(string key) if (HeaderNames.AccessControlAllowOrigin.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x800000000L) != 0) + if ((_bits & 0x800000000L) == 0) { - _bits &= ~0x800000000L; - _headers._AccessControlAllowOrigin = default(StringValues); + _bits |= 0x800000000L; + _headers._AccessControlAllowOrigin = value; return true; } return false; @@ -11854,20 +13647,20 @@ protected override bool RemoveFast(string key) { if (ReferenceEquals(HeaderNames.AccessControlAllowHeaders, key)) { - if ((_bits & 0x200000000L) != 0) + if ((_bits & 0x200000000L) == 0) { - _bits &= ~0x200000000L; - _headers._AccessControlAllowHeaders = default(StringValues); + _bits |= 0x200000000L; + _headers._AccessControlAllowHeaders = value; return true; } return false; } if (ReferenceEquals(HeaderNames.AccessControlAllowMethods, key)) { - if ((_bits & 0x400000000L) != 0) + if ((_bits & 0x400000000L) == 0) { - _bits &= ~0x400000000L; - _headers._AccessControlAllowMethods = default(StringValues); + _bits |= 0x400000000L; + _headers._AccessControlAllowMethods = value; return true; } return false; @@ -11875,20 +13668,20 @@ protected override bool RemoveFast(string key) if (HeaderNames.AccessControlAllowHeaders.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x200000000L) != 0) + if ((_bits & 0x200000000L) == 0) { - _bits &= ~0x200000000L; - _headers._AccessControlAllowHeaders = default(StringValues); + _bits |= 0x200000000L; + _headers._AccessControlAllowHeaders = value; return true; } return false; } if (HeaderNames.AccessControlAllowMethods.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x400000000L) != 0) + if ((_bits & 0x400000000L) == 0) { - _bits &= ~0x400000000L; - _headers._AccessControlAllowMethods = default(StringValues); + _bits |= 0x400000000L; + _headers._AccessControlAllowMethods = value; return true; } return false; @@ -11899,10 +13692,10 @@ protected override bool RemoveFast(string key) { if (ReferenceEquals(HeaderNames.AccessControlExposeHeaders, key)) { - if ((_bits & 0x1000000000L) != 0) + if ((_bits & 0x1000000000L) == 0) { - _bits &= ~0x1000000000L; - _headers._AccessControlExposeHeaders = default(StringValues); + _bits |= 0x1000000000L; + _headers._AccessControlExposeHeaders = value; return true; } return false; @@ -11910,10 +13703,10 @@ protected override bool RemoveFast(string key) if (HeaderNames.AccessControlExposeHeaders.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x1000000000L) != 0) + if ((_bits & 0x1000000000L) == 0) { - _bits &= ~0x1000000000L; - _headers._AccessControlExposeHeaders = default(StringValues); + _bits |= 0x1000000000L; + _headers._AccessControlExposeHeaders = value; return true; } return false; @@ -11924,10 +13717,10 @@ protected override bool RemoveFast(string key) { if (ReferenceEquals(HeaderNames.AccessControlAllowCredentials, key)) { - if ((_bits & 0x100000000L) != 0) + if ((_bits & 0x100000000L) == 0) { - _bits &= ~0x100000000L; - _headers._AccessControlAllowCredentials = default(StringValues); + _bits |= 0x100000000L; + _headers._AccessControlAllowCredentials = value; return true; } return false; @@ -11935,10 +13728,10 @@ protected override bool RemoveFast(string key) if (HeaderNames.AccessControlAllowCredentials.Equals(key, StringComparison.OrdinalIgnoreCase)) { - if ((_bits & 0x100000000L) != 0) + if ((_bits & 0x100000000L) == 0) { - _bits &= ~0x100000000L; - _headers._AccessControlAllowCredentials = default(StringValues); + _bits |= 0x100000000L; + _headers._AccessControlAllowCredentials = value; return true; } return false; @@ -11947,1505 +13740,2395 @@ protected override bool RemoveFast(string key) } } - return RemoveUnknown(key); + return AddValueUnknown(key, value); } - protected override void ClearFast() + + protected override bool RemoveFast(string key) { - MaybeUnknown?.Clear(); - _contentLength = null; - var tempBits = _bits; - _bits = 0; - if(BitOperations.PopCount((ulong)tempBits) > 12) - { - _headers = default(HeaderReferences); - return; - } - - if ((tempBits & 0x2L) != 0) + switch (key.Length) { - _headers._Connection = default; - if((tempBits & ~0x2L) == 0) + case 3: { - return; - } - tempBits &= ~0x2L; - } - - if ((tempBits & 0x4L) != 0) - { - _headers._Date = default; - if((tempBits & ~0x4L) == 0) - { - return; - } - tempBits &= ~0x4L; - } - - if ((tempBits & 0x1000L) != 0) - { - _headers._ContentType = default; - if((tempBits & ~0x1000L) == 0) - { - return; - } - tempBits &= ~0x1000L; - } - - if ((tempBits & 0x10000000L) != 0) - { - _headers._Server = default; - if((tempBits & ~0x10000000L) == 0) - { - return; - } - tempBits &= ~0x10000000L; - } - - if ((tempBits & 0x1L) != 0) - { - _headers._CacheControl = default; - if((tempBits & ~0x1L) == 0) - { - return; - } - tempBits &= ~0x1L; - } - - if ((tempBits & 0x8L) != 0) - { - _headers._GrpcEncoding = default; - if((tempBits & ~0x8L) == 0) - { - return; + if (ReferenceEquals(HeaderNames.Via, key)) + { + if ((_bits & 0x200L) != 0) + { + _bits &= ~0x200L; + _headers._Via = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.Age, key)) + { + if ((_bits & 0x200000L) != 0) + { + _bits &= ~0x200000L; + _headers._Age = default(StringValues); + return true; + } + return false; + } + + if (HeaderNames.Via.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x200L) != 0) + { + _bits &= ~0x200L; + _headers._Via = default(StringValues); + return true; + } + return false; + } + if (HeaderNames.Age.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x200000L) != 0) + { + _bits &= ~0x200000L; + _headers._Age = default(StringValues); + return true; + } + return false; + } + break; } - tempBits &= ~0x8L; - } - - if ((tempBits & 0x10L) != 0) - { - _headers._KeepAlive = default; - if((tempBits & ~0x10L) == 0) + case 4: { - return; + if (ReferenceEquals(HeaderNames.Date, key)) + { + if ((_bits & 0x4L) != 0) + { + _bits &= ~0x4L; + _headers._Date = default(StringValues); + _headers._rawDate = null; + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.ETag, key)) + { + if ((_bits & 0x800000L) != 0) + { + _bits &= ~0x800000L; + _headers._ETag = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.Vary, key)) + { + if ((_bits & 0x40000000L) != 0) + { + _bits &= ~0x40000000L; + _headers._Vary = default(StringValues); + return true; + } + return false; + } + + if (HeaderNames.Date.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x4L) != 0) + { + _bits &= ~0x4L; + _headers._Date = default(StringValues); + _headers._rawDate = null; + return true; + } + return false; + } + if (HeaderNames.ETag.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x800000L) != 0) + { + _bits &= ~0x800000L; + _headers._ETag = default(StringValues); + return true; + } + return false; + } + if (HeaderNames.Vary.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x40000000L) != 0) + { + _bits &= ~0x40000000L; + _headers._Vary = default(StringValues); + return true; + } + return false; + } + break; } - tempBits &= ~0x10L; - } - - if ((tempBits & 0x20L) != 0) - { - _headers._Pragma = default; - if((tempBits & ~0x20L) == 0) + case 5: { - return; + if (ReferenceEquals(HeaderNames.Allow, key)) + { + if ((_bits & 0x800L) != 0) + { + _bits &= ~0x800L; + _headers._Allow = default(StringValues); + return true; + } + return false; + } + + if (HeaderNames.Allow.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x800L) != 0) + { + _bits &= ~0x800L; + _headers._Allow = default(StringValues); + return true; + } + return false; + } + break; } - tempBits &= ~0x20L; - } - - if ((tempBits & 0x40L) != 0) - { - _headers._Trailer = default; - if((tempBits & ~0x40L) == 0) + case 6: { - return; + if (ReferenceEquals(HeaderNames.Server, key)) + { + if ((_bits & 0x10000000L) != 0) + { + _bits &= ~0x10000000L; + _headers._Server = default(StringValues); + _headers._rawServer = null; + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.Pragma, key)) + { + if ((_bits & 0x20L) != 0) + { + _bits &= ~0x20L; + _headers._Pragma = default(StringValues); + return true; + } + return false; + } + + if (HeaderNames.Server.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x10000000L) != 0) + { + _bits &= ~0x10000000L; + _headers._Server = default(StringValues); + _headers._rawServer = null; + return true; + } + return false; + } + if (HeaderNames.Pragma.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x20L) != 0) + { + _bits &= ~0x20L; + _headers._Pragma = default(StringValues); + return true; + } + return false; + } + break; } - tempBits &= ~0x40L; - } - - if ((tempBits & 0x80L) != 0) - { - _headers._TransferEncoding = default; - if((tempBits & ~0x80L) == 0) + case 7: { - return; - } - tempBits &= ~0x80L; - } - - if ((tempBits & 0x100L) != 0) - { - _headers._Upgrade = default; - if((tempBits & ~0x100L) == 0) - { - return; - } - tempBits &= ~0x100L; - } - - if ((tempBits & 0x200L) != 0) - { - _headers._Via = default; - if((tempBits & ~0x200L) == 0) - { - return; - } - tempBits &= ~0x200L; - } - - if ((tempBits & 0x400L) != 0) - { - _headers._Warning = default; - if((tempBits & ~0x400L) == 0) - { - return; - } - tempBits &= ~0x400L; - } - - if ((tempBits & 0x800L) != 0) - { - _headers._Allow = default; - if((tempBits & ~0x800L) == 0) - { - return; + if (ReferenceEquals(HeaderNames.Trailer, key)) + { + if ((_bits & 0x40L) != 0) + { + _bits &= ~0x40L; + _headers._Trailer = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.Upgrade, key)) + { + if ((_bits & 0x100L) != 0) + { + _bits &= ~0x100L; + _headers._Upgrade = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.Warning, key)) + { + if ((_bits & 0x400L) != 0) + { + _bits &= ~0x400L; + _headers._Warning = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.Expires, key)) + { + if ((_bits & 0x40000L) != 0) + { + _bits &= ~0x40000L; + _headers._Expires = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.AltSvc, key)) + { + if ((_bits & 0x400000L) != 0) + { + _bits &= ~0x400000L; + _headers._AltSvc = default(StringValues); + return true; + } + return false; + } + + if (HeaderNames.Trailer.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x40L) != 0) + { + _bits &= ~0x40L; + _headers._Trailer = default(StringValues); + return true; + } + return false; + } + if (HeaderNames.Upgrade.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x100L) != 0) + { + _bits &= ~0x100L; + _headers._Upgrade = default(StringValues); + return true; + } + return false; + } + if (HeaderNames.Warning.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x400L) != 0) + { + _bits &= ~0x400L; + _headers._Warning = default(StringValues); + return true; + } + return false; + } + if (HeaderNames.Expires.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x40000L) != 0) + { + _bits &= ~0x40000L; + _headers._Expires = default(StringValues); + return true; + } + return false; + } + if (HeaderNames.AltSvc.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x400000L) != 0) + { + _bits &= ~0x400000L; + _headers._AltSvc = default(StringValues); + return true; + } + return false; + } + break; } - tempBits &= ~0x800L; - } - - if ((tempBits & 0x2000L) != 0) - { - _headers._ContentEncoding = default; - if((tempBits & ~0x2000L) == 0) + case 8: { - return; + if (ReferenceEquals(HeaderNames.Location, key)) + { + if ((_bits & 0x1000000L) != 0) + { + _bits &= ~0x1000000L; + _headers._Location = default(StringValues); + return true; + } + return false; + } + + if (HeaderNames.Location.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x1000000L) != 0) + { + _bits &= ~0x1000000L; + _headers._Location = default(StringValues); + return true; + } + return false; + } + break; } - tempBits &= ~0x2000L; - } - - if ((tempBits & 0x4000L) != 0) - { - _headers._ContentLanguage = default; - if((tempBits & ~0x4000L) == 0) + case 10: { - return; + if (ReferenceEquals(HeaderNames.Connection, key)) + { + if ((_bits & 0x2L) != 0) + { + _bits &= ~0x2L; + _headers._Connection = default(StringValues); + _headers._rawConnection = null; + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.KeepAlive, key)) + { + if ((_bits & 0x10L) != 0) + { + _bits &= ~0x10L; + _headers._KeepAlive = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.SetCookie, key)) + { + if ((_bits & 0x20000000L) != 0) + { + _bits &= ~0x20000000L; + _headers._SetCookie = default(StringValues); + return true; + } + return false; + } + + if (HeaderNames.Connection.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x2L) != 0) + { + _bits &= ~0x2L; + _headers._Connection = default(StringValues); + _headers._rawConnection = null; + return true; + } + return false; + } + if (HeaderNames.KeepAlive.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x10L) != 0) + { + _bits &= ~0x10L; + _headers._KeepAlive = default(StringValues); + return true; + } + return false; + } + if (HeaderNames.SetCookie.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x20000000L) != 0) + { + _bits &= ~0x20000000L; + _headers._SetCookie = default(StringValues); + return true; + } + return false; + } + break; } - tempBits &= ~0x4000L; - } - - if ((tempBits & 0x8000L) != 0) - { - _headers._ContentLocation = default; - if((tempBits & ~0x8000L) == 0) + case 11: { - return; - } - tempBits &= ~0x8000L; - } - - if ((tempBits & 0x10000L) != 0) - { - _headers._ContentMD5 = default; - if((tempBits & ~0x10000L) == 0) - { - return; - } - tempBits &= ~0x10000L; - } - - if ((tempBits & 0x20000L) != 0) - { - _headers._ContentRange = default; - if((tempBits & ~0x20000L) == 0) - { - return; - } - tempBits &= ~0x20000L; - } - - if ((tempBits & 0x40000L) != 0) - { - _headers._Expires = default; - if((tempBits & ~0x40000L) == 0) - { - return; - } - tempBits &= ~0x40000L; - } - - if ((tempBits & 0x80000L) != 0) - { - _headers._LastModified = default; - if((tempBits & ~0x80000L) == 0) - { - return; - } - tempBits &= ~0x80000L; - } - - if ((tempBits & 0x100000L) != 0) - { - _headers._AcceptRanges = default; - if((tempBits & ~0x100000L) == 0) - { - return; - } - tempBits &= ~0x100000L; - } - - if ((tempBits & 0x200000L) != 0) - { - _headers._Age = default; - if((tempBits & ~0x200000L) == 0) - { - return; - } - tempBits &= ~0x200000L; - } - - if ((tempBits & 0x400000L) != 0) - { - _headers._AltSvc = default; - if((tempBits & ~0x400000L) == 0) - { - return; - } - tempBits &= ~0x400000L; - } - - if ((tempBits & 0x800000L) != 0) - { - _headers._ETag = default; - if((tempBits & ~0x800000L) == 0) - { - return; - } - tempBits &= ~0x800000L; - } - - if ((tempBits & 0x1000000L) != 0) - { - _headers._Location = default; - if((tempBits & ~0x1000000L) == 0) - { - return; - } - tempBits &= ~0x1000000L; - } - - if ((tempBits & 0x2000000L) != 0) - { - _headers._ProxyAuthenticate = default; - if((tempBits & ~0x2000000L) == 0) - { - return; - } - tempBits &= ~0x2000000L; - } - - if ((tempBits & 0x4000000L) != 0) - { - _headers._ProxyConnection = default; - if((tempBits & ~0x4000000L) == 0) - { - return; - } - tempBits &= ~0x4000000L; - } - - if ((tempBits & 0x8000000L) != 0) - { - _headers._RetryAfter = default; - if((tempBits & ~0x8000000L) == 0) - { - return; - } - tempBits &= ~0x8000000L; - } - - if ((tempBits & 0x20000000L) != 0) - { - _headers._SetCookie = default; - if((tempBits & ~0x20000000L) == 0) - { - return; - } - tempBits &= ~0x20000000L; - } - - if ((tempBits & 0x40000000L) != 0) - { - _headers._Vary = default; - if((tempBits & ~0x40000000L) == 0) - { - return; - } - tempBits &= ~0x40000000L; - } - - if ((tempBits & 0x80000000L) != 0) - { - _headers._WWWAuthenticate = default; - if((tempBits & ~0x80000000L) == 0) - { - return; - } - tempBits &= ~0x80000000L; - } - - if ((tempBits & 0x100000000L) != 0) - { - _headers._AccessControlAllowCredentials = default; - if((tempBits & ~0x100000000L) == 0) - { - return; - } - tempBits &= ~0x100000000L; - } - - if ((tempBits & 0x200000000L) != 0) - { - _headers._AccessControlAllowHeaders = default; - if((tempBits & ~0x200000000L) == 0) - { - return; - } - tempBits &= ~0x200000000L; - } - - if ((tempBits & 0x400000000L) != 0) - { - _headers._AccessControlAllowMethods = default; - if((tempBits & ~0x400000000L) == 0) - { - return; - } - tempBits &= ~0x400000000L; - } - - if ((tempBits & 0x800000000L) != 0) - { - _headers._AccessControlAllowOrigin = default; - if((tempBits & ~0x800000000L) == 0) - { - return; - } - tempBits &= ~0x800000000L; - } - - if ((tempBits & 0x1000000000L) != 0) - { - _headers._AccessControlExposeHeaders = default; - if((tempBits & ~0x1000000000L) == 0) - { - return; - } - tempBits &= ~0x1000000000L; - } - - if ((tempBits & 0x2000000000L) != 0) - { - _headers._AccessControlMaxAge = default; - if((tempBits & ~0x2000000000L) == 0) - { - return; - } - tempBits &= ~0x2000000000L; - } - - } - - protected override bool CopyToFast(KeyValuePair[] array, int arrayIndex) - { - if (arrayIndex < 0) - { - return false; - } - - if ((_bits & 0x1L) != 0) - { - if (arrayIndex == array.Length) + if (ReferenceEquals(HeaderNames.ContentMD5, key)) { + if ((_bits & 0x10000L) != 0) + { + _bits &= ~0x10000L; + _headers._ContentMD5 = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.CacheControl, _headers._CacheControl); - ++arrayIndex; - } - if ((_bits & 0x2L) != 0) - { - if (arrayIndex == array.Length) + if (ReferenceEquals(HeaderNames.RetryAfter, key)) { + if ((_bits & 0x8000000L) != 0) + { + _bits &= ~0x8000000L; + _headers._RetryAfter = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.Connection, _headers._Connection); - ++arrayIndex; - } - if ((_bits & 0x4L) != 0) - { - if (arrayIndex == array.Length) + + if (HeaderNames.ContentMD5.Equals(key, StringComparison.OrdinalIgnoreCase)) { + if ((_bits & 0x10000L) != 0) + { + _bits &= ~0x10000L; + _headers._ContentMD5 = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.Date, _headers._Date); - ++arrayIndex; - } - if ((_bits & 0x8L) != 0) - { - if (arrayIndex == array.Length) + if (HeaderNames.RetryAfter.Equals(key, StringComparison.OrdinalIgnoreCase)) { + if ((_bits & 0x8000000L) != 0) + { + _bits &= ~0x8000000L; + _headers._RetryAfter = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.GrpcEncoding, _headers._GrpcEncoding); - ++arrayIndex; + break; } - if ((_bits & 0x10L) != 0) + case 12: { - if (arrayIndex == array.Length) + if (ReferenceEquals(HeaderNames.ContentType, key)) { + if ((_bits & 0x1000L) != 0) + { + _bits &= ~0x1000L; + _headers._ContentType = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.KeepAlive, _headers._KeepAlive); - ++arrayIndex; - } - if ((_bits & 0x20L) != 0) - { - if (arrayIndex == array.Length) + + if (HeaderNames.ContentType.Equals(key, StringComparison.OrdinalIgnoreCase)) { + if ((_bits & 0x1000L) != 0) + { + _bits &= ~0x1000L; + _headers._ContentType = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.Pragma, _headers._Pragma); - ++arrayIndex; + break; } - if ((_bits & 0x40L) != 0) + case 13: { - if (arrayIndex == array.Length) + if (ReferenceEquals(HeaderNames.CacheControl, key)) { + if ((_bits & 0x1L) != 0) + { + _bits &= ~0x1L; + _headers._CacheControl = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.Trailer, _headers._Trailer); - ++arrayIndex; - } - if ((_bits & 0x80L) != 0) - { - if (arrayIndex == array.Length) + if (ReferenceEquals(HeaderNames.GrpcEncoding, key)) { + if ((_bits & 0x8L) != 0) + { + _bits &= ~0x8L; + _headers._GrpcEncoding = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.TransferEncoding, _headers._TransferEncoding); - ++arrayIndex; - } - if ((_bits & 0x100L) != 0) - { - if (arrayIndex == array.Length) + if (ReferenceEquals(HeaderNames.ContentRange, key)) { + if ((_bits & 0x20000L) != 0) + { + _bits &= ~0x20000L; + _headers._ContentRange = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.Upgrade, _headers._Upgrade); - ++arrayIndex; - } - if ((_bits & 0x200L) != 0) - { - if (arrayIndex == array.Length) + if (ReferenceEquals(HeaderNames.LastModified, key)) { + if ((_bits & 0x80000L) != 0) + { + _bits &= ~0x80000L; + _headers._LastModified = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.Via, _headers._Via); - ++arrayIndex; - } - if ((_bits & 0x400L) != 0) - { - if (arrayIndex == array.Length) + if (ReferenceEquals(HeaderNames.AcceptRanges, key)) { + if ((_bits & 0x100000L) != 0) + { + _bits &= ~0x100000L; + _headers._AcceptRanges = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.Warning, _headers._Warning); - ++arrayIndex; - } - if ((_bits & 0x800L) != 0) - { - if (arrayIndex == array.Length) + + if (HeaderNames.CacheControl.Equals(key, StringComparison.OrdinalIgnoreCase)) { + if ((_bits & 0x1L) != 0) + { + _bits &= ~0x1L; + _headers._CacheControl = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.Allow, _headers._Allow); - ++arrayIndex; - } - if ((_bits & 0x1000L) != 0) - { - if (arrayIndex == array.Length) + if (HeaderNames.GrpcEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) { + if ((_bits & 0x8L) != 0) + { + _bits &= ~0x8L; + _headers._GrpcEncoding = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.ContentType, _headers._ContentType); - ++arrayIndex; - } - if ((_bits & 0x2000L) != 0) - { - if (arrayIndex == array.Length) + if (HeaderNames.ContentRange.Equals(key, StringComparison.OrdinalIgnoreCase)) { + if ((_bits & 0x20000L) != 0) + { + _bits &= ~0x20000L; + _headers._ContentRange = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.ContentEncoding, _headers._ContentEncoding); - ++arrayIndex; - } - if ((_bits & 0x4000L) != 0) - { - if (arrayIndex == array.Length) + if (HeaderNames.LastModified.Equals(key, StringComparison.OrdinalIgnoreCase)) { + if ((_bits & 0x80000L) != 0) + { + _bits &= ~0x80000L; + _headers._LastModified = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.ContentLanguage, _headers._ContentLanguage); - ++arrayIndex; - } - if ((_bits & 0x8000L) != 0) - { - if (arrayIndex == array.Length) + if (HeaderNames.AcceptRanges.Equals(key, StringComparison.OrdinalIgnoreCase)) { + if ((_bits & 0x100000L) != 0) + { + _bits &= ~0x100000L; + _headers._AcceptRanges = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.ContentLocation, _headers._ContentLocation); - ++arrayIndex; + break; } - if ((_bits & 0x10000L) != 0) + case 14: { - if (arrayIndex == array.Length) + if (ReferenceEquals(HeaderNames.ContentLength, key)) { + if (_contentLength.HasValue) + { + _contentLength = null; + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.ContentMD5, _headers._ContentMD5); - ++arrayIndex; - } - if ((_bits & 0x20000L) != 0) - { - if (arrayIndex == array.Length) + + if (HeaderNames.ContentLength.Equals(key, StringComparison.OrdinalIgnoreCase)) { + if (_contentLength.HasValue) + { + _contentLength = null; + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.ContentRange, _headers._ContentRange); - ++arrayIndex; + break; } - if ((_bits & 0x40000L) != 0) + case 16: { - if (arrayIndex == array.Length) + if (ReferenceEquals(HeaderNames.ContentEncoding, key)) { + if ((_bits & 0x2000L) != 0) + { + _bits &= ~0x2000L; + _headers._ContentEncoding = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.Expires, _headers._Expires); - ++arrayIndex; - } - if ((_bits & 0x80000L) != 0) - { - if (arrayIndex == array.Length) + if (ReferenceEquals(HeaderNames.ContentLanguage, key)) { + if ((_bits & 0x4000L) != 0) + { + _bits &= ~0x4000L; + _headers._ContentLanguage = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.LastModified, _headers._LastModified); - ++arrayIndex; - } - if ((_bits & 0x100000L) != 0) - { - if (arrayIndex == array.Length) + if (ReferenceEquals(HeaderNames.ContentLocation, key)) { + if ((_bits & 0x8000L) != 0) + { + _bits &= ~0x8000L; + _headers._ContentLocation = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.AcceptRanges, _headers._AcceptRanges); - ++arrayIndex; - } - if ((_bits & 0x200000L) != 0) - { - if (arrayIndex == array.Length) + if (ReferenceEquals(HeaderNames.ProxyConnection, key)) { + if ((_bits & 0x4000000L) != 0) + { + _bits &= ~0x4000000L; + _headers._ProxyConnection = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.Age, _headers._Age); - ++arrayIndex; - } - if ((_bits & 0x400000L) != 0) - { - if (arrayIndex == array.Length) + if (ReferenceEquals(HeaderNames.WWWAuthenticate, key)) { - return false; - } - array[arrayIndex] = new KeyValuePair(HeaderNames.AltSvc, _headers._AltSvc); - ++arrayIndex; - } - if ((_bits & 0x800000L) != 0) - { - if (arrayIndex == array.Length) + if ((_bits & 0x80000000L) != 0) + { + _bits &= ~0x80000000L; + _headers._WWWAuthenticate = default(StringValues); + return true; + } + return false; + } + + if (HeaderNames.ContentEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) { + if ((_bits & 0x2000L) != 0) + { + _bits &= ~0x2000L; + _headers._ContentEncoding = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.ETag, _headers._ETag); - ++arrayIndex; - } - if ((_bits & 0x1000000L) != 0) - { - if (arrayIndex == array.Length) + if (HeaderNames.ContentLanguage.Equals(key, StringComparison.OrdinalIgnoreCase)) { + if ((_bits & 0x4000L) != 0) + { + _bits &= ~0x4000L; + _headers._ContentLanguage = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.Location, _headers._Location); - ++arrayIndex; - } - if ((_bits & 0x2000000L) != 0) - { - if (arrayIndex == array.Length) + if (HeaderNames.ContentLocation.Equals(key, StringComparison.OrdinalIgnoreCase)) { + if ((_bits & 0x8000L) != 0) + { + _bits &= ~0x8000L; + _headers._ContentLocation = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.ProxyAuthenticate, _headers._ProxyAuthenticate); - ++arrayIndex; - } - if ((_bits & 0x4000000L) != 0) - { - if (arrayIndex == array.Length) + if (HeaderNames.ProxyConnection.Equals(key, StringComparison.OrdinalIgnoreCase)) { + if ((_bits & 0x4000000L) != 0) + { + _bits &= ~0x4000000L; + _headers._ProxyConnection = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.ProxyConnection, _headers._ProxyConnection); - ++arrayIndex; - } - if ((_bits & 0x8000000L) != 0) - { - if (arrayIndex == array.Length) + if (HeaderNames.WWWAuthenticate.Equals(key, StringComparison.OrdinalIgnoreCase)) { + if ((_bits & 0x80000000L) != 0) + { + _bits &= ~0x80000000L; + _headers._WWWAuthenticate = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.RetryAfter, _headers._RetryAfter); - ++arrayIndex; + break; } - if ((_bits & 0x10000000L) != 0) + case 17: { - if (arrayIndex == array.Length) + if (ReferenceEquals(HeaderNames.TransferEncoding, key)) { + if ((_bits & 0x80L) != 0) + { + _bits &= ~0x80L; + _headers._TransferEncoding = default(StringValues); + _headers._rawTransferEncoding = null; + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.Server, _headers._Server); - ++arrayIndex; - } - if ((_bits & 0x20000000L) != 0) - { - if (arrayIndex == array.Length) + + if (HeaderNames.TransferEncoding.Equals(key, StringComparison.OrdinalIgnoreCase)) { + if ((_bits & 0x80L) != 0) + { + _bits &= ~0x80L; + _headers._TransferEncoding = default(StringValues); + _headers._rawTransferEncoding = null; + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.SetCookie, _headers._SetCookie); - ++arrayIndex; + break; } - if ((_bits & 0x40000000L) != 0) + case 18: { - if (arrayIndex == array.Length) + if (ReferenceEquals(HeaderNames.ProxyAuthenticate, key)) { + if ((_bits & 0x2000000L) != 0) + { + _bits &= ~0x2000000L; + _headers._ProxyAuthenticate = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.Vary, _headers._Vary); - ++arrayIndex; - } - if ((_bits & 0x80000000L) != 0) - { - if (arrayIndex == array.Length) + + if (HeaderNames.ProxyAuthenticate.Equals(key, StringComparison.OrdinalIgnoreCase)) { + if ((_bits & 0x2000000L) != 0) + { + _bits &= ~0x2000000L; + _headers._ProxyAuthenticate = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.WWWAuthenticate, _headers._WWWAuthenticate); - ++arrayIndex; + break; } - if ((_bits & 0x100000000L) != 0) + case 22: { - if (arrayIndex == array.Length) + if (ReferenceEquals(HeaderNames.AccessControlMaxAge, key)) { + if ((_bits & 0x2000000000L) != 0) + { + _bits &= ~0x2000000000L; + _headers._AccessControlMaxAge = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.AccessControlAllowCredentials, _headers._AccessControlAllowCredentials); - ++arrayIndex; - } - if ((_bits & 0x200000000L) != 0) - { - if (arrayIndex == array.Length) + + if (HeaderNames.AccessControlMaxAge.Equals(key, StringComparison.OrdinalIgnoreCase)) { + if ((_bits & 0x2000000000L) != 0) + { + _bits &= ~0x2000000000L; + _headers._AccessControlMaxAge = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.AccessControlAllowHeaders, _headers._AccessControlAllowHeaders); - ++arrayIndex; + break; } - if ((_bits & 0x400000000L) != 0) + case 27: { - if (arrayIndex == array.Length) + if (ReferenceEquals(HeaderNames.AccessControlAllowOrigin, key)) { + if ((_bits & 0x800000000L) != 0) + { + _bits &= ~0x800000000L; + _headers._AccessControlAllowOrigin = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.AccessControlAllowMethods, _headers._AccessControlAllowMethods); - ++arrayIndex; - } - if ((_bits & 0x800000000L) != 0) - { - if (arrayIndex == array.Length) + + if (HeaderNames.AccessControlAllowOrigin.Equals(key, StringComparison.OrdinalIgnoreCase)) { + if ((_bits & 0x800000000L) != 0) + { + _bits &= ~0x800000000L; + _headers._AccessControlAllowOrigin = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.AccessControlAllowOrigin, _headers._AccessControlAllowOrigin); - ++arrayIndex; + break; } - if ((_bits & 0x1000000000L) != 0) + case 28: { - if (arrayIndex == array.Length) + if (ReferenceEquals(HeaderNames.AccessControlAllowHeaders, key)) + { + if ((_bits & 0x200000000L) != 0) + { + _bits &= ~0x200000000L; + _headers._AccessControlAllowHeaders = default(StringValues); + return true; + } + return false; + } + if (ReferenceEquals(HeaderNames.AccessControlAllowMethods, key)) { + if ((_bits & 0x400000000L) != 0) + { + _bits &= ~0x400000000L; + _headers._AccessControlAllowMethods = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.AccessControlExposeHeaders, _headers._AccessControlExposeHeaders); - ++arrayIndex; - } - if ((_bits & 0x2000000000L) != 0) - { - if (arrayIndex == array.Length) + + if (HeaderNames.AccessControlAllowHeaders.Equals(key, StringComparison.OrdinalIgnoreCase)) { + if ((_bits & 0x200000000L) != 0) + { + _bits &= ~0x200000000L; + _headers._AccessControlAllowHeaders = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.AccessControlMaxAge, _headers._AccessControlMaxAge); - ++arrayIndex; + if (HeaderNames.AccessControlAllowMethods.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x400000000L) != 0) + { + _bits &= ~0x400000000L; + _headers._AccessControlAllowMethods = default(StringValues); + return true; + } + return false; + } + break; } - if (_contentLength.HasValue) + case 29: { - if (arrayIndex == array.Length) + if (ReferenceEquals(HeaderNames.AccessControlExposeHeaders, key)) { + if ((_bits & 0x1000000000L) != 0) + { + _bits &= ~0x1000000000L; + _headers._AccessControlExposeHeaders = default(StringValues); + return true; + } return false; } - array[arrayIndex] = new KeyValuePair(HeaderNames.ContentLength, HeaderUtilities.FormatNonNegativeInt64(_contentLength.Value)); - ++arrayIndex; - } - ((ICollection>?)MaybeUnknown)?.CopyTo(array, arrayIndex); - - return true; - } - - internal bool HasInvalidH2H3Headers => (_bits & 67109266) != 0; - internal void ClearInvalidH2H3Headers() - { - _bits &= ~67109266; - } - internal unsafe void CopyToFast(ref BufferWriter output) - { - var tempBits = (ulong)_bits | (_contentLength.HasValue ? 0x8000000000000000L : 0); - var next = 0; - var keyStart = 0; - var keyLength = 0; - ref readonly StringValues values = ref Unsafe.AsRef(null); - - do - { - switch (next) - { - case 0: // Header: "Connection" - if ((tempBits & 0x2L) != 0) - { - tempBits ^= 0x2L; - if (_headers._rawConnection != null) - { - output.Write(_headers._rawConnection); - } - else - { - values = ref _headers._Connection; - keyStart = 17; - keyLength = 14; - next = 1; - break; // OutputHeader - } - } - goto case 1; - case 1: // Header: "Date" - if ((tempBits & 0x4L) != 0) - { - tempBits ^= 0x4L; - if (_headers._rawDate != null) - { - output.Write(_headers._rawDate); - } - else - { - values = ref _headers._Date; - keyStart = 31; - keyLength = 8; - next = 2; - break; // OutputHeader - } - } - goto case 2; - case 2: // Header: "Content-Type" - if ((tempBits & 0x1000L) != 0) - { - tempBits ^= 0x1000L; - values = ref _headers._ContentType; - keyStart = 150; - keyLength = 16; - next = 3; - break; // OutputHeader - } - goto case 3; - case 3: // Header: "Server" - if ((tempBits & 0x10000000L) != 0) - { - tempBits ^= 0x10000000L; - if (_headers._rawServer != null) - { - output.Write(_headers._rawServer); - } - else - { - values = ref _headers._Server; - keyStart = 398; - keyLength = 10; - next = 4; - break; // OutputHeader - } - } - goto case 4; - case 4: // Header: "Content-Length" - if ((tempBits & 0x8000000000000000L) != 0) - { - tempBits ^= 0x8000000000000000L; - output.Write(HeaderBytes.Slice(640, 18)); - output.WriteNumeric((ulong)ContentLength.GetValueOrDefault()); - if (tempBits == 0) - { - return; - } - } - goto case 5; - case 5: // Header: "Cache-Control" - if ((tempBits & 0x1L) != 0) - { - tempBits ^= 0x1L; - values = ref _headers._CacheControl; - keyStart = 0; - keyLength = 17; - next = 6; - break; // OutputHeader - } - goto case 6; - case 6: // Header: "Grpc-Encoding" - if ((tempBits & 0x8L) != 0) - { - tempBits ^= 0x8L; - values = ref _headers._GrpcEncoding; - keyStart = 39; - keyLength = 17; - next = 7; - break; // OutputHeader - } - goto case 7; - case 7: // Header: "Keep-Alive" - if ((tempBits & 0x10L) != 0) - { - tempBits ^= 0x10L; - values = ref _headers._KeepAlive; - keyStart = 56; - keyLength = 14; - next = 8; - break; // OutputHeader - } - goto case 8; - case 8: // Header: "Pragma" - if ((tempBits & 0x20L) != 0) - { - tempBits ^= 0x20L; - values = ref _headers._Pragma; - keyStart = 70; - keyLength = 10; - next = 9; - break; // OutputHeader - } - goto case 9; - case 9: // Header: "Trailer" - if ((tempBits & 0x40L) != 0) - { - tempBits ^= 0x40L; - values = ref _headers._Trailer; - keyStart = 80; - keyLength = 11; - next = 10; - break; // OutputHeader - } - goto case 10; - case 10: // Header: "Transfer-Encoding" - if ((tempBits & 0x80L) != 0) - { - tempBits ^= 0x80L; - if (_headers._rawTransferEncoding != null) - { - output.Write(_headers._rawTransferEncoding); - } - else - { - values = ref _headers._TransferEncoding; - keyStart = 91; - keyLength = 21; - next = 11; - break; // OutputHeader - } - } - goto case 11; - case 11: // Header: "Upgrade" - if ((tempBits & 0x100L) != 0) - { - tempBits ^= 0x100L; - values = ref _headers._Upgrade; - keyStart = 112; - keyLength = 11; - next = 12; - break; // OutputHeader - } - goto case 12; - case 12: // Header: "Via" - if ((tempBits & 0x200L) != 0) - { - tempBits ^= 0x200L; - values = ref _headers._Via; - keyStart = 123; - keyLength = 7; - next = 13; - break; // OutputHeader - } - goto case 13; - case 13: // Header: "Warning" - if ((tempBits & 0x400L) != 0) - { - tempBits ^= 0x400L; - values = ref _headers._Warning; - keyStart = 130; - keyLength = 11; - next = 14; - break; // OutputHeader - } - goto case 14; - case 14: // Header: "Allow" - if ((tempBits & 0x800L) != 0) + + if (HeaderNames.AccessControlExposeHeaders.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x1000000000L) != 0) { - tempBits ^= 0x800L; - values = ref _headers._Allow; - keyStart = 141; - keyLength = 9; - next = 15; - break; // OutputHeader + _bits &= ~0x1000000000L; + _headers._AccessControlExposeHeaders = default(StringValues); + return true; } - goto case 15; - case 15: // Header: "Content-Encoding" - if ((tempBits & 0x2000L) != 0) + return false; + } + break; + } + case 32: + { + if (ReferenceEquals(HeaderNames.AccessControlAllowCredentials, key)) + { + if ((_bits & 0x100000000L) != 0) { - tempBits ^= 0x2000L; - values = ref _headers._ContentEncoding; - keyStart = 166; - keyLength = 20; - next = 16; - break; // OutputHeader + _bits &= ~0x100000000L; + _headers._AccessControlAllowCredentials = default(StringValues); + return true; } - goto case 16; - case 16: // Header: "Content-Language" - if ((tempBits & 0x4000L) != 0) + return false; + } + + if (HeaderNames.AccessControlAllowCredentials.Equals(key, StringComparison.OrdinalIgnoreCase)) + { + if ((_bits & 0x100000000L) != 0) { - tempBits ^= 0x4000L; - values = ref _headers._ContentLanguage; - keyStart = 186; - keyLength = 20; - next = 17; - break; // OutputHeader - } - goto case 17; - case 17: // Header: "Content-Location" - if ((tempBits & 0x8000L) != 0) - { - tempBits ^= 0x8000L; - values = ref _headers._ContentLocation; - keyStart = 206; - keyLength = 20; - next = 18; - break; // OutputHeader - } - goto case 18; - case 18: // Header: "Content-MD5" - if ((tempBits & 0x10000L) != 0) - { - tempBits ^= 0x10000L; - values = ref _headers._ContentMD5; - keyStart = 226; - keyLength = 15; - next = 19; - break; // OutputHeader - } - goto case 19; - case 19: // Header: "Content-Range" - if ((tempBits & 0x20000L) != 0) - { - tempBits ^= 0x20000L; - values = ref _headers._ContentRange; - keyStart = 241; - keyLength = 17; - next = 20; - break; // OutputHeader - } - goto case 20; - case 20: // Header: "Expires" - if ((tempBits & 0x40000L) != 0) - { - tempBits ^= 0x40000L; - values = ref _headers._Expires; - keyStart = 258; - keyLength = 11; - next = 21; - break; // OutputHeader - } - goto case 21; - case 21: // Header: "Last-Modified" - if ((tempBits & 0x80000L) != 0) - { - tempBits ^= 0x80000L; - values = ref _headers._LastModified; - keyStart = 269; - keyLength = 17; - next = 22; - break; // OutputHeader - } - goto case 22; - case 22: // Header: "Accept-Ranges" - if ((tempBits & 0x100000L) != 0) - { - tempBits ^= 0x100000L; - values = ref _headers._AcceptRanges; - keyStart = 286; - keyLength = 17; - next = 23; - break; // OutputHeader - } - goto case 23; - case 23: // Header: "Age" - if ((tempBits & 0x200000L) != 0) - { - tempBits ^= 0x200000L; - values = ref _headers._Age; - keyStart = 303; - keyLength = 7; - next = 24; - break; // OutputHeader - } - goto case 24; - case 24: // Header: "Alt-Svc" - if ((tempBits & 0x400000L) != 0) - { - tempBits ^= 0x400000L; - values = ref _headers._AltSvc; - keyStart = 310; - keyLength = 11; - next = 25; - break; // OutputHeader - } - goto case 25; - case 25: // Header: "ETag" - if ((tempBits & 0x800000L) != 0) - { - tempBits ^= 0x800000L; - values = ref _headers._ETag; - keyStart = 321; - keyLength = 8; - next = 26; - break; // OutputHeader - } - goto case 26; - case 26: // Header: "Location" - if ((tempBits & 0x1000000L) != 0) - { - tempBits ^= 0x1000000L; - values = ref _headers._Location; - keyStart = 329; - keyLength = 12; - next = 27; - break; // OutputHeader - } - goto case 27; - case 27: // Header: "Proxy-Authenticate" - if ((tempBits & 0x2000000L) != 0) - { - tempBits ^= 0x2000000L; - values = ref _headers._ProxyAuthenticate; - keyStart = 341; - keyLength = 22; - next = 28; - break; // OutputHeader - } - goto case 28; - case 28: // Header: "Proxy-Connection" - if ((tempBits & 0x4000000L) != 0) - { - tempBits ^= 0x4000000L; - values = ref _headers._ProxyConnection; - keyStart = 363; - keyLength = 20; - next = 29; - break; // OutputHeader - } - goto case 29; - case 29: // Header: "Retry-After" - if ((tempBits & 0x8000000L) != 0) - { - tempBits ^= 0x8000000L; - values = ref _headers._RetryAfter; - keyStart = 383; - keyLength = 15; - next = 30; - break; // OutputHeader - } - goto case 30; - case 30: // Header: "Set-Cookie" - if ((tempBits & 0x20000000L) != 0) - { - tempBits ^= 0x20000000L; - values = ref _headers._SetCookie; - keyStart = 408; - keyLength = 14; - next = 31; - break; // OutputHeader - } - goto case 31; - case 31: // Header: "Vary" - if ((tempBits & 0x40000000L) != 0) - { - tempBits ^= 0x40000000L; - values = ref _headers._Vary; - keyStart = 422; - keyLength = 8; - next = 32; - break; // OutputHeader - } - goto case 32; - case 32: // Header: "WWW-Authenticate" - if ((tempBits & 0x80000000L) != 0) - { - tempBits ^= 0x80000000L; - values = ref _headers._WWWAuthenticate; - keyStart = 430; - keyLength = 20; - next = 33; - break; // OutputHeader - } - goto case 33; - case 33: // Header: "Access-Control-Allow-Credentials" - if ((tempBits & 0x100000000L) != 0) - { - tempBits ^= 0x100000000L; - values = ref _headers._AccessControlAllowCredentials; - keyStart = 450; - keyLength = 36; - next = 34; - break; // OutputHeader - } - goto case 34; - case 34: // Header: "Access-Control-Allow-Headers" - if ((tempBits & 0x200000000L) != 0) - { - tempBits ^= 0x200000000L; - values = ref _headers._AccessControlAllowHeaders; - keyStart = 486; - keyLength = 32; - next = 35; - break; // OutputHeader - } - goto case 35; - case 35: // Header: "Access-Control-Allow-Methods" - if ((tempBits & 0x400000000L) != 0) - { - tempBits ^= 0x400000000L; - values = ref _headers._AccessControlAllowMethods; - keyStart = 518; - keyLength = 32; - next = 36; - break; // OutputHeader - } - goto case 36; - case 36: // Header: "Access-Control-Allow-Origin" - if ((tempBits & 0x800000000L) != 0) - { - tempBits ^= 0x800000000L; - values = ref _headers._AccessControlAllowOrigin; - keyStart = 550; - keyLength = 31; - next = 37; - break; // OutputHeader - } - goto case 37; - case 37: // Header: "Access-Control-Expose-Headers" - if ((tempBits & 0x1000000000L) != 0) - { - tempBits ^= 0x1000000000L; - values = ref _headers._AccessControlExposeHeaders; - keyStart = 581; - keyLength = 33; - next = 38; - break; // OutputHeader - } - goto case 38; - case 38: // Header: "Access-Control-Max-Age" - if ((tempBits & 0x2000000000L) != 0) - { - tempBits ^= 0x2000000000L; - values = ref _headers._AccessControlMaxAge; - keyStart = 614; - keyLength = 26; - next = 39; - break; // OutputHeader - } - return; - default: - return; - } - - // OutputHeader - { - var valueCount = values.Count; - var headerKey = HeaderBytes.Slice(keyStart, keyLength); - for (var i = 0; i < valueCount; i++) - { - var value = values[i]; - if (value != null) - { - output.Write(headerKey); - output.WriteAscii(value); + _bits &= ~0x100000000L; + _headers._AccessControlAllowCredentials = default(StringValues); + return true; } + return false; } + break; } - } while (tempBits != 0); - } + } - private struct HeaderReferences - { - public StringValues _CacheControl; - public StringValues _Connection; - public StringValues _Date; - public StringValues _GrpcEncoding; - public StringValues _KeepAlive; - public StringValues _Pragma; - public StringValues _Trailer; - public StringValues _TransferEncoding; - public StringValues _Upgrade; - public StringValues _Via; - public StringValues _Warning; - public StringValues _Allow; - public StringValues _ContentType; - public StringValues _ContentEncoding; - public StringValues _ContentLanguage; - public StringValues _ContentLocation; - public StringValues _ContentMD5; - public StringValues _ContentRange; - public StringValues _Expires; - public StringValues _LastModified; - public StringValues _AcceptRanges; - public StringValues _Age; - public StringValues _AltSvc; - public StringValues _ETag; - public StringValues _Location; - public StringValues _ProxyAuthenticate; - public StringValues _ProxyConnection; - public StringValues _RetryAfter; - public StringValues _Server; - public StringValues _SetCookie; - public StringValues _Vary; - public StringValues _WWWAuthenticate; - public StringValues _AccessControlAllowCredentials; - public StringValues _AccessControlAllowHeaders; - public StringValues _AccessControlAllowMethods; - public StringValues _AccessControlAllowOrigin; - public StringValues _AccessControlExposeHeaders; - public StringValues _AccessControlMaxAge; - - public byte[]? _rawConnection; - public byte[]? _rawDate; - public byte[]? _rawTransferEncoding; - public byte[]? _rawServer; + return RemoveUnknown(key); } - - public partial struct Enumerator + protected override void ClearFast() { - // Compiled to Jump table - public bool MoveNext() + MaybeUnknown?.Clear(); + _contentLength = null; + var tempBits = _bits; + _bits = 0; + if(BitOperations.PopCount((ulong)tempBits) > 12) { - switch (_next) + _headers = default(HeaderReferences); + return; + } + + if ((tempBits & 0x2L) != 0) + { + _headers._Connection = default; + if((tempBits & ~0x2L) == 0) { - case 0: - goto HeaderCacheControl; - case 1: - goto HeaderConnection; - case 2: - goto HeaderDate; - case 3: - goto HeaderGrpcEncoding; - case 4: - goto HeaderKeepAlive; - case 5: - goto HeaderPragma; - case 6: - goto HeaderTrailer; - case 7: - goto HeaderTransferEncoding; - case 8: - goto HeaderUpgrade; - case 9: - goto HeaderVia; - case 10: - goto HeaderWarning; - case 11: - goto HeaderAllow; - case 12: - goto HeaderContentType; - case 13: - goto HeaderContentEncoding; - case 14: - goto HeaderContentLanguage; - case 15: - goto HeaderContentLocation; - case 16: - goto HeaderContentMD5; - case 17: - goto HeaderContentRange; - case 18: - goto HeaderExpires; - case 19: - goto HeaderLastModified; - case 20: - goto HeaderAcceptRanges; - case 21: - goto HeaderAge; - case 22: - goto HeaderAltSvc; - case 23: - goto HeaderETag; - case 24: - goto HeaderLocation; - case 25: - goto HeaderProxyAuthenticate; - case 26: - goto HeaderProxyConnection; - case 27: - goto HeaderRetryAfter; - case 28: - goto HeaderServer; - case 29: - goto HeaderSetCookie; - case 30: - goto HeaderVary; - case 31: - goto HeaderWWWAuthenticate; - case 32: - goto HeaderAccessControlAllowCredentials; - case 33: - goto HeaderAccessControlAllowHeaders; - case 34: - goto HeaderAccessControlAllowMethods; - case 35: - goto HeaderAccessControlAllowOrigin; - case 36: - goto HeaderAccessControlExposeHeaders; - case 37: - goto HeaderAccessControlMaxAge; - case 38: - goto HeaderContentLength; - default: - goto ExtraHeaders; + return; } - - HeaderCacheControl: // case 0 - if ((_bits & 0x1L) != 0) - { - _current = new KeyValuePair(HeaderNames.CacheControl, _collection._headers._CacheControl); - _currentKnownType = KnownHeaderType.CacheControl; - _next = 1; - return true; - } - HeaderConnection: // case 1 - if ((_bits & 0x2L) != 0) - { - _current = new KeyValuePair(HeaderNames.Connection, _collection._headers._Connection); - _currentKnownType = KnownHeaderType.Connection; - _next = 2; - return true; - } - HeaderDate: // case 2 - if ((_bits & 0x4L) != 0) - { - _current = new KeyValuePair(HeaderNames.Date, _collection._headers._Date); - _currentKnownType = KnownHeaderType.Date; - _next = 3; - return true; - } - HeaderGrpcEncoding: // case 3 - if ((_bits & 0x8L) != 0) - { - _current = new KeyValuePair(HeaderNames.GrpcEncoding, _collection._headers._GrpcEncoding); - _currentKnownType = KnownHeaderType.GrpcEncoding; - _next = 4; - return true; - } - HeaderKeepAlive: // case 4 - if ((_bits & 0x10L) != 0) - { - _current = new KeyValuePair(HeaderNames.KeepAlive, _collection._headers._KeepAlive); - _currentKnownType = KnownHeaderType.KeepAlive; - _next = 5; - return true; - } - HeaderPragma: // case 5 - if ((_bits & 0x20L) != 0) - { - _current = new KeyValuePair(HeaderNames.Pragma, _collection._headers._Pragma); - _currentKnownType = KnownHeaderType.Pragma; - _next = 6; - return true; - } - HeaderTrailer: // case 6 - if ((_bits & 0x40L) != 0) - { - _current = new KeyValuePair(HeaderNames.Trailer, _collection._headers._Trailer); - _currentKnownType = KnownHeaderType.Trailer; - _next = 7; - return true; - } - HeaderTransferEncoding: // case 7 - if ((_bits & 0x80L) != 0) - { - _current = new KeyValuePair(HeaderNames.TransferEncoding, _collection._headers._TransferEncoding); - _currentKnownType = KnownHeaderType.TransferEncoding; - _next = 8; - return true; - } - HeaderUpgrade: // case 8 - if ((_bits & 0x100L) != 0) - { - _current = new KeyValuePair(HeaderNames.Upgrade, _collection._headers._Upgrade); - _currentKnownType = KnownHeaderType.Upgrade; - _next = 9; - return true; - } - HeaderVia: // case 9 - if ((_bits & 0x200L) != 0) - { - _current = new KeyValuePair(HeaderNames.Via, _collection._headers._Via); - _currentKnownType = KnownHeaderType.Via; - _next = 10; - return true; - } - HeaderWarning: // case 10 - if ((_bits & 0x400L) != 0) - { - _current = new KeyValuePair(HeaderNames.Warning, _collection._headers._Warning); - _currentKnownType = KnownHeaderType.Warning; - _next = 11; - return true; - } - HeaderAllow: // case 11 - if ((_bits & 0x800L) != 0) - { - _current = new KeyValuePair(HeaderNames.Allow, _collection._headers._Allow); - _currentKnownType = KnownHeaderType.Allow; - _next = 12; - return true; - } - HeaderContentType: // case 12 - if ((_bits & 0x1000L) != 0) - { - _current = new KeyValuePair(HeaderNames.ContentType, _collection._headers._ContentType); - _currentKnownType = KnownHeaderType.ContentType; - _next = 13; - return true; - } - HeaderContentEncoding: // case 13 - if ((_bits & 0x2000L) != 0) - { - _current = new KeyValuePair(HeaderNames.ContentEncoding, _collection._headers._ContentEncoding); + tempBits &= ~0x2L; + } + + if ((tempBits & 0x4L) != 0) + { + _headers._Date = default; + if((tempBits & ~0x4L) == 0) + { + return; + } + tempBits &= ~0x4L; + } + + if ((tempBits & 0x1000L) != 0) + { + _headers._ContentType = default; + if((tempBits & ~0x1000L) == 0) + { + return; + } + tempBits &= ~0x1000L; + } + + if ((tempBits & 0x10000000L) != 0) + { + _headers._Server = default; + if((tempBits & ~0x10000000L) == 0) + { + return; + } + tempBits &= ~0x10000000L; + } + + if ((tempBits & 0x1L) != 0) + { + _headers._CacheControl = default; + if((tempBits & ~0x1L) == 0) + { + return; + } + tempBits &= ~0x1L; + } + + if ((tempBits & 0x8L) != 0) + { + _headers._GrpcEncoding = default; + if((tempBits & ~0x8L) == 0) + { + return; + } + tempBits &= ~0x8L; + } + + if ((tempBits & 0x10L) != 0) + { + _headers._KeepAlive = default; + if((tempBits & ~0x10L) == 0) + { + return; + } + tempBits &= ~0x10L; + } + + if ((tempBits & 0x20L) != 0) + { + _headers._Pragma = default; + if((tempBits & ~0x20L) == 0) + { + return; + } + tempBits &= ~0x20L; + } + + if ((tempBits & 0x40L) != 0) + { + _headers._Trailer = default; + if((tempBits & ~0x40L) == 0) + { + return; + } + tempBits &= ~0x40L; + } + + if ((tempBits & 0x80L) != 0) + { + _headers._TransferEncoding = default; + if((tempBits & ~0x80L) == 0) + { + return; + } + tempBits &= ~0x80L; + } + + if ((tempBits & 0x100L) != 0) + { + _headers._Upgrade = default; + if((tempBits & ~0x100L) == 0) + { + return; + } + tempBits &= ~0x100L; + } + + if ((tempBits & 0x200L) != 0) + { + _headers._Via = default; + if((tempBits & ~0x200L) == 0) + { + return; + } + tempBits &= ~0x200L; + } + + if ((tempBits & 0x400L) != 0) + { + _headers._Warning = default; + if((tempBits & ~0x400L) == 0) + { + return; + } + tempBits &= ~0x400L; + } + + if ((tempBits & 0x800L) != 0) + { + _headers._Allow = default; + if((tempBits & ~0x800L) == 0) + { + return; + } + tempBits &= ~0x800L; + } + + if ((tempBits & 0x2000L) != 0) + { + _headers._ContentEncoding = default; + if((tempBits & ~0x2000L) == 0) + { + return; + } + tempBits &= ~0x2000L; + } + + if ((tempBits & 0x4000L) != 0) + { + _headers._ContentLanguage = default; + if((tempBits & ~0x4000L) == 0) + { + return; + } + tempBits &= ~0x4000L; + } + + if ((tempBits & 0x8000L) != 0) + { + _headers._ContentLocation = default; + if((tempBits & ~0x8000L) == 0) + { + return; + } + tempBits &= ~0x8000L; + } + + if ((tempBits & 0x10000L) != 0) + { + _headers._ContentMD5 = default; + if((tempBits & ~0x10000L) == 0) + { + return; + } + tempBits &= ~0x10000L; + } + + if ((tempBits & 0x20000L) != 0) + { + _headers._ContentRange = default; + if((tempBits & ~0x20000L) == 0) + { + return; + } + tempBits &= ~0x20000L; + } + + if ((tempBits & 0x40000L) != 0) + { + _headers._Expires = default; + if((tempBits & ~0x40000L) == 0) + { + return; + } + tempBits &= ~0x40000L; + } + + if ((tempBits & 0x80000L) != 0) + { + _headers._LastModified = default; + if((tempBits & ~0x80000L) == 0) + { + return; + } + tempBits &= ~0x80000L; + } + + if ((tempBits & 0x100000L) != 0) + { + _headers._AcceptRanges = default; + if((tempBits & ~0x100000L) == 0) + { + return; + } + tempBits &= ~0x100000L; + } + + if ((tempBits & 0x200000L) != 0) + { + _headers._Age = default; + if((tempBits & ~0x200000L) == 0) + { + return; + } + tempBits &= ~0x200000L; + } + + if ((tempBits & 0x400000L) != 0) + { + _headers._AltSvc = default; + if((tempBits & ~0x400000L) == 0) + { + return; + } + tempBits &= ~0x400000L; + } + + if ((tempBits & 0x800000L) != 0) + { + _headers._ETag = default; + if((tempBits & ~0x800000L) == 0) + { + return; + } + tempBits &= ~0x800000L; + } + + if ((tempBits & 0x1000000L) != 0) + { + _headers._Location = default; + if((tempBits & ~0x1000000L) == 0) + { + return; + } + tempBits &= ~0x1000000L; + } + + if ((tempBits & 0x2000000L) != 0) + { + _headers._ProxyAuthenticate = default; + if((tempBits & ~0x2000000L) == 0) + { + return; + } + tempBits &= ~0x2000000L; + } + + if ((tempBits & 0x4000000L) != 0) + { + _headers._ProxyConnection = default; + if((tempBits & ~0x4000000L) == 0) + { + return; + } + tempBits &= ~0x4000000L; + } + + if ((tempBits & 0x8000000L) != 0) + { + _headers._RetryAfter = default; + if((tempBits & ~0x8000000L) == 0) + { + return; + } + tempBits &= ~0x8000000L; + } + + if ((tempBits & 0x20000000L) != 0) + { + _headers._SetCookie = default; + if((tempBits & ~0x20000000L) == 0) + { + return; + } + tempBits &= ~0x20000000L; + } + + if ((tempBits & 0x40000000L) != 0) + { + _headers._Vary = default; + if((tempBits & ~0x40000000L) == 0) + { + return; + } + tempBits &= ~0x40000000L; + } + + if ((tempBits & 0x80000000L) != 0) + { + _headers._WWWAuthenticate = default; + if((tempBits & ~0x80000000L) == 0) + { + return; + } + tempBits &= ~0x80000000L; + } + + if ((tempBits & 0x100000000L) != 0) + { + _headers._AccessControlAllowCredentials = default; + if((tempBits & ~0x100000000L) == 0) + { + return; + } + tempBits &= ~0x100000000L; + } + + if ((tempBits & 0x200000000L) != 0) + { + _headers._AccessControlAllowHeaders = default; + if((tempBits & ~0x200000000L) == 0) + { + return; + } + tempBits &= ~0x200000000L; + } + + if ((tempBits & 0x400000000L) != 0) + { + _headers._AccessControlAllowMethods = default; + if((tempBits & ~0x400000000L) == 0) + { + return; + } + tempBits &= ~0x400000000L; + } + + if ((tempBits & 0x800000000L) != 0) + { + _headers._AccessControlAllowOrigin = default; + if((tempBits & ~0x800000000L) == 0) + { + return; + } + tempBits &= ~0x800000000L; + } + + if ((tempBits & 0x1000000000L) != 0) + { + _headers._AccessControlExposeHeaders = default; + if((tempBits & ~0x1000000000L) == 0) + { + return; + } + tempBits &= ~0x1000000000L; + } + + if ((tempBits & 0x2000000000L) != 0) + { + _headers._AccessControlMaxAge = default; + if((tempBits & ~0x2000000000L) == 0) + { + return; + } + tempBits &= ~0x2000000000L; + } + + } + + protected override bool CopyToFast(KeyValuePair[] array, int arrayIndex) + { + if (arrayIndex < 0) + { + return false; + } + + if ((_bits & 0x1L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.CacheControl, _headers._CacheControl); + ++arrayIndex; + } + if ((_bits & 0x2L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.Connection, _headers._Connection); + ++arrayIndex; + } + if ((_bits & 0x4L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.Date, _headers._Date); + ++arrayIndex; + } + if ((_bits & 0x8L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.GrpcEncoding, _headers._GrpcEncoding); + ++arrayIndex; + } + if ((_bits & 0x10L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.KeepAlive, _headers._KeepAlive); + ++arrayIndex; + } + if ((_bits & 0x20L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.Pragma, _headers._Pragma); + ++arrayIndex; + } + if ((_bits & 0x40L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.Trailer, _headers._Trailer); + ++arrayIndex; + } + if ((_bits & 0x80L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.TransferEncoding, _headers._TransferEncoding); + ++arrayIndex; + } + if ((_bits & 0x100L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.Upgrade, _headers._Upgrade); + ++arrayIndex; + } + if ((_bits & 0x200L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.Via, _headers._Via); + ++arrayIndex; + } + if ((_bits & 0x400L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.Warning, _headers._Warning); + ++arrayIndex; + } + if ((_bits & 0x800L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.Allow, _headers._Allow); + ++arrayIndex; + } + if ((_bits & 0x1000L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.ContentType, _headers._ContentType); + ++arrayIndex; + } + if ((_bits & 0x2000L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.ContentEncoding, _headers._ContentEncoding); + ++arrayIndex; + } + if ((_bits & 0x4000L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.ContentLanguage, _headers._ContentLanguage); + ++arrayIndex; + } + if ((_bits & 0x8000L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.ContentLocation, _headers._ContentLocation); + ++arrayIndex; + } + if ((_bits & 0x10000L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.ContentMD5, _headers._ContentMD5); + ++arrayIndex; + } + if ((_bits & 0x20000L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.ContentRange, _headers._ContentRange); + ++arrayIndex; + } + if ((_bits & 0x40000L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.Expires, _headers._Expires); + ++arrayIndex; + } + if ((_bits & 0x80000L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.LastModified, _headers._LastModified); + ++arrayIndex; + } + if ((_bits & 0x100000L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.AcceptRanges, _headers._AcceptRanges); + ++arrayIndex; + } + if ((_bits & 0x200000L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.Age, _headers._Age); + ++arrayIndex; + } + if ((_bits & 0x400000L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.AltSvc, _headers._AltSvc); + ++arrayIndex; + } + if ((_bits & 0x800000L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.ETag, _headers._ETag); + ++arrayIndex; + } + if ((_bits & 0x1000000L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.Location, _headers._Location); + ++arrayIndex; + } + if ((_bits & 0x2000000L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.ProxyAuthenticate, _headers._ProxyAuthenticate); + ++arrayIndex; + } + if ((_bits & 0x4000000L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.ProxyConnection, _headers._ProxyConnection); + ++arrayIndex; + } + if ((_bits & 0x8000000L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.RetryAfter, _headers._RetryAfter); + ++arrayIndex; + } + if ((_bits & 0x10000000L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.Server, _headers._Server); + ++arrayIndex; + } + if ((_bits & 0x20000000L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.SetCookie, _headers._SetCookie); + ++arrayIndex; + } + if ((_bits & 0x40000000L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.Vary, _headers._Vary); + ++arrayIndex; + } + if ((_bits & 0x80000000L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.WWWAuthenticate, _headers._WWWAuthenticate); + ++arrayIndex; + } + if ((_bits & 0x100000000L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.AccessControlAllowCredentials, _headers._AccessControlAllowCredentials); + ++arrayIndex; + } + if ((_bits & 0x200000000L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.AccessControlAllowHeaders, _headers._AccessControlAllowHeaders); + ++arrayIndex; + } + if ((_bits & 0x400000000L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.AccessControlAllowMethods, _headers._AccessControlAllowMethods); + ++arrayIndex; + } + if ((_bits & 0x800000000L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.AccessControlAllowOrigin, _headers._AccessControlAllowOrigin); + ++arrayIndex; + } + if ((_bits & 0x1000000000L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.AccessControlExposeHeaders, _headers._AccessControlExposeHeaders); + ++arrayIndex; + } + if ((_bits & 0x2000000000L) != 0) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.AccessControlMaxAge, _headers._AccessControlMaxAge); + ++arrayIndex; + } + if (_contentLength.HasValue) + { + if (arrayIndex == array.Length) + { + return false; + } + array[arrayIndex] = new KeyValuePair(HeaderNames.ContentLength, HeaderUtilities.FormatNonNegativeInt64(_contentLength.Value)); + ++arrayIndex; + } + ((ICollection>?)MaybeUnknown)?.CopyTo(array, arrayIndex); + + return true; + } + + internal bool HasInvalidH2H3Headers => (_bits & 67109266) != 0; + internal void ClearInvalidH2H3Headers() + { + _bits &= ~67109266; + } + internal unsafe void CopyToFast(ref BufferWriter output) + { + var tempBits = (ulong)_bits | (_contentLength.HasValue ? 0x8000000000000000L : 0); + var next = 0; + var keyStart = 0; + var keyLength = 0; + ref readonly StringValues values = ref Unsafe.AsRef(null); + + do + { + switch (next) + { + case 0: // Header: "Connection" + if ((tempBits & 0x2L) != 0) + { + tempBits ^= 0x2L; + if (_headers._rawConnection != null) + { + output.Write(_headers._rawConnection); + } + else + { + values = ref _headers._Connection; + keyStart = 17; + keyLength = 14; + next = 1; + break; // OutputHeader + } + } + goto case 1; + case 1: // Header: "Date" + if ((tempBits & 0x4L) != 0) + { + tempBits ^= 0x4L; + if (_headers._rawDate != null) + { + output.Write(_headers._rawDate); + } + else + { + values = ref _headers._Date; + keyStart = 31; + keyLength = 8; + next = 2; + break; // OutputHeader + } + } + goto case 2; + case 2: // Header: "Content-Type" + if ((tempBits & 0x1000L) != 0) + { + tempBits ^= 0x1000L; + values = ref _headers._ContentType; + keyStart = 150; + keyLength = 16; + next = 3; + break; // OutputHeader + } + goto case 3; + case 3: // Header: "Server" + if ((tempBits & 0x10000000L) != 0) + { + tempBits ^= 0x10000000L; + if (_headers._rawServer != null) + { + output.Write(_headers._rawServer); + } + else + { + values = ref _headers._Server; + keyStart = 398; + keyLength = 10; + next = 4; + break; // OutputHeader + } + } + goto case 4; + case 4: // Header: "Content-Length" + if ((tempBits & 0x8000000000000000L) != 0) + { + tempBits ^= 0x8000000000000000L; + output.Write(HeaderBytes.Slice(640, 18)); + output.WriteNumeric((ulong)ContentLength.GetValueOrDefault()); + if (tempBits == 0) + { + return; + } + } + goto case 5; + case 5: // Header: "Cache-Control" + if ((tempBits & 0x1L) != 0) + { + tempBits ^= 0x1L; + values = ref _headers._CacheControl; + keyStart = 0; + keyLength = 17; + next = 6; + break; // OutputHeader + } + goto case 6; + case 6: // Header: "Grpc-Encoding" + if ((tempBits & 0x8L) != 0) + { + tempBits ^= 0x8L; + values = ref _headers._GrpcEncoding; + keyStart = 39; + keyLength = 17; + next = 7; + break; // OutputHeader + } + goto case 7; + case 7: // Header: "Keep-Alive" + if ((tempBits & 0x10L) != 0) + { + tempBits ^= 0x10L; + values = ref _headers._KeepAlive; + keyStart = 56; + keyLength = 14; + next = 8; + break; // OutputHeader + } + goto case 8; + case 8: // Header: "Pragma" + if ((tempBits & 0x20L) != 0) + { + tempBits ^= 0x20L; + values = ref _headers._Pragma; + keyStart = 70; + keyLength = 10; + next = 9; + break; // OutputHeader + } + goto case 9; + case 9: // Header: "Trailer" + if ((tempBits & 0x40L) != 0) + { + tempBits ^= 0x40L; + values = ref _headers._Trailer; + keyStart = 80; + keyLength = 11; + next = 10; + break; // OutputHeader + } + goto case 10; + case 10: // Header: "Transfer-Encoding" + if ((tempBits & 0x80L) != 0) + { + tempBits ^= 0x80L; + if (_headers._rawTransferEncoding != null) + { + output.Write(_headers._rawTransferEncoding); + } + else + { + values = ref _headers._TransferEncoding; + keyStart = 91; + keyLength = 21; + next = 11; + break; // OutputHeader + } + } + goto case 11; + case 11: // Header: "Upgrade" + if ((tempBits & 0x100L) != 0) + { + tempBits ^= 0x100L; + values = ref _headers._Upgrade; + keyStart = 112; + keyLength = 11; + next = 12; + break; // OutputHeader + } + goto case 12; + case 12: // Header: "Via" + if ((tempBits & 0x200L) != 0) + { + tempBits ^= 0x200L; + values = ref _headers._Via; + keyStart = 123; + keyLength = 7; + next = 13; + break; // OutputHeader + } + goto case 13; + case 13: // Header: "Warning" + if ((tempBits & 0x400L) != 0) + { + tempBits ^= 0x400L; + values = ref _headers._Warning; + keyStart = 130; + keyLength = 11; + next = 14; + break; // OutputHeader + } + goto case 14; + case 14: // Header: "Allow" + if ((tempBits & 0x800L) != 0) + { + tempBits ^= 0x800L; + values = ref _headers._Allow; + keyStart = 141; + keyLength = 9; + next = 15; + break; // OutputHeader + } + goto case 15; + case 15: // Header: "Content-Encoding" + if ((tempBits & 0x2000L) != 0) + { + tempBits ^= 0x2000L; + values = ref _headers._ContentEncoding; + keyStart = 166; + keyLength = 20; + next = 16; + break; // OutputHeader + } + goto case 16; + case 16: // Header: "Content-Language" + if ((tempBits & 0x4000L) != 0) + { + tempBits ^= 0x4000L; + values = ref _headers._ContentLanguage; + keyStart = 186; + keyLength = 20; + next = 17; + break; // OutputHeader + } + goto case 17; + case 17: // Header: "Content-Location" + if ((tempBits & 0x8000L) != 0) + { + tempBits ^= 0x8000L; + values = ref _headers._ContentLocation; + keyStart = 206; + keyLength = 20; + next = 18; + break; // OutputHeader + } + goto case 18; + case 18: // Header: "Content-MD5" + if ((tempBits & 0x10000L) != 0) + { + tempBits ^= 0x10000L; + values = ref _headers._ContentMD5; + keyStart = 226; + keyLength = 15; + next = 19; + break; // OutputHeader + } + goto case 19; + case 19: // Header: "Content-Range" + if ((tempBits & 0x20000L) != 0) + { + tempBits ^= 0x20000L; + values = ref _headers._ContentRange; + keyStart = 241; + keyLength = 17; + next = 20; + break; // OutputHeader + } + goto case 20; + case 20: // Header: "Expires" + if ((tempBits & 0x40000L) != 0) + { + tempBits ^= 0x40000L; + values = ref _headers._Expires; + keyStart = 258; + keyLength = 11; + next = 21; + break; // OutputHeader + } + goto case 21; + case 21: // Header: "Last-Modified" + if ((tempBits & 0x80000L) != 0) + { + tempBits ^= 0x80000L; + values = ref _headers._LastModified; + keyStart = 269; + keyLength = 17; + next = 22; + break; // OutputHeader + } + goto case 22; + case 22: // Header: "Accept-Ranges" + if ((tempBits & 0x100000L) != 0) + { + tempBits ^= 0x100000L; + values = ref _headers._AcceptRanges; + keyStart = 286; + keyLength = 17; + next = 23; + break; // OutputHeader + } + goto case 23; + case 23: // Header: "Age" + if ((tempBits & 0x200000L) != 0) + { + tempBits ^= 0x200000L; + values = ref _headers._Age; + keyStart = 303; + keyLength = 7; + next = 24; + break; // OutputHeader + } + goto case 24; + case 24: // Header: "Alt-Svc" + if ((tempBits & 0x400000L) != 0) + { + tempBits ^= 0x400000L; + values = ref _headers._AltSvc; + keyStart = 310; + keyLength = 11; + next = 25; + break; // OutputHeader + } + goto case 25; + case 25: // Header: "ETag" + if ((tempBits & 0x800000L) != 0) + { + tempBits ^= 0x800000L; + values = ref _headers._ETag; + keyStart = 321; + keyLength = 8; + next = 26; + break; // OutputHeader + } + goto case 26; + case 26: // Header: "Location" + if ((tempBits & 0x1000000L) != 0) + { + tempBits ^= 0x1000000L; + values = ref _headers._Location; + keyStart = 329; + keyLength = 12; + next = 27; + break; // OutputHeader + } + goto case 27; + case 27: // Header: "Proxy-Authenticate" + if ((tempBits & 0x2000000L) != 0) + { + tempBits ^= 0x2000000L; + values = ref _headers._ProxyAuthenticate; + keyStart = 341; + keyLength = 22; + next = 28; + break; // OutputHeader + } + goto case 28; + case 28: // Header: "Proxy-Connection" + if ((tempBits & 0x4000000L) != 0) + { + tempBits ^= 0x4000000L; + values = ref _headers._ProxyConnection; + keyStart = 363; + keyLength = 20; + next = 29; + break; // OutputHeader + } + goto case 29; + case 29: // Header: "Retry-After" + if ((tempBits & 0x8000000L) != 0) + { + tempBits ^= 0x8000000L; + values = ref _headers._RetryAfter; + keyStart = 383; + keyLength = 15; + next = 30; + break; // OutputHeader + } + goto case 30; + case 30: // Header: "Set-Cookie" + if ((tempBits & 0x20000000L) != 0) + { + tempBits ^= 0x20000000L; + values = ref _headers._SetCookie; + keyStart = 408; + keyLength = 14; + next = 31; + break; // OutputHeader + } + goto case 31; + case 31: // Header: "Vary" + if ((tempBits & 0x40000000L) != 0) + { + tempBits ^= 0x40000000L; + values = ref _headers._Vary; + keyStart = 422; + keyLength = 8; + next = 32; + break; // OutputHeader + } + goto case 32; + case 32: // Header: "WWW-Authenticate" + if ((tempBits & 0x80000000L) != 0) + { + tempBits ^= 0x80000000L; + values = ref _headers._WWWAuthenticate; + keyStart = 430; + keyLength = 20; + next = 33; + break; // OutputHeader + } + goto case 33; + case 33: // Header: "Access-Control-Allow-Credentials" + if ((tempBits & 0x100000000L) != 0) + { + tempBits ^= 0x100000000L; + values = ref _headers._AccessControlAllowCredentials; + keyStart = 450; + keyLength = 36; + next = 34; + break; // OutputHeader + } + goto case 34; + case 34: // Header: "Access-Control-Allow-Headers" + if ((tempBits & 0x200000000L) != 0) + { + tempBits ^= 0x200000000L; + values = ref _headers._AccessControlAllowHeaders; + keyStart = 486; + keyLength = 32; + next = 35; + break; // OutputHeader + } + goto case 35; + case 35: // Header: "Access-Control-Allow-Methods" + if ((tempBits & 0x400000000L) != 0) + { + tempBits ^= 0x400000000L; + values = ref _headers._AccessControlAllowMethods; + keyStart = 518; + keyLength = 32; + next = 36; + break; // OutputHeader + } + goto case 36; + case 36: // Header: "Access-Control-Allow-Origin" + if ((tempBits & 0x800000000L) != 0) + { + tempBits ^= 0x800000000L; + values = ref _headers._AccessControlAllowOrigin; + keyStart = 550; + keyLength = 31; + next = 37; + break; // OutputHeader + } + goto case 37; + case 37: // Header: "Access-Control-Expose-Headers" + if ((tempBits & 0x1000000000L) != 0) + { + tempBits ^= 0x1000000000L; + values = ref _headers._AccessControlExposeHeaders; + keyStart = 581; + keyLength = 33; + next = 38; + break; // OutputHeader + } + goto case 38; + case 38: // Header: "Access-Control-Max-Age" + if ((tempBits & 0x2000000000L) != 0) + { + tempBits ^= 0x2000000000L; + values = ref _headers._AccessControlMaxAge; + keyStart = 614; + keyLength = 26; + next = 39; + break; // OutputHeader + } + return; + default: + return; + } + + // OutputHeader + { + var valueCount = values.Count; + var headerKey = HeaderBytes.Slice(keyStart, keyLength); + for (var i = 0; i < valueCount; i++) + { + var value = values[i]; + if (value != null) + { + output.Write(headerKey); + output.WriteAscii(value); + } + } + } + } while (tempBits != 0); + } + + private struct HeaderReferences + { + public StringValues _CacheControl; + public StringValues _Connection; + public StringValues _Date; + public StringValues _GrpcEncoding; + public StringValues _KeepAlive; + public StringValues _Pragma; + public StringValues _Trailer; + public StringValues _TransferEncoding; + public StringValues _Upgrade; + public StringValues _Via; + public StringValues _Warning; + public StringValues _Allow; + public StringValues _ContentType; + public StringValues _ContentEncoding; + public StringValues _ContentLanguage; + public StringValues _ContentLocation; + public StringValues _ContentMD5; + public StringValues _ContentRange; + public StringValues _Expires; + public StringValues _LastModified; + public StringValues _AcceptRanges; + public StringValues _Age; + public StringValues _AltSvc; + public StringValues _ETag; + public StringValues _Location; + public StringValues _ProxyAuthenticate; + public StringValues _ProxyConnection; + public StringValues _RetryAfter; + public StringValues _Server; + public StringValues _SetCookie; + public StringValues _Vary; + public StringValues _WWWAuthenticate; + public StringValues _AccessControlAllowCredentials; + public StringValues _AccessControlAllowHeaders; + public StringValues _AccessControlAllowMethods; + public StringValues _AccessControlAllowOrigin; + public StringValues _AccessControlExposeHeaders; + public StringValues _AccessControlMaxAge; + + public byte[]? _rawConnection; + public byte[]? _rawDate; + public byte[]? _rawTransferEncoding; + public byte[]? _rawServer; + } + + public partial struct Enumerator + { + // Compiled to Jump table + public bool MoveNext() + { + switch (_next) + { + case 0: + goto HeaderCacheControl; + case 1: + goto HeaderConnection; + case 2: + goto HeaderDate; + case 3: + goto HeaderGrpcEncoding; + case 4: + goto HeaderKeepAlive; + case 5: + goto HeaderPragma; + case 6: + goto HeaderTrailer; + case 7: + goto HeaderTransferEncoding; + case 8: + goto HeaderUpgrade; + case 9: + goto HeaderVia; + case 10: + goto HeaderWarning; + case 11: + goto HeaderAllow; + case 12: + goto HeaderContentType; + case 13: + goto HeaderContentEncoding; + case 14: + goto HeaderContentLanguage; + case 15: + goto HeaderContentLocation; + case 16: + goto HeaderContentMD5; + case 17: + goto HeaderContentRange; + case 18: + goto HeaderExpires; + case 19: + goto HeaderLastModified; + case 20: + goto HeaderAcceptRanges; + case 21: + goto HeaderAge; + case 22: + goto HeaderAltSvc; + case 23: + goto HeaderETag; + case 24: + goto HeaderLocation; + case 25: + goto HeaderProxyAuthenticate; + case 26: + goto HeaderProxyConnection; + case 27: + goto HeaderRetryAfter; + case 28: + goto HeaderServer; + case 29: + goto HeaderSetCookie; + case 30: + goto HeaderVary; + case 31: + goto HeaderWWWAuthenticate; + case 32: + goto HeaderAccessControlAllowCredentials; + case 33: + goto HeaderAccessControlAllowHeaders; + case 34: + goto HeaderAccessControlAllowMethods; + case 35: + goto HeaderAccessControlAllowOrigin; + case 36: + goto HeaderAccessControlExposeHeaders; + case 37: + goto HeaderAccessControlMaxAge; + case 38: + goto HeaderContentLength; + default: + goto ExtraHeaders; + } + + HeaderCacheControl: // case 0 + if ((_bits & 0x1L) != 0) + { + _current = new KeyValuePair(HeaderNames.CacheControl, _collection._headers._CacheControl); + _currentKnownType = KnownHeaderType.CacheControl; + _next = 1; + return true; + } + HeaderConnection: // case 1 + if ((_bits & 0x2L) != 0) + { + _current = new KeyValuePair(HeaderNames.Connection, _collection._headers._Connection); + _currentKnownType = KnownHeaderType.Connection; + _next = 2; + return true; + } + HeaderDate: // case 2 + if ((_bits & 0x4L) != 0) + { + _current = new KeyValuePair(HeaderNames.Date, _collection._headers._Date); + _currentKnownType = KnownHeaderType.Date; + _next = 3; + return true; + } + HeaderGrpcEncoding: // case 3 + if ((_bits & 0x8L) != 0) + { + _current = new KeyValuePair(HeaderNames.GrpcEncoding, _collection._headers._GrpcEncoding); + _currentKnownType = KnownHeaderType.GrpcEncoding; + _next = 4; + return true; + } + HeaderKeepAlive: // case 4 + if ((_bits & 0x10L) != 0) + { + _current = new KeyValuePair(HeaderNames.KeepAlive, _collection._headers._KeepAlive); + _currentKnownType = KnownHeaderType.KeepAlive; + _next = 5; + return true; + } + HeaderPragma: // case 5 + if ((_bits & 0x20L) != 0) + { + _current = new KeyValuePair(HeaderNames.Pragma, _collection._headers._Pragma); + _currentKnownType = KnownHeaderType.Pragma; + _next = 6; + return true; + } + HeaderTrailer: // case 6 + if ((_bits & 0x40L) != 0) + { + _current = new KeyValuePair(HeaderNames.Trailer, _collection._headers._Trailer); + _currentKnownType = KnownHeaderType.Trailer; + _next = 7; + return true; + } + HeaderTransferEncoding: // case 7 + if ((_bits & 0x80L) != 0) + { + _current = new KeyValuePair(HeaderNames.TransferEncoding, _collection._headers._TransferEncoding); + _currentKnownType = KnownHeaderType.TransferEncoding; + _next = 8; + return true; + } + HeaderUpgrade: // case 8 + if ((_bits & 0x100L) != 0) + { + _current = new KeyValuePair(HeaderNames.Upgrade, _collection._headers._Upgrade); + _currentKnownType = KnownHeaderType.Upgrade; + _next = 9; + return true; + } + HeaderVia: // case 9 + if ((_bits & 0x200L) != 0) + { + _current = new KeyValuePair(HeaderNames.Via, _collection._headers._Via); + _currentKnownType = KnownHeaderType.Via; + _next = 10; + return true; + } + HeaderWarning: // case 10 + if ((_bits & 0x400L) != 0) + { + _current = new KeyValuePair(HeaderNames.Warning, _collection._headers._Warning); + _currentKnownType = KnownHeaderType.Warning; + _next = 11; + return true; + } + HeaderAllow: // case 11 + if ((_bits & 0x800L) != 0) + { + _current = new KeyValuePair(HeaderNames.Allow, _collection._headers._Allow); + _currentKnownType = KnownHeaderType.Allow; + _next = 12; + return true; + } + HeaderContentType: // case 12 + if ((_bits & 0x1000L) != 0) + { + _current = new KeyValuePair(HeaderNames.ContentType, _collection._headers._ContentType); + _currentKnownType = KnownHeaderType.ContentType; + _next = 13; + return true; + } + HeaderContentEncoding: // case 13 + if ((_bits & 0x2000L) != 0) + { + _current = new KeyValuePair(HeaderNames.ContentEncoding, _collection._headers._ContentEncoding); _currentKnownType = KnownHeaderType.ContentEncoding; _next = 14; return true; @@ -13662,67 +16345,1632 @@ public bool MoveNext() return true; } } - } + } + + internal partial class HttpResponseTrailers : IHeaderDictionary + { + private static ReadOnlySpan HeaderBytes => new byte[] + { + 13,10,69,84,97,103,58,32,13,10,71,114,112,99,45,77,101,115,115,97,103,101,58,32,13,10,71,114,112,99,45,83,116,97,116,117,115,58,32, + }; + private HeaderReferences _headers; + + + + + StringValues IHeaderDictionary.ETag + { + get + { + var value = _headers._ETag; + if ((_bits & 0x1L) != 0) + { + return value; + } + return default; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x1L; + if (value.Count > 0) + { + _bits |= flag; + _headers._ETag = value; + } + else + { + _bits &= ~flag; + _headers._ETag = default; + } + } + } + StringValues IHeaderDictionary.GrpcMessage + { + get + { + var value = _headers._GrpcMessage; + if ((_bits & 0x2L) != 0) + { + return value; + } + return default; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x2L; + if (value.Count > 0) + { + _bits |= flag; + _headers._GrpcMessage = value; + } + else + { + _bits &= ~flag; + _headers._GrpcMessage = default; + } + } + } + StringValues IHeaderDictionary.GrpcStatus + { + get + { + var value = _headers._GrpcStatus; + if ((_bits & 0x4L) != 0) + { + return value; + } + return default; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + var flag = 0x4L; + if (value.Count > 0) + { + _bits |= flag; + _headers._GrpcStatus = value; + } + else + { + _bits &= ~flag; + _headers._GrpcStatus = default; + } + } + } + + StringValues IHeaderDictionary.Accept + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Accept, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Accept, value); + } + } + StringValues IHeaderDictionary.AcceptCharset + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.AcceptCharset, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.AcceptCharset, value); + } + } + StringValues IHeaderDictionary.AcceptEncoding + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.AcceptEncoding, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.AcceptEncoding, value); + } + } + StringValues IHeaderDictionary.AcceptLanguage + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.AcceptLanguage, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.AcceptLanguage, value); + } + } + StringValues IHeaderDictionary.AcceptRanges + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.AcceptRanges, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.AcceptRanges, value); + } + } + StringValues IHeaderDictionary.AccessControlAllowCredentials + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.AccessControlAllowCredentials, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.AccessControlAllowCredentials, value); + } + } + StringValues IHeaderDictionary.AccessControlAllowHeaders + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.AccessControlAllowHeaders, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.AccessControlAllowHeaders, value); + } + } + StringValues IHeaderDictionary.AccessControlAllowMethods + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.AccessControlAllowMethods, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.AccessControlAllowMethods, value); + } + } + StringValues IHeaderDictionary.AccessControlAllowOrigin + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.AccessControlAllowOrigin, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.AccessControlAllowOrigin, value); + } + } + StringValues IHeaderDictionary.AccessControlExposeHeaders + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.AccessControlExposeHeaders, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.AccessControlExposeHeaders, value); + } + } + StringValues IHeaderDictionary.AccessControlMaxAge + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.AccessControlMaxAge, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.AccessControlMaxAge, value); + } + } + StringValues IHeaderDictionary.AccessControlRequestHeaders + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.AccessControlRequestHeaders, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.AccessControlRequestHeaders, value); + } + } + StringValues IHeaderDictionary.AccessControlRequestMethod + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.AccessControlRequestMethod, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.AccessControlRequestMethod, value); + } + } + StringValues IHeaderDictionary.Age + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Age, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Age, value); + } + } + StringValues IHeaderDictionary.Allow + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Allow, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Allow, value); + } + } + StringValues IHeaderDictionary.AltSvc + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.AltSvc, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.AltSvc, value); + } + } + StringValues IHeaderDictionary.Authorization + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Authorization, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Authorization, value); + } + } + StringValues IHeaderDictionary.Baggage + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Baggage, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Baggage, value); + } + } + StringValues IHeaderDictionary.CacheControl + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.CacheControl, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.CacheControl, value); + } + } + StringValues IHeaderDictionary.Connection + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Connection, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Connection, value); + } + } + StringValues IHeaderDictionary.ContentDisposition + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.ContentDisposition, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.ContentDisposition, value); + } + } + StringValues IHeaderDictionary.ContentEncoding + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.ContentEncoding, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.ContentEncoding, value); + } + } + StringValues IHeaderDictionary.ContentLanguage + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.ContentLanguage, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.ContentLanguage, value); + } + } + StringValues IHeaderDictionary.ContentLocation + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.ContentLocation, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.ContentLocation, value); + } + } + StringValues IHeaderDictionary.ContentMD5 + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.ContentMD5, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.ContentMD5, value); + } + } + StringValues IHeaderDictionary.ContentRange + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.ContentRange, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.ContentRange, value); + } + } + StringValues IHeaderDictionary.ContentSecurityPolicy + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.ContentSecurityPolicy, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.ContentSecurityPolicy, value); + } + } + StringValues IHeaderDictionary.ContentSecurityPolicyReportOnly + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.ContentSecurityPolicyReportOnly, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.ContentSecurityPolicyReportOnly, value); + } + } + StringValues IHeaderDictionary.ContentType + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.ContentType, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.ContentType, value); + } + } + StringValues IHeaderDictionary.CorrelationContext + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.CorrelationContext, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.CorrelationContext, value); + } + } + StringValues IHeaderDictionary.Cookie + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Cookie, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Cookie, value); + } + } + StringValues IHeaderDictionary.Date + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Date, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Date, value); + } + } + StringValues IHeaderDictionary.Expires + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Expires, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Expires, value); + } + } + StringValues IHeaderDictionary.Expect + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Expect, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Expect, value); + } + } + StringValues IHeaderDictionary.From + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.From, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.From, value); + } + } + StringValues IHeaderDictionary.GrpcAcceptEncoding + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.GrpcAcceptEncoding, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.GrpcAcceptEncoding, value); + } + } + StringValues IHeaderDictionary.GrpcEncoding + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.GrpcEncoding, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.GrpcEncoding, value); + } + } + StringValues IHeaderDictionary.GrpcTimeout + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.GrpcTimeout, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.GrpcTimeout, value); + } + } + StringValues IHeaderDictionary.Host + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Host, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Host, value); + } + } + StringValues IHeaderDictionary.KeepAlive + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.KeepAlive, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.KeepAlive, value); + } + } + StringValues IHeaderDictionary.IfMatch + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.IfMatch, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.IfMatch, value); + } + } + StringValues IHeaderDictionary.IfModifiedSince + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.IfModifiedSince, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.IfModifiedSince, value); + } + } + StringValues IHeaderDictionary.IfNoneMatch + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.IfNoneMatch, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.IfNoneMatch, value); + } + } + StringValues IHeaderDictionary.IfRange + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.IfRange, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.IfRange, value); + } + } + StringValues IHeaderDictionary.IfUnmodifiedSince + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.IfUnmodifiedSince, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.IfUnmodifiedSince, value); + } + } + StringValues IHeaderDictionary.LastModified + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.LastModified, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.LastModified, value); + } + } + StringValues IHeaderDictionary.Link + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Link, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Link, value); + } + } + StringValues IHeaderDictionary.Location + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Location, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Location, value); + } + } + StringValues IHeaderDictionary.MaxForwards + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.MaxForwards, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.MaxForwards, value); + } + } + StringValues IHeaderDictionary.Origin + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Origin, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Origin, value); + } + } + StringValues IHeaderDictionary.Pragma + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Pragma, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Pragma, value); + } + } + StringValues IHeaderDictionary.ProxyAuthenticate + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.ProxyAuthenticate, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.ProxyAuthenticate, value); + } + } + StringValues IHeaderDictionary.ProxyAuthorization + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.ProxyAuthorization, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.ProxyAuthorization, value); + } + } + StringValues IHeaderDictionary.ProxyConnection + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.ProxyConnection, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.ProxyConnection, value); + } + } + StringValues IHeaderDictionary.Range + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Range, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Range, value); + } + } + StringValues IHeaderDictionary.Referer + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Referer, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Referer, value); + } + } + StringValues IHeaderDictionary.RetryAfter + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.RetryAfter, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.RetryAfter, value); + } + } + StringValues IHeaderDictionary.RequestId + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.RequestId, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.RequestId, value); + } + } + StringValues IHeaderDictionary.SecWebSocketAccept + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.SecWebSocketAccept, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.SecWebSocketAccept, value); + } + } + StringValues IHeaderDictionary.SecWebSocketKey + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.SecWebSocketKey, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.SecWebSocketKey, value); + } + } + StringValues IHeaderDictionary.SecWebSocketProtocol + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.SecWebSocketProtocol, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.SecWebSocketProtocol, value); + } + } + StringValues IHeaderDictionary.SecWebSocketVersion + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.SecWebSocketVersion, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.SecWebSocketVersion, value); + } + } + StringValues IHeaderDictionary.Server + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Server, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Server, value); + } + } + StringValues IHeaderDictionary.SetCookie + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.SetCookie, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.SetCookie, value); + } + } + StringValues IHeaderDictionary.StrictTransportSecurity + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.StrictTransportSecurity, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - internal partial class HttpResponseTrailers - { - private static ReadOnlySpan HeaderBytes => new byte[] + SetValueUnknown(HeaderNames.StrictTransportSecurity, value); + } + } + StringValues IHeaderDictionary.TE { - 13,10,69,84,97,103,58,32,13,10,71,114,112,99,45,77,101,115,115,97,103,101,58,32,13,10,71,114,112,99,45,83,116,97,116,117,115,58,32, - }; - private HeaderReferences _headers; + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.TE, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + SetValueUnknown(HeaderNames.TE, value); + } + } + StringValues IHeaderDictionary.Trailer + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Trailer, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } - - public StringValues HeaderETag + SetValueUnknown(HeaderNames.Trailer, value); + } + } + StringValues IHeaderDictionary.TransferEncoding { get { StringValues value = default; - if ((_bits & 0x1L) != 0) + if (!TryGetUnknown(HeaderNames.TransferEncoding, ref value)) { - value = _headers._ETag; + value = default; } return value; } set { - _bits |= 0x1L; - _headers._ETag = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.TransferEncoding, value); } } - public StringValues HeaderGrpcMessage + StringValues IHeaderDictionary.Translate { get { StringValues value = default; - if ((_bits & 0x2L) != 0) + if (!TryGetUnknown(HeaderNames.Translate, ref value)) { - value = _headers._GrpcMessage; + value = default; } return value; } set { - _bits |= 0x2L; - _headers._GrpcMessage = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Translate, value); } } - public StringValues HeaderGrpcStatus + StringValues IHeaderDictionary.TraceParent { get { StringValues value = default; - if ((_bits & 0x4L) != 0) + if (!TryGetUnknown(HeaderNames.TraceParent, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.TraceParent, value); + } + } + StringValues IHeaderDictionary.TraceState + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.TraceState, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.TraceState, value); + } + } + StringValues IHeaderDictionary.Upgrade + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Upgrade, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Upgrade, value); + } + } + StringValues IHeaderDictionary.UpgradeInsecureRequests + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.UpgradeInsecureRequests, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.UpgradeInsecureRequests, value); + } + } + StringValues IHeaderDictionary.UserAgent + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.UserAgent, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.UserAgent, value); + } + } + StringValues IHeaderDictionary.Vary + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Vary, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Vary, value); + } + } + StringValues IHeaderDictionary.Via + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Via, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Via, value); + } + } + StringValues IHeaderDictionary.Warning + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.Warning, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.Warning, value); + } + } + StringValues IHeaderDictionary.WebSocketSubProtocols + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.WebSocketSubProtocols, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.WebSocketSubProtocols, value); + } + } + StringValues IHeaderDictionary.WWWAuthenticate + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.WWWAuthenticate, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.WWWAuthenticate, value); + } + } + StringValues IHeaderDictionary.XContentTypeOptions + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.XContentTypeOptions, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.XContentTypeOptions, value); + } + } + StringValues IHeaderDictionary.XFrameOptions + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.XFrameOptions, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.XFrameOptions, value); + } + } + StringValues IHeaderDictionary.XPoweredBy + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.XPoweredBy, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.XPoweredBy, value); + } + } + StringValues IHeaderDictionary.XRequestedWith + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.XRequestedWith, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.XRequestedWith, value); + } + } + StringValues IHeaderDictionary.XUACompatible + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.XUACompatible, ref value)) + { + value = default; + } + return value; + } + set + { + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.XUACompatible, value); + } + } + StringValues IHeaderDictionary.XXSSProtection + { + get + { + StringValues value = default; + if (!TryGetUnknown(HeaderNames.XXSSProtection, ref value)) { - value = _headers._GrpcStatus; + value = default; } return value; } set { - _bits |= 0x4L; - _headers._GrpcStatus = value; + if (_isReadOnly) { ThrowHeadersReadOnlyException(); } + + SetValueUnknown(HeaderNames.XXSSProtection, value); } } diff --git a/src/Servers/Kestrel/Core/src/Internal/Http/HttpProtocol.FeatureCollection.cs b/src/Servers/Kestrel/Core/src/Internal/Http/HttpProtocol.FeatureCollection.cs index ce332dadb407..0cce70dd9fe5 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Http/HttpProtocol.FeatureCollection.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Http/HttpProtocol.FeatureCollection.cs @@ -276,7 +276,7 @@ async Task IHttpUpgradeFeature.UpgradeAsync() StatusCode = StatusCodes.Status101SwitchingProtocols; ReasonPhrase = "Switching Protocols"; - ResponseHeaders[HeaderNames.Connection] = HeaderNames.Upgrade; + ResponseHeaders.Connection = HeaderNames.Upgrade; await FlushAsync(); diff --git a/src/Servers/Kestrel/Core/src/Internal/Http2/Http2HeaderEnumerator.cs b/src/Servers/Kestrel/Core/src/Internal/Http2/Http2HeaderEnumerator.cs index f5c73a4f0ba6..c77836ab4c41 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Http2/Http2HeaderEnumerator.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Http2/Http2HeaderEnumerator.cs @@ -49,8 +49,22 @@ public void Initialize(HttpResponseTrailers headers) public void Initialize(IDictionary headers) { - _genericEnumerator = headers.GetEnumerator(); - _headersType = HeadersType.Untyped; + switch (headers) + { + case HttpResponseHeaders responseHeaders: + _headersType = HeadersType.Headers; + _headersEnumerator = responseHeaders.GetEnumerator(); + break; + case HttpResponseTrailers responseTrailers: + _headersType = HeadersType.Trailers; + _trailersEnumerator = responseTrailers.GetEnumerator(); + break; + default: + _headersType = HeadersType.Untyped; + _genericEnumerator = headers.GetEnumerator(); + break; + } + _hasMultipleValues = false; } diff --git a/src/Servers/Kestrel/Core/test/Http1ConnectionTests.cs b/src/Servers/Kestrel/Core/test/Http1ConnectionTests.cs index 85c6026694f4..d30b00f598b4 100644 --- a/src/Servers/Kestrel/Core/test/Http1ConnectionTests.cs +++ b/src/Servers/Kestrel/Core/test/Http1ConnectionTests.cs @@ -970,7 +970,7 @@ public void Http10HostHeaderNotRequired() public void Http10HostHeaderAllowed() { _http1Connection.HttpVersion = "HTTP/1.0"; - _http1Connection.RequestHeaders[HeaderNames.Host] = "localhost:5000"; + _http1Connection.RequestHeaders.Host = "localhost:5000"; _http1Connection.EnsureHostHeaderExists(); } @@ -978,7 +978,7 @@ public void Http10HostHeaderAllowed() public void Http11EmptyHostHeaderAccepted() { _http1Connection.HttpVersion = "HTTP/1.1"; - _http1Connection.RequestHeaders[HeaderNames.Host] = ""; + _http1Connection.RequestHeaders.Host = ""; _http1Connection.EnsureHostHeaderExists(); } @@ -986,7 +986,7 @@ public void Http11EmptyHostHeaderAccepted() public void Http11ValidHostHeadersAccepted() { _http1Connection.HttpVersion = "HTTP/1.1"; - _http1Connection.RequestHeaders[HeaderNames.Host] = "localhost:5000"; + _http1Connection.RequestHeaders.Host = "localhost:5000"; _http1Connection.EnsureHostHeaderExists(); } @@ -994,7 +994,7 @@ public void Http11ValidHostHeadersAccepted() public void BadRequestFor10BadHostHeaderFormat() { _http1Connection.HttpVersion = "HTTP/1.0"; - _http1Connection.RequestHeaders[HeaderNames.Host] = "a=b"; + _http1Connection.RequestHeaders.Host = "a=b"; var ex = Assert.ThrowsAny(() => _http1Connection.EnsureHostHeaderExists()); Assert.Equal(CoreStrings.FormatBadRequest_InvalidHostHeader_Detail("a=b"), ex.Message); } @@ -1003,7 +1003,7 @@ public void BadRequestFor10BadHostHeaderFormat() public void BadRequestFor11BadHostHeaderFormat() { _http1Connection.HttpVersion = "HTTP/1.1"; - _http1Connection.RequestHeaders[HeaderNames.Host] = "a=b"; + _http1Connection.RequestHeaders.Host = "a=b"; var ex = Assert.ThrowsAny(() => _http1Connection.EnsureHostHeaderExists()); Assert.Equal(CoreStrings.FormatBadRequest_InvalidHostHeader_Detail("a=b"), ex.Message); } diff --git a/src/Servers/Kestrel/Core/test/Http2HPackEncoderTests.cs b/src/Servers/Kestrel/Core/test/Http2HPackEncoderTests.cs index ea49917af237..1a61b8676515 100644 --- a/src/Servers/Kestrel/Core/test/Http2HPackEncoderTests.cs +++ b/src/Servers/Kestrel/Core/test/Http2HPackEncoderTests.cs @@ -11,6 +11,8 @@ using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2; using Microsoft.Extensions.Primitives; +using Microsoft.Net.Http.Headers; + using Xunit; namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests @@ -43,8 +45,8 @@ public void BeginEncodeHeaders_CacheControlPrivate_NewIndexValue() { Span buffer = new byte[1024 * 16]; - var headers = new HttpResponseHeaders(); - headers.HeaderCacheControl = "private"; + var headers = (IHeaderDictionary)new HttpResponseHeaders(); + headers.CacheControl = "private"; var enumerator = new Http2HeadersEnumerator(); enumerator.Initialize(headers); @@ -68,10 +70,10 @@ public void BeginEncodeHeaders_MaxHeaderTableSizeExceeded_EvictionsToFit() Span buffer = new byte[1024 * 16]; - var headers = new HttpResponseHeaders(); - headers.HeaderCacheControl = "private"; - headers.HeaderDate = "Mon, 21 Oct 2013 20:13:21 GMT"; - headers.HeaderLocation = "https://www.example.com"; + var headers = (IHeaderDictionary)new HttpResponseHeaders(); + headers.CacheControl = "private"; + headers.Date = "Mon, 21 Oct 2013 20:13:21 GMT"; + headers.Location = "https://www.example.com"; var enumerator = new Http2HeadersEnumerator(); @@ -145,9 +147,9 @@ public void BeginEncodeHeaders_MaxHeaderTableSizeExceeded_EvictionsToFit() }); // Third response - headers.HeaderDate = "Mon, 21 Oct 2013 20:13:22 GMT"; - headers.HeaderContentEncoding = "gzip"; - headers.HeaderSetCookie = "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1"; + headers.Date = "Mon, 21 Oct 2013 20:13:22 GMT"; + headers.ContentEncoding = "gzip"; + headers.SetCookie = "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1"; enumerator.Initialize(headers); Assert.True(HPackHeaderWriter.BeginEncodeHeaders(200, hpackEncoder, enumerator, buffer, out length)); diff --git a/src/Servers/Kestrel/Core/test/Http2HeadersEnumeratorTests.cs b/src/Servers/Kestrel/Core/test/Http2HeadersEnumeratorTests.cs index dfaea9fa0fc0..b98f1f9f45f1 100644 --- a/src/Servers/Kestrel/Core/test/Http2HeadersEnumeratorTests.cs +++ b/src/Servers/Kestrel/Core/test/Http2HeadersEnumeratorTests.cs @@ -8,6 +8,8 @@ using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2; using Microsoft.Extensions.Primitives; +using Microsoft.Net.Http.Headers; + using Xunit; namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests @@ -17,14 +19,14 @@ public class Http2HeadersEnumeratorTests [Fact] public void CanIterateOverResponseHeaders() { - var responseHeaders = new HttpResponseHeaders - { - ContentLength = 9, - HeaderAcceptRanges = "AcceptRanges!", - HeaderAge = new StringValues(new[] { "1", "2" }), - HeaderDate = "Date!", - HeaderGrpcEncoding = "Identity!" - }; + var responseHeaders = (IHeaderDictionary)new HttpResponseHeaders(); + + responseHeaders.ContentLength = 9; + responseHeaders.AcceptRanges = "AcceptRanges!"; + responseHeaders.Age = new StringValues(new[] { "1", "2" }); + responseHeaders.Date = "Date!"; + responseHeaders.GrpcEncoding = "Identity!"; + responseHeaders.Append("Name1", "Value1"); responseHeaders.Append("Name2", "Value2-1"); responseHeaders.Append("Name2", "Value2-2"); @@ -53,11 +55,11 @@ public void CanIterateOverResponseHeaders() [Fact] public void CanIterateOverResponseTrailers() { - var responseTrailers = new HttpResponseTrailers - { - ContentLength = 9, - HeaderETag = "ETag!" - }; + var responseTrailers = (IHeaderDictionary)new HttpResponseTrailers(); + + responseTrailers.ContentLength = 9; + responseTrailers.ETag = "ETag!"; + responseTrailers.Append("Name1", "Value1"); responseTrailers.Append("Name2", "Value2-1"); responseTrailers.Append("Name2", "Value2-2"); @@ -104,10 +106,10 @@ public void Initialize_ChangeHeadersSource_EnumeratorUsesNewSource() Assert.Equal("Value2-2", e.Current.Value); Assert.Equal(-1, e.HPackStaticTableId); - var responseTrailers = new HttpResponseTrailers - { - HeaderGrpcStatus = "1" - }; + var responseTrailers = (IHeaderDictionary)new HttpResponseTrailers(); + + responseTrailers.GrpcStatus = "1"; + responseTrailers.Append("Name1", "Value1"); responseTrailers.Append("Name2", "Value2-1"); responseTrailers.Append("Name2", "Value2-2"); diff --git a/src/Servers/Kestrel/Core/test/HttpRequestHeadersTests.cs b/src/Servers/Kestrel/Core/test/HttpRequestHeadersTests.cs index 93d28dea7495..23f000be294b 100644 --- a/src/Servers/Kestrel/Core/test/HttpRequestHeadersTests.cs +++ b/src/Servers/Kestrel/Core/test/HttpRequestHeadersTests.cs @@ -597,8 +597,8 @@ public void CanSpecifyEncodingBasedOnHeaderName() headers.Append(cookieNameBytes, headerValueBytes); headers.OnHeadersComplete(); - var parsedAcceptHeaderValue = ((IHeaderDictionary)headers)[HeaderNames.Accept].ToString(); - var parsedCookieHeaderValue = ((IHeaderDictionary)headers)[HeaderNames.Cookie].ToString(); + var parsedAcceptHeaderValue = ((IHeaderDictionary)headers).Accept.ToString(); + var parsedCookieHeaderValue = ((IHeaderDictionary)headers).Cookie.ToString(); Assert.Empty(parsedAcceptHeaderValue); Assert.Equal(headerValue, parsedCookieHeaderValue); diff --git a/src/Servers/Kestrel/perf/Microbenchmarks/HPackHeaderWriterBenchmark.cs b/src/Servers/Kestrel/perf/Microbenchmarks/HPackHeaderWriterBenchmark.cs index 259071dd434c..b78d3e511e60 100644 --- a/src/Servers/Kestrel/perf/Microbenchmarks/HPackHeaderWriterBenchmark.cs +++ b/src/Servers/Kestrel/perf/Microbenchmarks/HPackHeaderWriterBenchmark.cs @@ -10,6 +10,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2; +using Microsoft.Net.Http.Headers; namespace Microsoft.AspNetCore.Server.Kestrel.Microbenchmarks { @@ -17,8 +18,8 @@ public class HPackHeaderWriterBenchmark { private Http2HeadersEnumerator _http2HeadersEnumerator; private DynamicHPackEncoder _hpackEncoder; - private HttpResponseHeaders _knownResponseHeaders; - private HttpResponseHeaders _unknownResponseHeaders; + private IHeaderDictionary _knownResponseHeaders; + private IHeaderDictionary _unknownResponseHeaders; private byte[] _buffer; [GlobalSetup] @@ -28,21 +29,20 @@ public void GlobalSetup() _hpackEncoder = new DynamicHPackEncoder(); _buffer = new byte[1024 * 1024]; - _knownResponseHeaders = new HttpResponseHeaders - { - HeaderServer = "Kestrel", - HeaderContentType = "application/json", - HeaderDate = "Date!", - HeaderContentLength = "0", - HeaderAcceptRanges = "Ranges!", - HeaderTransferEncoding = "Encoding!", - HeaderVia = "Via!", - HeaderVary = "Vary!", - HeaderWWWAuthenticate = "Authenticate!", - HeaderLastModified = "Modified!", - HeaderExpires = "Expires!", - HeaderAge = "Age!" - }; + _knownResponseHeaders = new HttpResponseHeaders(); + + _knownResponseHeaders.Server = "Kestrel"; + _knownResponseHeaders.ContentType = "application/json"; + _knownResponseHeaders.Date = "Date!"; + _knownResponseHeaders.ContentLength = 0; + _knownResponseHeaders.AcceptRanges = "Ranges!"; + _knownResponseHeaders.TransferEncoding = "Encoding!"; + _knownResponseHeaders.Via = "Via!"; + _knownResponseHeaders.Vary = "Vary!"; + _knownResponseHeaders.WWWAuthenticate = "Authenticate!"; + _knownResponseHeaders.LastModified = "Modified!"; + _knownResponseHeaders.Expires = "Expires!"; + _knownResponseHeaders.Age = "Age!"; _unknownResponseHeaders = new HttpResponseHeaders(); for (var i = 0; i < 10; i++) diff --git a/src/Servers/Kestrel/perf/Microbenchmarks/HeaderCollectionBenchmark.cs b/src/Servers/Kestrel/perf/Microbenchmarks/HeaderCollectionBenchmark.cs new file mode 100644 index 000000000000..e8ddea4d8180 --- /dev/null +++ b/src/Servers/Kestrel/perf/Microbenchmarks/HeaderCollectionBenchmark.cs @@ -0,0 +1,379 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Buffers; +using System.IO.Pipelines; +using System.Runtime.CompilerServices; +using System.Text; +using BenchmarkDotNet.Attributes; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Http.Features; +using Microsoft.AspNetCore.Server.Kestrel.Core; +using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http; +using Microsoft.AspNetCore.Testing; +using Microsoft.Net.Http.Headers; + +namespace Microsoft.AspNetCore.Server.Kestrel.Microbenchmarks +{ + public class HeaderCollectionBenchmark + { + private const int InnerLoopCount = 1024 * 1024; + + private static readonly byte[] _bytesServer = Encoding.ASCII.GetBytes("\r\nServer: Kestrel"); + private static readonly DateHeaderValueManager _dateHeaderValueManager = new DateHeaderValueManager(); + private HttpResponseHeaders _responseHeadersDirect; + private HttpResponse _response; + + public enum BenchmarkTypes + { + ContentLengthNumeric, + ContentLengthString, + Plaintext, + Common, + Unknown + } + + [Params( + BenchmarkTypes.ContentLengthNumeric, + BenchmarkTypes.ContentLengthString, + BenchmarkTypes.Plaintext, + BenchmarkTypes.Common, + BenchmarkTypes.Unknown + )] + public BenchmarkTypes Type { get; set; } + + [Benchmark(OperationsPerInvoke = InnerLoopCount)] + public void SetHeaders() + { + switch (Type) + { + case BenchmarkTypes.ContentLengthNumeric: + SetContentLengthNumeric(InnerLoopCount); + break; + case BenchmarkTypes.ContentLengthString: + SetContentLengthString(InnerLoopCount); + break; + case BenchmarkTypes.Plaintext: + SetPlaintext(InnerLoopCount); + break; + case BenchmarkTypes.Common: + SetCommon(InnerLoopCount); + break; + case BenchmarkTypes.Unknown: + SetUnknown(InnerLoopCount); + break; + } + } + + [Benchmark(OperationsPerInvoke = InnerLoopCount)] + public void GetHeaders() + { + switch (Type) + { + case BenchmarkTypes.ContentLengthNumeric: + GetContentLengthNumeric(InnerLoopCount); + break; + case BenchmarkTypes.ContentLengthString: + GetContentLengthString(InnerLoopCount); + break; + case BenchmarkTypes.Plaintext: + GetPlaintext(InnerLoopCount); + break; + case BenchmarkTypes.Common: + GetCommon(InnerLoopCount); + break; + case BenchmarkTypes.Unknown: + GetUnknown(InnerLoopCount); + break; + } + } + + [MethodImpl(MethodImplOptions.NoInlining)] + private void SetContentLengthNumeric(int count) + { + for (var i = 0; i < count; i++) + { + _responseHeadersDirect.Reset(); + + _response.ContentLength = 0; + } + } + + [MethodImpl(MethodImplOptions.NoInlining)] + private void SetContentLengthString(int count) + { + for (var i = 0; i < count; i++) + { + _responseHeadersDirect.Reset(); + + _response.Headers[HeaderNames.ContentLength] = "0"; + } + } + + [MethodImpl(MethodImplOptions.NoInlining)] + private void SetPlaintext(int count) + { + for (var i = 0; i < count; i++) + { + AddHeaders(); + } + + void AddHeaders() + { + _responseHeadersDirect.Reset(); + + _response.StatusCode = 200; + _response.ContentType = "text/plain"; + _response.ContentLength = 13; + + var dateHeaderValues = _dateHeaderValueManager.GetDateHeaderValues(); + _responseHeadersDirect.SetRawDate(dateHeaderValues.String, dateHeaderValues.Bytes); + _responseHeadersDirect.SetRawServer("Kestrel", _bytesServer); + } + } + + [MethodImpl(MethodImplOptions.NoInlining)] + private void SetCommon(int count) + { + for (var i = 0; i < count; i++) + { + AddHeaders(); + } + + void AddHeaders() + { + _responseHeadersDirect.Reset(); + + _response.StatusCode = 200; + _response.ContentType = "text/css"; + _response.ContentLength = 421; + + var headers = _response.Headers; + + headers.Connection = "Close"; + headers.CacheControl = "public, max-age=30672000"; + headers.Vary = "Accept-Encoding"; + headers.ContentEncoding = "gzip"; + headers.Expires = "Fri, 12 Jan 2018 22:01:55 GMT"; + headers.LastModified = "Wed, 22 Jun 2016 20:08:29 GMT"; + headers.SetCookie = "prov=20629ccd-8b0f-e8ef-2935-cd26609fc0bc; __qca=P0-1591065732-1479167353442; _ga=GA1.2.1298898376.1479167354; _gat=1; sgt=id=9519gfde_3347_4762_8762_df51458c8ec2; acct=t=why-is-%e0%a5%a7%e0%a5%a8%e0%a5%a9-numeric&s=why-is-%e0%a5%a7%e0%a5%a8%e0%a5%a9-numeric"; + headers.ETag = "\"54ef7954-1078\""; + headers.TransferEncoding = "chunked"; + headers.ContentLanguage = "en-gb"; + headers.Upgrade = "websocket"; + headers.Via = "1.1 varnish"; + headers.AccessControlAllowOrigin = "*"; + headers.AccessControlAllowCredentials = "true"; + headers.AccessControlExposeHeaders = "Client-Protocol, Content-Length, Content-Type, X-Bandwidth-Est, X-Bandwidth-Est2, X-Bandwidth-Est-Comp, X-Bandwidth-Avg, X-Walltime-Ms, X-Sequence-Num"; + + var dateHeaderValues = _dateHeaderValueManager.GetDateHeaderValues(); + _responseHeadersDirect.SetRawDate(dateHeaderValues.String, dateHeaderValues.Bytes); + _responseHeadersDirect.SetRawServer("Kestrel", _bytesServer); + } + } + + [MethodImpl(MethodImplOptions.NoInlining)] + private void SetUnknown(int count) + { + for (var i = 0; i < count; i++) + { + AddHeaders(); + } + + void AddHeaders() + { + _responseHeadersDirect.Reset(); + + _response.StatusCode = 200; + _response.ContentType = "text/plain"; + _response.ContentLength = 13; + + var headers = _response.Headers; + + headers.Link = "; rel=\"canonical\""; + headers.XUACompatible = "IE=Edge"; + headers.XPoweredBy = "ASP.NET"; + headers.XContentTypeOptions = "nosniff"; + headers.XXSSProtection = "1; mode=block"; + headers.XFrameOptions = "SAMEORIGIN"; + headers.StrictTransportSecurity = "max-age=31536000; includeSubDomains; preload"; + headers.ContentSecurityPolicy = "default-src 'none'; script-src 'self' cdnjs.cloudflare.com code.jquery.com scotthelme.disqus.com a.disquscdn.com www.google-analytics.com go.disqus.com platform.twitter.com cdn.syndication.twimg.com; style-src 'self' a.disquscdn.com fonts.googleapis.com cdnjs.cloudflare.com platform.twitter.com; img-src 'self' data: www.gravatar.com www.google-analytics.com links.services.disqus.com referrer.disqus.com a.disquscdn.com cdn.syndication.twimg.com syndication.twitter.com pbs.twimg.com platform.twitter.com abs.twimg.com; child-src fusiontables.googleusercontent.com fusiontables.google.com www.google.com disqus.com www.youtube.com syndication.twitter.com platform.twitter.com; frame-src fusiontables.googleusercontent.com fusiontables.google.com www.google.com disqus.com www.youtube.com syndication.twitter.com platform.twitter.com; connect-src 'self' links.services.disqus.com; font-src 'self' cdnjs.cloudflare.com fonts.gstatic.com fonts.googleapis.com; form-action 'self'; upgrade-insecure-requests;"; + + var dateHeaderValues = _dateHeaderValueManager.GetDateHeaderValues(); + _responseHeadersDirect.SetRawDate(dateHeaderValues.String, dateHeaderValues.Bytes); + _responseHeadersDirect.SetRawServer("Kestrel", _bytesServer); + } + } + + [MethodImpl(MethodImplOptions.NoInlining)] + private long? GetContentLengthNumeric(int count) + { + long? length = null; + for (var i = 0; i < count; i++) + { + length = _response.ContentLength; + } + + return length; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + private string GetContentLengthString(int count) + { + string value = null; + for (var i = 0; i < count; i++) + { + value = _response.Headers[HeaderNames.ContentLength]; + } + + return value; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + private string GetPlaintext(int count) + { + string value = null; + for (var i = 0; i < count; i++) + { + value = ReadHeaders(); + } + + return value; + + string ReadHeaders() + { + var headers = _response.Headers; + var value = headers.Date ; + value = headers.Server ; + value = headers.ContentType ; + return value; + } + + } + + [MethodImpl(MethodImplOptions.NoInlining)] + private string GetCommon(int count) + { + string value = null; + for (var i = 0; i < count; i++) + { + value = ReadHeaders(); + } + + return value; + + string ReadHeaders() + { + var headers = _response.Headers; + var value = headers.Date ; + value = headers.Server ; + value = headers.ContentType ; + + value = headers.Connection ; + value = headers.CacheControl ; + value = headers.Vary ; + value = headers.ContentEncoding ; + value = headers.Expires ; + value = headers.LastModified ; + value = headers.SetCookie ; + value = headers.ETag ; + value = headers.TransferEncoding ; + value = headers.ContentLanguage ; + value = headers.Upgrade ; + value = headers.Via ; + value = headers.AccessControlAllowOrigin ; + value = headers.AccessControlAllowCredentials ; + value = headers.AccessControlExposeHeaders ; + + return value; + } + } + + [MethodImpl(MethodImplOptions.NoInlining)] + private string GetUnknown(int count) + { + string value = null; + for (var i = 0; i < count; i++) + { + value = ReadHeaders(); + } + + return value; + + string ReadHeaders() + { + var headers = _response.Headers; + value = headers.Date ; + value = headers.Server ; + value = headers.ContentType ; + + + value = headers.Link ; + value = headers.XUACompatible ; + value = headers.XPoweredBy ; + value = headers.XContentTypeOptions ; + value = headers.XXSSProtection ; + value = headers.XFrameOptions ; + value = headers.StrictTransportSecurity ; + value = headers.ContentSecurityPolicy ; + + return value; + } + } + + [IterationSetup] + public void Setup() + { + var memoryPool = PinnedBlockMemoryPoolFactory.Create(); + var options = new PipeOptions(memoryPool, readerScheduler: PipeScheduler.Inline, writerScheduler: PipeScheduler.Inline, useSynchronizationContext: false); + var pair = DuplexPipe.CreateConnectionPair(options, options); + + var serviceContext = TestContextFactory.CreateServiceContext( + serverOptions: new KestrelServerOptions(), + httpParser: new HttpParser(), + dateHeaderValueManager: _dateHeaderValueManager, + log: new MockTrace()); + + var connectionContext = TestContextFactory.CreateHttpConnectionContext( + serviceContext: serviceContext, + connectionContext: null, + transport: pair.Transport, + memoryPool: memoryPool, + connectionFeatures: new FeatureCollection()); + + var http1Connection = new Http1Connection(connectionContext); + + http1Connection.Reset(); + serviceContext.DateHeaderValueManager.OnHeartbeat(DateTimeOffset.UtcNow); + + _responseHeadersDirect = (HttpResponseHeaders)http1Connection.ResponseHeaders; + var context = new DefaultHttpContext(http1Connection); + _response = context.Response; + + switch (Type) + { + case BenchmarkTypes.ContentLengthNumeric: + SetContentLengthNumeric(1); + GetContentLengthNumeric(1); + break; + case BenchmarkTypes.ContentLengthString: + SetContentLengthString(1); + GetContentLengthString(1); + break; + case BenchmarkTypes.Plaintext: + SetPlaintext(1); + GetPlaintext(1); + break; + case BenchmarkTypes.Common: + SetCommon(1); + GetCommon(1); + break; + case BenchmarkTypes.Unknown: + SetUnknown(1); + GetUnknown(1); + break; + } + } + } +} diff --git a/src/Servers/Kestrel/perf/Microbenchmarks/Http2ConnectionBenchmarkBase.cs b/src/Servers/Kestrel/perf/Microbenchmarks/Http2ConnectionBenchmarkBase.cs index 94038447a964..4d9da3b9c2b5 100644 --- a/src/Servers/Kestrel/perf/Microbenchmarks/Http2ConnectionBenchmarkBase.cs +++ b/src/Servers/Kestrel/perf/Microbenchmarks/Http2ConnectionBenchmarkBase.cs @@ -28,7 +28,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Microbenchmarks public abstract class Http2ConnectionBenchmarkBase { private MemoryPool _memoryPool; - private HttpRequestHeaders _httpRequestHeaders; + private IHeaderDictionary _httpRequestHeaders; private Http2Connection _connection; private DynamicHPackEncoder _hpackEncoder; private Http2HeadersEnumerator _requestHeadersEnumerator; @@ -50,10 +50,10 @@ public virtual void GlobalSetup() _connectionPair = DuplexPipe.CreateConnectionPair(options, options); _httpRequestHeaders = new HttpRequestHeaders(); - _httpRequestHeaders.HeaderMethod = new StringValues("GET"); - _httpRequestHeaders.HeaderPath = new StringValues("/"); - _httpRequestHeaders.HeaderScheme = new StringValues("http"); - _httpRequestHeaders.HeaderAuthority = new StringValues("localhost:80"); + _httpRequestHeaders[HeaderNames.Method] = new StringValues("GET"); + _httpRequestHeaders[HeaderNames.Path] = new StringValues("/"); + _httpRequestHeaders[HeaderNames.Scheme] = new StringValues("http"); + _httpRequestHeaders[HeaderNames.Authority] = new StringValues("localhost:80"); _headersBuffer = new byte[1024 * 16]; _hpackEncoder = new DynamicHPackEncoder(); diff --git a/src/Servers/Kestrel/perf/Microbenchmarks/Http2FrameWriterBenchmark.cs b/src/Servers/Kestrel/perf/Microbenchmarks/Http2FrameWriterBenchmark.cs index 4153da140b0d..bc1646cdf5c6 100644 --- a/src/Servers/Kestrel/perf/Microbenchmarks/Http2FrameWriterBenchmark.cs +++ b/src/Servers/Kestrel/perf/Microbenchmarks/Http2FrameWriterBenchmark.cs @@ -4,13 +4,13 @@ using System.Buffers; using System.IO.Pipelines; using BenchmarkDotNet.Attributes; + +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Server.Kestrel.Core; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2.FlowControl; -using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure; using Microsoft.AspNetCore.Testing; -using Microsoft.Extensions.Logging.Abstractions; namespace Microsoft.AspNetCore.Server.Kestrel.Microbenchmarks { @@ -47,8 +47,9 @@ public void GlobalSetup() serviceContext); _responseHeaders = new HttpResponseHeaders(); - _responseHeaders.HeaderContentType = "application/json"; - _responseHeaders.HeaderContentLength = "1024"; + var headers = (IHeaderDictionary)_responseHeaders; + headers.ContentType = "application/json"; + headers.ContentLength = 1024; } [Benchmark] diff --git a/src/Servers/Kestrel/perf/Microbenchmarks/Http2HeadersEnumeratorBenchmark.cs b/src/Servers/Kestrel/perf/Microbenchmarks/Http2HeadersEnumeratorBenchmark.cs index bd44e5bd4398..f59d392bff37 100644 --- a/src/Servers/Kestrel/perf/Microbenchmarks/Http2HeadersEnumeratorBenchmark.cs +++ b/src/Servers/Kestrel/perf/Microbenchmarks/Http2HeadersEnumeratorBenchmark.cs @@ -12,29 +12,27 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Microbenchmarks public class Http2HeadersEnumeratorBenchmark { private Http2HeadersEnumerator _enumerator; - private HttpResponseHeaders _knownSingleValueResponseHeaders; - private HttpResponseHeaders _knownMultipleValueResponseHeaders; - private HttpResponseHeaders _unknownSingleValueResponseHeaders; - private HttpResponseHeaders _unknownMultipleValueResponseHeaders; + private IHeaderDictionary _knownSingleValueResponseHeaders; + private IHeaderDictionary _knownMultipleValueResponseHeaders; + private IHeaderDictionary _unknownSingleValueResponseHeaders; + private IHeaderDictionary _unknownMultipleValueResponseHeaders; [GlobalSetup] public void GlobalSetup() { - _knownSingleValueResponseHeaders = new HttpResponseHeaders - { - HeaderServer = "Value", - HeaderDate = "Value", - HeaderContentType = "Value", - HeaderSetCookie = "Value" - }; + _knownSingleValueResponseHeaders = new HttpResponseHeaders(); - _knownMultipleValueResponseHeaders = new HttpResponseHeaders - { - HeaderServer = new StringValues(new[] { "One", "Two" }), - HeaderDate = new StringValues(new[] { "One", "Two" }), - HeaderContentType = new StringValues(new[] { "One", "Two" }), - HeaderSetCookie = new StringValues(new[] { "One", "Two" }) - }; + _knownSingleValueResponseHeaders.Server = "Value"; + _knownSingleValueResponseHeaders.Date = "Value"; + _knownSingleValueResponseHeaders.ContentType = "Value"; + _knownSingleValueResponseHeaders.SetCookie = "Value"; + + _knownMultipleValueResponseHeaders = new HttpResponseHeaders(); + + _knownMultipleValueResponseHeaders.Server = new StringValues(new[] { "One", "Two" }); + _knownMultipleValueResponseHeaders.Date = new StringValues(new[] { "One", "Two" }); + _knownMultipleValueResponseHeaders.ContentType = new StringValues(new[] { "One", "Two" }); + _knownMultipleValueResponseHeaders.SetCookie = new StringValues(new[] { "One", "Two" }); _unknownSingleValueResponseHeaders = new HttpResponseHeaders(); _unknownSingleValueResponseHeaders.Append("One", "Value"); diff --git a/src/Servers/Kestrel/perf/Microbenchmarks/ResponseHeadersWritingBenchmark.cs b/src/Servers/Kestrel/perf/Microbenchmarks/ResponseHeadersWritingBenchmark.cs index 5c476a03cf8f..0157e8c6fbd9 100644 --- a/src/Servers/Kestrel/perf/Microbenchmarks/ResponseHeadersWritingBenchmark.cs +++ b/src/Servers/Kestrel/perf/Microbenchmarks/ResponseHeadersWritingBenchmark.cs @@ -61,8 +61,8 @@ public void Output() private void TechEmpowerPlaintext() { - var responseHeaders = _responseHeaders; - responseHeaders.HeaderContentType = "text/plain"; + var responseHeaders = _responseHeadersDict; + responseHeaders.ContentType = "text/plain"; responseHeaders.ContentLength = _helloWorldPayload.Length; var writer = new BufferWriter(_writer); @@ -71,8 +71,8 @@ private void TechEmpowerPlaintext() private void PlaintextChunked() { - var responseHeaders = _responseHeaders; - responseHeaders.HeaderContentType = "text/plain"; + var responseHeaders = _responseHeadersDict; + responseHeaders.ContentType = "text/plain"; var writer = new BufferWriter(_writer); _responseHeaders.CopyTo(ref writer); @@ -80,11 +80,11 @@ private void PlaintextChunked() private void LiveAspNet() { - var responseHeaders = _responseHeaders; - responseHeaders.HeaderContentEncoding = "gzip"; - responseHeaders.HeaderContentType = "text/html; charset=utf-8"; - _responseHeadersDict[HeaderNames.StrictTransportSecurity] = "max-age=31536000; includeSubdomains"; - responseHeaders.HeaderVary = "Accept-Encoding"; + var responseHeaders = _responseHeadersDict; + responseHeaders.ContentEncoding = "gzip"; + responseHeaders.ContentType = "text/html; charset=utf-8"; + responseHeaders.StrictTransportSecurity = "max-age=31536000; includeSubdomains"; + responseHeaders.Vary = "Accept-Encoding"; _responseHeadersDict["X-Powered-By"] = "ASP.NET"; var writer = new BufferWriter(_writer); @@ -93,9 +93,9 @@ private void LiveAspNet() private void PlaintextWithCookie() { - var responseHeaders = _responseHeaders; - responseHeaders.HeaderContentType = "text/plain"; - responseHeaders.HeaderSetCookie = "prov=20629ccd-8b0f-e8ef-2935-cd26609fc0bc; __qca=P0-1591065732-1479167353442; _ga=GA1.2.1298898376.1479167354; _gat=1; sgt=id=9519gfde_3347_4762_8762_df51458c8ec2; acct=t=why-is-%e0%a5%a7%e0%a5%a8%e0%a5%a9-numeric&s=why-is-%e0%a5%a7%e0%a5%a8%e0%a5%a9-numeric"; + var responseHeaders = _responseHeadersDict; + responseHeaders.ContentType = "text/plain"; + responseHeaders.SetCookie = "prov=20629ccd-8b0f-e8ef-2935-cd26609fc0bc; __qca=P0-1591065732-1479167353442; _ga=GA1.2.1298898376.1479167354; _gat=1; sgt=id=9519gfde_3347_4762_8762_df51458c8ec2; acct=t=why-is-%e0%a5%a7%e0%a5%a8%e0%a5%a9-numeric&s=why-is-%e0%a5%a7%e0%a5%a8%e0%a5%a9-numeric"; responseHeaders.ContentLength = _helloWorldPayload.Length; var writer = new BufferWriter(_writer); @@ -104,10 +104,10 @@ private void PlaintextWithCookie() private void PlaintextChunkedWithCookie() { - var responseHeaders = _responseHeaders; - responseHeaders.HeaderContentType = "text/plain"; - responseHeaders.HeaderSetCookie = "prov=20629ccd-8b0f-e8ef-2935-cd26609fc0bc; __qca=P0-1591065732-1479167353442; _ga=GA1.2.1298898376.1479167354; _gat=1; sgt=id=9519gfde_3347_4762_8762_df51458c8ec2; acct=t=why-is-%e0%a5%a7%e0%a5%a8%e0%a5%a9-numeric&s=why-is-%e0%a5%a7%e0%a5%a8%e0%a5%a9-numeric"; - responseHeaders.HeaderTransferEncoding = "chunked"; + var responseHeaders = _responseHeadersDict; + responseHeaders.ContentType = "text/plain"; + responseHeaders.SetCookie = "prov=20629ccd-8b0f-e8ef-2935-cd26609fc0bc; __qca=P0-1591065732-1479167353442; _ga=GA1.2.1298898376.1479167354; _gat=1; sgt=id=9519gfde_3347_4762_8762_df51458c8ec2; acct=t=why-is-%e0%a5%a7%e0%a5%a8%e0%a5%a9-numeric&s=why-is-%e0%a5%a7%e0%a5%a8%e0%a5%a9-numeric"; + responseHeaders.TransferEncoding = "chunked"; var writer = new BufferWriter(_writer); _responseHeaders.CopyTo(ref writer); diff --git a/src/Servers/Kestrel/shared/KnownHeaders.cs b/src/Servers/Kestrel/shared/KnownHeaders.cs index 8e7e6f404d3f..2abec565af67 100644 --- a/src/Servers/Kestrel/shared/KnownHeaders.cs +++ b/src/Servers/Kestrel/shared/KnownHeaders.cs @@ -18,6 +18,46 @@ public class KnownHeaders public readonly static KnownHeader[] RequestHeaders; public readonly static KnownHeader[] ResponseHeaders; public readonly static KnownHeader[] ResponseTrailers; + public readonly static string[] InternalHeaderAccessors = new[] + { + HeaderNames.Allow, + HeaderNames.AltSvc, + HeaderNames.TransferEncoding, + HeaderNames.ContentLength, + HeaderNames.Connection, + HeaderNames.Scheme, + HeaderNames.Path, + HeaderNames.Method, + HeaderNames.Authority, + HeaderNames.Host, + }; + + public static readonly string[] DefinedHeaderNames = typeof(HeaderNames).GetFields(BindingFlags.Static | BindingFlags.Public).Select(h => h.Name).ToArray(); + + public readonly static string[] ObsoleteHeaderNames = new[] + { + HeaderNames.DNT, + }; + + public readonly static string[] PsuedoHeaderNames = new[] + { + "Authority", // :authority + "Method", // :method + "Path", // :path + "Scheme", // :scheme + "Status" // :status + }; + + public readonly static string[] NonApiHeaders = + ObsoleteHeaderNames + .Concat(PsuedoHeaderNames) + .ToArray(); + + public static readonly string[] ApiHeaderNames = + DefinedHeaderNames + .Except(NonApiHeaders) + .ToArray(); + public readonly static long InvalidH2H3ResponseHeadersBits; static KnownHeaders() @@ -730,6 +770,7 @@ public static string GeneratedFile() using System.Runtime.InteropServices; using Microsoft.Extensions.Primitives; using Microsoft.Net.Http.Headers; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure; #nullable enable @@ -747,7 +788,7 @@ internal partial class HttpHeaders {GetHeaderLookup()} }} {Each(loops, loop => $@" - internal partial class {loop.ClassName} + internal partial class {loop.ClassName} : IHeaderDictionary {{{(loop.Bytes != null ? $@" private static ReadOnlySpan HeaderBytes => new byte[] @@ -760,7 +801,7 @@ internal partial class {loop.ClassName} public bool Has{header.Identifier} => {header.TestBit()};")} {Each(loop.Headers.Where(header => header.FastCount), header => $@" public int {header.Identifier}Count => _headers._{header.Identifier}.Count;")} - {Each(loop.Headers, header => $@" +{Each(loop.Headers.Where(header => Array.IndexOf(InternalHeaderAccessors, header.Name) >= 0), header => $@" public {(header.Name == HeaderNames.Connection ? "override " : "")}StringValues Header{header.Identifier} {{{(header.Name == HeaderNames.ContentLength ? $@" get @@ -792,6 +833,55 @@ internal partial class {loop.ClassName} _headers._raw{header.Identifier} = null;")} }}")} }}")} + {Each(loop.Headers.Where(header => header.Name != HeaderNames.ContentLength && !NonApiHeaders.Contains(header.Identifier)), header => $@" + StringValues IHeaderDictionary.{header.Identifier} + {{ + get + {{ + var value = _headers._{header.Identifier}; + if ({header.TestBit()}) + {{ + return value; + }} + return default; + }} + set + {{ + if (_isReadOnly) {{ ThrowHeadersReadOnlyException(); }} + + var flag = {header.FlagBit()}; + if (value.Count > 0) + {{ + _bits |= flag; + _headers._{header.Identifier} = value; + }} + else + {{ + _bits &= ~flag; + _headers._{header.Identifier} = default; + }}{(header.EnhancedSetter == false ? "" : $@" + _headers._raw{header.Identifier} = null;")} + }} + }}")} + {Each(ApiHeaderNames.Where(header => header != "ContentLength" && !loop.Headers.Select(kh => kh.Identifier).Contains(header)), header => $@" + StringValues IHeaderDictionary.{header} + {{ + get + {{ + StringValues value = default; + if (!TryGetUnknown(HeaderNames.{header}, ref value)) + {{ + value = default; + }} + return value; + }} + set + {{ + if (_isReadOnly) {{ ThrowHeadersReadOnlyException(); }} + + SetValueUnknown(HeaderNames.{header}, value); + }} + }}")} {Each(loop.Headers.Where(header => header.EnhancedSetter), header => $@" public void SetRaw{header.Identifier}(StringValues value, byte[] raw) {{ @@ -1216,10 +1306,9 @@ public bool MoveNext() private static string GetHeaderLookup() { - var headerNameFields = typeof(HeaderNames).GetFields(BindingFlags.Static | BindingFlags.Public); - return @$"private readonly static HashSet _internedHeaderNames = new HashSet({headerNameFields.Length}, StringComparer.OrdinalIgnoreCase) - {{{Each(headerNameFields, (f) => @" - HeaderNames." + f.Name + ",")} + return @$"private readonly static HashSet _internedHeaderNames = new HashSet({DefinedHeaderNames.Length}, StringComparer.OrdinalIgnoreCase) + {{{Each(DefinedHeaderNames, (h) => @" + HeaderNames." + h + ",")} }};"; } diff --git a/src/Servers/Kestrel/shared/test/TestApp.cs b/src/Servers/Kestrel/shared/test/TestApp.cs index 165dbbbfd744..c4939e0b3549 100644 --- a/src/Servers/Kestrel/shared/test/TestApp.cs +++ b/src/Servers/Kestrel/shared/test/TestApp.cs @@ -32,7 +32,7 @@ public static async Task EchoAppChunked(HttpContext httpContext) await request.Body.CopyToAsync(data); var bytes = data.ToArray(); - response.Headers["Content-Length"] = bytes.Length.ToString(CultureInfo.InvariantCulture); + response.Headers.ContentLength = bytes.Length; await response.Body.WriteAsync(bytes, 0, bytes.Length); } @@ -66,7 +66,7 @@ public static async Task EchoAppPipeWriterChunked(HttpContext httpContext) await request.Body.CopyToAsync(data); var bytes = data.ToArray(); - response.Headers["Content-Length"] = bytes.Length.ToString(CultureInfo.InvariantCulture); + response.Headers.ContentLength = bytes.Length; await response.StartAsync(); var memory = response.BodyWriter.GetMemory(bytes.Length); diff --git a/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2ConnectionTests.cs b/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2ConnectionTests.cs index 92a3a9b16015..b3115f9147af 100644 --- a/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2ConnectionTests.cs +++ b/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2ConnectionTests.cs @@ -2024,8 +2024,8 @@ public async Task HEADERS_ResponseSetsIgnoreIndexAndNeverIndexValues_HeadersPars await InitializeConnectionAsync(c => { c.Response.ContentLength = 0; - c.Response.Headers[HeaderNames.SetCookie] = "SetCookie!"; - c.Response.Headers[HeaderNames.ContentDisposition] = "ContentDisposition!"; + c.Response.Headers.SetCookie = "SetCookie!"; + c.Response.Headers.ContentDisposition = "ContentDisposition!"; return Task.CompletedTask; }); diff --git a/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2TestBase.cs b/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2TestBase.cs index e11b5d8e2262..b44a815c704d 100644 --- a/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2TestBase.cs +++ b/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2TestBase.cs @@ -357,7 +357,7 @@ public Http2TestBase() _echoHost = context => { - context.Response.Headers[HeaderNames.Host] = context.Request.Headers[HeaderNames.Host]; + context.Response.Headers.Host = context.Request.Headers.Host; return Task.CompletedTask; }; diff --git a/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http3/Http3TestBase.cs b/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http3/Http3TestBase.cs index 443adc786522..b3136f43c012 100644 --- a/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http3/Http3TestBase.cs +++ b/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http3/Http3TestBase.cs @@ -98,7 +98,7 @@ public Http3TestBase() _echoHost = context => { - context.Response.Headers[HeaderNames.Host] = context.Request.Headers[HeaderNames.Host]; + context.Response.Headers.Host = context.Request.Headers.Host; return Task.CompletedTask; }; diff --git a/src/Servers/Kestrel/test/InMemory.FunctionalTests/UpgradeTests.cs b/src/Servers/Kestrel/test/InMemory.FunctionalTests/UpgradeTests.cs index 1a98f17f7b33..254cf0c04735 100644 --- a/src/Servers/Kestrel/test/InMemory.FunctionalTests/UpgradeTests.cs +++ b/src/Servers/Kestrel/test/InMemory.FunctionalTests/UpgradeTests.cs @@ -233,7 +233,7 @@ public async Task AcceptsRequestWithChunkedEncodingAndUpgrade() if (HttpMethods.IsPost(context.Request.Method)) { Assert.False(feature.IsUpgradableRequest); - Assert.Equal("chunked", context.Request.Headers[HeaderNames.TransferEncoding]); + Assert.Equal("chunked", context.Request.Headers.TransferEncoding); Assert.Equal(11, await context.Request.Body.ReadUntilEndAsync(new byte[100])); } else diff --git a/src/Servers/testassets/ServerComparison.TestSites/StartupResponses.cs b/src/Servers/testassets/ServerComparison.TestSites/StartupResponses.cs index 3fc22ee091f9..e91b53029e22 100644 --- a/src/Servers/testassets/ServerComparison.TestSites/StartupResponses.cs +++ b/src/Servers/testassets/ServerComparison.TestSites/StartupResponses.cs @@ -25,7 +25,7 @@ public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) { subApp.Run(async context => { - context.Response.Headers[HeaderNames.Connection] = "close"; + context.Response.Headers.Connection = "close"; await context.Response.WriteAsync("Connnection Close"); await context.Response.Body.FlushAsync(); // Bypass IIS write-behind buffering }); @@ -44,7 +44,7 @@ public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) { subApp.Run(context => { - context.Response.Headers[HeaderNames.TransferEncoding] = "chunked"; + context.Response.Headers.TransferEncoding = "chunked"; return context.Response.WriteAsync("10\r\nManually Chunked\r\n0\r\n\r\n"); }); }); @@ -53,8 +53,8 @@ public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) { subApp.Run(context => { - context.Response.Headers[HeaderNames.Connection] = "close"; - context.Response.Headers[HeaderNames.TransferEncoding] = "chunked"; + context.Response.Headers.Connection = "close"; + context.Response.Headers.TransferEncoding = "chunked"; return context.Response.WriteAsync("1A\r\nManually Chunked and Close\r\n0\r\n\r\n"); }); }); diff --git a/src/Shared/HttpSys/RequestProcessing/HeaderCollection.cs b/src/Shared/HttpSys/RequestProcessing/HeaderCollection.cs index 47faf31ab4ef..c2b97368a8a1 100644 --- a/src/Shared/HttpSys/RequestProcessing/HeaderCollection.cs +++ b/src/Shared/HttpSys/RequestProcessing/HeaderCollection.cs @@ -118,7 +118,7 @@ public long? ContentLength get { long value; - var rawValue = this[HttpKnownHeaderNames.ContentLength]; + var rawValue = this[HeaderNames.ContentLength]; if (_contentLengthText.Equals(rawValue)) { @@ -148,12 +148,12 @@ public long? ContentLength throw new ArgumentOutOfRangeException("value", value.Value, "Cannot be negative."); } _contentLengthText = HeaderUtilities.FormatNonNegativeInt64(value.Value); - this[HttpKnownHeaderNames.ContentLength] = _contentLengthText; + this[HeaderNames.ContentLength] = _contentLengthText; _contentLength = value; } else { - Remove(HttpKnownHeaderNames.ContentLength); + Remove(HeaderNames.ContentLength); _contentLengthText = StringValues.Empty; _contentLength = null; } diff --git a/src/Shared/HttpSys/RequestProcessing/HttpKnownHeaderNames.cs b/src/Shared/HttpSys/RequestProcessing/HttpKnownHeaderNames.cs deleted file mode 100644 index ac299f978574..000000000000 --- a/src/Shared/HttpSys/RequestProcessing/HttpKnownHeaderNames.cs +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -namespace Microsoft.AspNetCore.HttpSys.Internal -{ - internal static class HttpKnownHeaderNames - { - internal const string CacheControl = "Cache-Control"; - internal const string Connection = "Connection"; - internal const string Date = "Date"; - internal const string KeepAlive = "Keep-Alive"; - internal const string Pragma = "Pragma"; - internal const string ProxyConnection = "Proxy-Connection"; - internal const string Trailer = "Trailer"; - internal const string TransferEncoding = "Transfer-Encoding"; - internal const string Upgrade = "Upgrade"; - internal const string Via = "Via"; - internal const string Warning = "Warning"; - internal const string ContentLength = "Content-Length"; - internal const string ContentType = "Content-Type"; - internal const string ContentDisposition = "Content-Disposition"; - internal const string ContentEncoding = "Content-Encoding"; - internal const string ContentLanguage = "Content-Language"; - internal const string ContentLocation = "Content-Location"; - internal const string ContentRange = "Content-Range"; - internal const string Expires = "Expires"; - internal const string LastModified = "Last-Modified"; - internal const string Age = "Age"; - internal const string Location = "Location"; - internal const string ProxyAuthenticate = "Proxy-Authenticate"; - internal const string RetryAfter = "Retry-After"; - internal const string Server = "Server"; - internal const string SetCookie = "Set-Cookie"; - internal const string SetCookie2 = "Set-Cookie2"; - internal const string Vary = "Vary"; - internal const string WWWAuthenticate = "WWW-Authenticate"; - internal const string Accept = "Accept"; - internal const string AcceptCharset = "Accept-Charset"; - internal const string AcceptEncoding = "Accept-Encoding"; - internal const string AcceptLanguage = "Accept-Language"; - internal const string Authorization = "Authorization"; - internal const string Cookie = "Cookie"; - internal const string Cookie2 = "Cookie2"; - internal const string Expect = "Expect"; - internal const string From = "From"; - internal const string Host = "Host"; - internal const string IfMatch = "If-Match"; - internal const string IfModifiedSince = "If-Modified-Since"; - internal const string IfNoneMatch = "If-None-Match"; - internal const string IfRange = "If-Range"; - internal const string IfUnmodifiedSince = "If-Unmodified-Since"; - internal const string MaxForwards = "Max-Forwards"; - internal const string ProxyAuthorization = "Proxy-Authorization"; - internal const string Referer = "Referer"; - internal const string Range = "Range"; - internal const string UserAgent = "User-Agent"; - internal const string ContentMD5 = "Content-MD5"; - internal const string ETag = "ETag"; - internal const string TE = "TE"; - internal const string Allow = "Allow"; - internal const string AcceptRanges = "Accept-Ranges"; - internal const string P3P = "P3P"; - internal const string XPoweredBy = "X-Powered-By"; - internal const string XAspNetVersion = "X-AspNet-Version"; - internal const string SecWebSocketKey = "Sec-WebSocket-Key"; - internal const string SecWebSocketExtensions = "Sec-WebSocket-Extensions"; - internal const string SecWebSocketAccept = "Sec-WebSocket-Accept"; - internal const string Origin = "Origin"; - internal const string SecWebSocketProtocol = "Sec-WebSocket-Protocol"; - internal const string SecWebSocketVersion = "Sec-WebSocket-Version"; - } -} diff --git a/src/Shared/HttpSys/RequestProcessing/RequestHeaders.Generated.cs b/src/Shared/HttpSys/RequestProcessing/RequestHeaders.Generated.cs index 47759a41c5ae..425ac6c6ea09 100644 --- a/src/Shared/HttpSys/RequestProcessing/RequestHeaders.Generated.cs +++ b/src/Shared/HttpSys/RequestProcessing/RequestHeaders.Generated.cs @@ -4,12 +4,9 @@ using System; using System.CodeDom.Compiler; -using System.Collections; using System.Collections.Generic; -using System.IO; -using System.Threading; -using System.Threading.Tasks; using Microsoft.Extensions.Primitives; +using Microsoft.Net.Http.Headers; namespace Microsoft.AspNetCore.HttpSys.Internal { @@ -32,7 +29,7 @@ internal partial class RequestHeaders private StringValues _ContentLanguage; private StringValues _ContentLength; private StringValues _ContentLocation; - private StringValues _ContentMd5; + private StringValues _ContentMD5; private StringValues _ContentRange; private StringValues _ContentType; private StringValues _Cookie; @@ -53,7 +50,7 @@ internal partial class RequestHeaders private StringValues _ProxyAuthorization; private StringValues _Range; private StringValues _Referer; - private StringValues _Te; + private StringValues _TE; private StringValues _Trailer; private StringValues _TransferEncoding; private StringValues _Translate; @@ -62,7 +59,7 @@ internal partial class RequestHeaders private StringValues _Via; private StringValues _Warning; - internal StringValues Accept + public StringValues Accept { get { @@ -84,7 +81,7 @@ internal StringValues Accept } } - internal StringValues AcceptCharset + public StringValues AcceptCharset { get { @@ -106,7 +103,7 @@ internal StringValues AcceptCharset } } - internal StringValues AcceptEncoding + public StringValues AcceptEncoding { get { @@ -128,7 +125,7 @@ internal StringValues AcceptEncoding } } - internal StringValues AcceptLanguage + public StringValues AcceptLanguage { get { @@ -150,7 +147,7 @@ internal StringValues AcceptLanguage } } - internal StringValues Allow + public StringValues Allow { get { @@ -172,7 +169,7 @@ internal StringValues Allow } } - internal StringValues Authorization + public StringValues Authorization { get { @@ -194,7 +191,7 @@ internal StringValues Authorization } } - internal StringValues CacheControl + public StringValues CacheControl { get { @@ -216,7 +213,7 @@ internal StringValues CacheControl } } - internal StringValues Connection + public StringValues Connection { get { @@ -238,7 +235,7 @@ internal StringValues Connection } } - internal StringValues ContentEncoding + public StringValues ContentEncoding { get { @@ -260,7 +257,7 @@ internal StringValues ContentEncoding } } - internal StringValues ContentLanguage + public StringValues ContentLanguage { get { @@ -282,7 +279,7 @@ internal StringValues ContentLanguage } } - internal StringValues ContentLength + public StringValues ContentLength { get { @@ -304,7 +301,7 @@ internal StringValues ContentLength } } - internal StringValues ContentLocation + public StringValues ContentLocation { get { @@ -326,7 +323,7 @@ internal StringValues ContentLocation } } - internal StringValues ContentMd5 + public StringValues ContentMD5 { get { @@ -335,20 +332,20 @@ internal StringValues ContentMd5 string nativeValue = GetKnownHeader(HttpSysRequestHeader.ContentMd5); if (nativeValue != null) { - _ContentMd5 = nativeValue; + _ContentMD5 = nativeValue; } _flag0 |= 0x1000u; } - return _ContentMd5; + return _ContentMD5; } set { _flag0 |= 0x1000u; - _ContentMd5 = value; + _ContentMD5 = value; } } - internal StringValues ContentRange + public StringValues ContentRange { get { @@ -370,7 +367,7 @@ internal StringValues ContentRange } } - internal StringValues ContentType + public StringValues ContentType { get { @@ -392,7 +389,7 @@ internal StringValues ContentType } } - internal StringValues Cookie + public StringValues Cookie { get { @@ -414,7 +411,7 @@ internal StringValues Cookie } } - internal StringValues Date + public StringValues Date { get { @@ -436,7 +433,7 @@ internal StringValues Date } } - internal StringValues Expect + public StringValues Expect { get { @@ -458,7 +455,7 @@ internal StringValues Expect } } - internal StringValues Expires + public StringValues Expires { get { @@ -480,7 +477,7 @@ internal StringValues Expires } } - internal StringValues From + public StringValues From { get { @@ -502,7 +499,7 @@ internal StringValues From } } - internal StringValues Host + public StringValues Host { get { @@ -524,7 +521,7 @@ internal StringValues Host } } - internal StringValues IfMatch + public StringValues IfMatch { get { @@ -546,7 +543,7 @@ internal StringValues IfMatch } } - internal StringValues IfModifiedSince + public StringValues IfModifiedSince { get { @@ -568,7 +565,7 @@ internal StringValues IfModifiedSince } } - internal StringValues IfNoneMatch + public StringValues IfNoneMatch { get { @@ -590,7 +587,7 @@ internal StringValues IfNoneMatch } } - internal StringValues IfRange + public StringValues IfRange { get { @@ -612,7 +609,7 @@ internal StringValues IfRange } } - internal StringValues IfUnmodifiedSince + public StringValues IfUnmodifiedSince { get { @@ -634,7 +631,7 @@ internal StringValues IfUnmodifiedSince } } - internal StringValues KeepAlive + public StringValues KeepAlive { get { @@ -656,7 +653,7 @@ internal StringValues KeepAlive } } - internal StringValues LastModified + public StringValues LastModified { get { @@ -678,7 +675,7 @@ internal StringValues LastModified } } - internal StringValues MaxForwards + public StringValues MaxForwards { get { @@ -700,7 +697,7 @@ internal StringValues MaxForwards } } - internal StringValues Pragma + public StringValues Pragma { get { @@ -722,7 +719,7 @@ internal StringValues Pragma } } - internal StringValues ProxyAuthorization + public StringValues ProxyAuthorization { get { @@ -744,7 +741,7 @@ internal StringValues ProxyAuthorization } } - internal StringValues Range + public StringValues Range { get { @@ -766,7 +763,7 @@ internal StringValues Range } } - internal StringValues Referer + public StringValues Referer { get { @@ -788,7 +785,7 @@ internal StringValues Referer } } - internal StringValues Te + public StringValues TE { get { @@ -797,20 +794,20 @@ internal StringValues Te string nativeValue = GetKnownHeader(HttpSysRequestHeader.Te); if (nativeValue != null) { - _Te = nativeValue; + _TE = nativeValue; } _flag1 |= 0x2u; } - return _Te; + return _TE; } set { _flag1 |= 0x2u; - _Te = value; + _TE = value; } } - internal StringValues Trailer + public StringValues Trailer { get { @@ -832,7 +829,7 @@ internal StringValues Trailer } } - internal StringValues TransferEncoding + public StringValues TransferEncoding { get { @@ -854,7 +851,7 @@ internal StringValues TransferEncoding } } - internal StringValues Translate + public StringValues Translate { get { @@ -876,7 +873,7 @@ internal StringValues Translate } } - internal StringValues Upgrade + public StringValues Upgrade { get { @@ -898,7 +895,7 @@ internal StringValues Upgrade } } - internal StringValues UserAgent + public StringValues UserAgent { get { @@ -920,7 +917,7 @@ internal StringValues UserAgent } } - internal StringValues Via + public StringValues Via { get { @@ -942,7 +939,7 @@ internal StringValues Via } } - internal StringValues Warning + public StringValues Warning { get { @@ -969,199 +966,199 @@ private bool PropertiesContainsKey(string key) switch (key.Length) { case 2: - if (string.Equals(key, "Te", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.TE, StringComparison.OrdinalIgnoreCase)) { - return Te.Count > 0; + return TE.Count > 0; } break; case 3: - if (string.Equals(key, "Via", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Via, StringComparison.OrdinalIgnoreCase)) { return Via.Count > 0; } break; case 4: - if (string.Equals(key, "Date", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Date, StringComparison.OrdinalIgnoreCase)) { return Date.Count > 0; } - if (string.Equals(key, "From", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.From, StringComparison.OrdinalIgnoreCase)) { return From.Count > 0; } - if (string.Equals(key, "Host", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Host, StringComparison.OrdinalIgnoreCase)) { return Host.Count > 0; } break; case 5: - if (string.Equals(key, "Allow", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Allow, StringComparison.OrdinalIgnoreCase)) { return Allow.Count > 0; } - if (string.Equals(key, "Range", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Range, StringComparison.OrdinalIgnoreCase)) { return Range.Count > 0; } break; case 6: - if (string.Equals(key, "Accept", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Accept, StringComparison.OrdinalIgnoreCase)) { return Accept.Count > 0; } - if (string.Equals(key, "Cookie", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Cookie, StringComparison.OrdinalIgnoreCase)) { return Cookie.Count > 0; } - if (string.Equals(key, "Expect", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Expect, StringComparison.OrdinalIgnoreCase)) { return Expect.Count > 0; } - if (string.Equals(key, "Pragma", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Pragma, StringComparison.OrdinalIgnoreCase)) { return Pragma.Count > 0; } break; case 7: - if (string.Equals(key, "Expires", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Expires, StringComparison.OrdinalIgnoreCase)) { return Expires.Count > 0; } - if (string.Equals(key, "Referer", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Referer, StringComparison.OrdinalIgnoreCase)) { return Referer.Count > 0; } - if (string.Equals(key, "Trailer", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Trailer, StringComparison.OrdinalIgnoreCase)) { return Trailer.Count > 0; } - if (string.Equals(key, "Upgrade", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Upgrade, StringComparison.OrdinalIgnoreCase)) { return Upgrade.Count > 0; } - if (string.Equals(key, "Warning", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Warning, StringComparison.OrdinalIgnoreCase)) { return Warning.Count > 0; } break; case 8: - if (string.Equals(key, "If-Match", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.IfMatch, StringComparison.OrdinalIgnoreCase)) { return IfMatch.Count > 0; } - if (string.Equals(key, "If-Range", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.IfRange, StringComparison.OrdinalIgnoreCase)) { return IfRange.Count > 0; } break; case 9: - if (string.Equals(key, "Translate", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Translate, StringComparison.OrdinalIgnoreCase)) { return Translate.Count > 0; } break; case 10: - if (string.Equals(key, "Connection", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Connection, StringComparison.OrdinalIgnoreCase)) { return Connection.Count > 0; } - if (string.Equals(key, "Keep-Alive", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.KeepAlive, StringComparison.OrdinalIgnoreCase)) { return KeepAlive.Count > 0; } - if (string.Equals(key, "User-Agent", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.UserAgent, StringComparison.OrdinalIgnoreCase)) { return UserAgent.Count > 0; } break; case 11: - if (string.Equals(key, "Content-Md5", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.ContentMD5, StringComparison.OrdinalIgnoreCase)) { - return ContentMd5.Count > 0; + return ContentMD5.Count > 0; } break; case 12: - if (string.Equals(key, "Content-Type", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.ContentType, StringComparison.OrdinalIgnoreCase)) { return ContentType.Count > 0; } - if (string.Equals(key, "Max-Forwards", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.MaxForwards, StringComparison.OrdinalIgnoreCase)) { return MaxForwards.Count > 0; } break; case 13: - if (string.Equals(key, "Authorization", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Authorization, StringComparison.OrdinalIgnoreCase)) { return Authorization.Count > 0; } - if (string.Equals(key, "Cache-Control", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.CacheControl, StringComparison.OrdinalIgnoreCase)) { return CacheControl.Count > 0; } - if (string.Equals(key, "Content-Range", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.ContentRange, StringComparison.OrdinalIgnoreCase)) { return ContentRange.Count > 0; } - if (string.Equals(key, "If-None-Match", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.IfNoneMatch, StringComparison.OrdinalIgnoreCase)) { return IfNoneMatch.Count > 0; } - if (string.Equals(key, "Last-Modified", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.LastModified, StringComparison.OrdinalIgnoreCase)) { return LastModified.Count > 0; } break; case 14: - if (string.Equals(key, "Accept-Charset", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.AcceptCharset, StringComparison.OrdinalIgnoreCase)) { return AcceptCharset.Count > 0; } - if (string.Equals(key, "Content-Length", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.ContentLength, StringComparison.OrdinalIgnoreCase)) { return ContentLength.Count > 0; } break; case 15: - if (string.Equals(key, "Accept-Encoding", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.AcceptEncoding, StringComparison.OrdinalIgnoreCase)) { return AcceptEncoding.Count > 0; } - if (string.Equals(key, "Accept-Language", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.AcceptLanguage, StringComparison.OrdinalIgnoreCase)) { return AcceptLanguage.Count > 0; } break; case 16: - if (string.Equals(key, "Content-Encoding", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.ContentEncoding, StringComparison.OrdinalIgnoreCase)) { return ContentEncoding.Count > 0; } - if (string.Equals(key, "Content-Language", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.ContentLanguage, StringComparison.OrdinalIgnoreCase)) { return ContentLanguage.Count > 0; } - if (string.Equals(key, "Content-Location", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.ContentLocation, StringComparison.OrdinalIgnoreCase)) { return ContentLocation.Count > 0; } break; case 17: - if (string.Equals(key, "If-Modified-Since", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.IfModifiedSince, StringComparison.OrdinalIgnoreCase)) { return IfModifiedSince.Count > 0; } - if (string.Equals(key, "Transfer-Encoding", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.TransferEncoding, StringComparison.OrdinalIgnoreCase)) { return TransferEncoding.Count > 0; } break; case 19: - if (string.Equals(key, "If-Unmodified-Since", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.IfUnmodifiedSince, StringComparison.OrdinalIgnoreCase)) { return IfUnmodifiedSince.Count > 0; } - if (string.Equals(key, "Proxy-Authorization", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.ProxyAuthorization, StringComparison.OrdinalIgnoreCase)) { return ProxyAuthorization.Count > 0; } @@ -1175,239 +1172,239 @@ private bool PropertiesTryGetValue(string key, out StringValues value) switch (key.Length) { case 2: - if (string.Equals(key, "Te", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.TE, StringComparison.OrdinalIgnoreCase)) { - value = Te; + value = TE; return value.Count > 0; } break; case 3: - if (string.Equals(key, "Via", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Via, StringComparison.OrdinalIgnoreCase)) { value = Via; return value.Count > 0; } break; case 4: - if (string.Equals(key, "Date", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Date, StringComparison.OrdinalIgnoreCase)) { value = Date; return value.Count > 0; } - if (string.Equals(key, "From", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.From, StringComparison.OrdinalIgnoreCase)) { value = From; return value.Count > 0; } - if (string.Equals(key, "Host", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Host, StringComparison.OrdinalIgnoreCase)) { value = Host; return value.Count > 0; } break; case 5: - if (string.Equals(key, "Allow", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Allow, StringComparison.OrdinalIgnoreCase)) { value = Allow; return value.Count > 0; } - if (string.Equals(key, "Range", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Range, StringComparison.OrdinalIgnoreCase)) { value = Range; return value.Count > 0; } break; case 6: - if (string.Equals(key, "Accept", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Accept, StringComparison.OrdinalIgnoreCase)) { value = Accept; return value.Count > 0; } - if (string.Equals(key, "Cookie", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Cookie, StringComparison.OrdinalIgnoreCase)) { value = Cookie; return value.Count > 0; } - if (string.Equals(key, "Expect", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Expect, StringComparison.OrdinalIgnoreCase)) { value = Expect; return value.Count > 0; } - if (string.Equals(key, "Pragma", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Pragma, StringComparison.OrdinalIgnoreCase)) { value = Pragma; return value.Count > 0; } break; case 7: - if (string.Equals(key, "Expires", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Expires, StringComparison.OrdinalIgnoreCase)) { value = Expires; return value.Count > 0; } - if (string.Equals(key, "Referer", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Referer, StringComparison.OrdinalIgnoreCase)) { value = Referer; return value.Count > 0; } - if (string.Equals(key, "Trailer", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Trailer, StringComparison.OrdinalIgnoreCase)) { value = Trailer; return value.Count > 0; } - if (string.Equals(key, "Upgrade", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Upgrade, StringComparison.OrdinalIgnoreCase)) { value = Upgrade; return value.Count > 0; } - if (string.Equals(key, "Warning", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Warning, StringComparison.OrdinalIgnoreCase)) { value = Warning; return value.Count > 0; } break; case 8: - if (string.Equals(key, "If-Match", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.IfMatch, StringComparison.OrdinalIgnoreCase)) { value = IfMatch; return value.Count > 0; } - if (string.Equals(key, "If-Range", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.IfRange, StringComparison.OrdinalIgnoreCase)) { value = IfRange; return value.Count > 0; } break; case 9: - if (string.Equals(key, "Translate", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Translate, StringComparison.OrdinalIgnoreCase)) { value = Translate; return value.Count > 0; } break; case 10: - if (string.Equals(key, "Connection", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Connection, StringComparison.OrdinalIgnoreCase)) { value = Connection; return value.Count > 0; } - if (string.Equals(key, "Keep-Alive", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.KeepAlive, StringComparison.OrdinalIgnoreCase)) { value = KeepAlive; return value.Count > 0; } - if (string.Equals(key, "User-Agent", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.UserAgent, StringComparison.OrdinalIgnoreCase)) { value = UserAgent; return value.Count > 0; } break; case 11: - if (string.Equals(key, "Content-Md5", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.ContentMD5, StringComparison.OrdinalIgnoreCase)) { - value = ContentMd5; + value = ContentMD5; return value.Count > 0; } break; case 12: - if (string.Equals(key, "Content-Type", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.ContentType, StringComparison.OrdinalIgnoreCase)) { value = ContentType; return value.Count > 0; } - if (string.Equals(key, "Max-Forwards", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.MaxForwards, StringComparison.OrdinalIgnoreCase)) { value = MaxForwards; return value.Count > 0; } break; case 13: - if (string.Equals(key, "Authorization", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Authorization, StringComparison.OrdinalIgnoreCase)) { value = Authorization; return value.Count > 0; } - if (string.Equals(key, "Cache-Control", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.CacheControl, StringComparison.OrdinalIgnoreCase)) { value = CacheControl; return value.Count > 0; } - if (string.Equals(key, "Content-Range", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.ContentRange, StringComparison.OrdinalIgnoreCase)) { value = ContentRange; return value.Count > 0; } - if (string.Equals(key, "If-None-Match", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.IfNoneMatch, StringComparison.OrdinalIgnoreCase)) { value = IfNoneMatch; return value.Count > 0; } - if (string.Equals(key, "Last-Modified", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.LastModified, StringComparison.OrdinalIgnoreCase)) { value = LastModified; return value.Count > 0; } break; case 14: - if (string.Equals(key, "Accept-Charset", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.AcceptCharset, StringComparison.OrdinalIgnoreCase)) { value = AcceptCharset; return value.Count > 0; } - if (string.Equals(key, "Content-Length", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.ContentLength, StringComparison.OrdinalIgnoreCase)) { value = ContentLength; return value.Count > 0; } break; case 15: - if (string.Equals(key, "Accept-Encoding", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.AcceptEncoding, StringComparison.OrdinalIgnoreCase)) { value = AcceptEncoding; return value.Count > 0; } - if (string.Equals(key, "Accept-Language", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.AcceptLanguage, StringComparison.OrdinalIgnoreCase)) { value = AcceptLanguage; return value.Count > 0; } break; case 16: - if (string.Equals(key, "Content-Encoding", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.ContentEncoding, StringComparison.OrdinalIgnoreCase)) { value = ContentEncoding; return value.Count > 0; } - if (string.Equals(key, "Content-Language", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.ContentLanguage, StringComparison.OrdinalIgnoreCase)) { value = ContentLanguage; return value.Count > 0; } - if (string.Equals(key, "Content-Location", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.ContentLocation, StringComparison.OrdinalIgnoreCase)) { value = ContentLocation; return value.Count > 0; } break; case 17: - if (string.Equals(key, "If-Modified-Since", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.IfModifiedSince, StringComparison.OrdinalIgnoreCase)) { value = IfModifiedSince; return value.Count > 0; } - if (string.Equals(key, "Transfer-Encoding", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.TransferEncoding, StringComparison.OrdinalIgnoreCase)) { value = TransferEncoding; return value.Count > 0; } break; case 19: - if (string.Equals(key, "If-Unmodified-Since", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.IfUnmodifiedSince, StringComparison.OrdinalIgnoreCase)) { value = IfUnmodifiedSince; return value.Count > 0; } - if (string.Equals(key, "Proxy-Authorization", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.ProxyAuthorization, StringComparison.OrdinalIgnoreCase)) { value = ProxyAuthorization; return value.Count > 0; @@ -1423,15 +1420,15 @@ private bool PropertiesTrySetValue(string key, StringValues value) switch (key.Length) { case 2: - if (string.Equals(key, "Te", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.TE, StringComparison.OrdinalIgnoreCase)) { _flag1 |= 0x2u; - Te = value; + TE = value; return true; } break; case 3: - if (string.Equals(key, "Via", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Via, StringComparison.OrdinalIgnoreCase)) { _flag1 |= 0x80u; Via = value; @@ -1439,19 +1436,19 @@ private bool PropertiesTrySetValue(string key, StringValues value) } break; case 4: - if (string.Equals(key, "Date", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Date, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x10000u; Date = value; return true; } - if (string.Equals(key, "From", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.From, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x80000u; From = value; return true; } - if (string.Equals(key, "Host", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Host, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x100000u; Host = value; @@ -1459,13 +1456,13 @@ private bool PropertiesTrySetValue(string key, StringValues value) } break; case 5: - if (string.Equals(key, "Allow", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Allow, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x10u; Allow = value; return true; } - if (string.Equals(key, "Range", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Range, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x80000000u; Range = value; @@ -1473,25 +1470,25 @@ private bool PropertiesTrySetValue(string key, StringValues value) } break; case 6: - if (string.Equals(key, "Accept", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Accept, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x1u; Accept = value; return true; } - if (string.Equals(key, "Cookie", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Cookie, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x8000u; Cookie = value; return true; } - if (string.Equals(key, "Expect", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Expect, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x20000u; Expect = value; return true; } - if (string.Equals(key, "Pragma", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Pragma, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x20000000u; Pragma = value; @@ -1499,31 +1496,31 @@ private bool PropertiesTrySetValue(string key, StringValues value) } break; case 7: - if (string.Equals(key, "Expires", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Expires, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x40000u; Expires = value; return true; } - if (string.Equals(key, "Referer", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Referer, StringComparison.OrdinalIgnoreCase)) { _flag1 |= 0x1u; Referer = value; return true; } - if (string.Equals(key, "Trailer", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Trailer, StringComparison.OrdinalIgnoreCase)) { _flag1 |= 0x4u; Trailer = value; return true; } - if (string.Equals(key, "Upgrade", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Upgrade, StringComparison.OrdinalIgnoreCase)) { _flag1 |= 0x20u; Upgrade = value; return true; } - if (string.Equals(key, "Warning", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Warning, StringComparison.OrdinalIgnoreCase)) { _flag1 |= 0x100u; Warning = value; @@ -1531,13 +1528,13 @@ private bool PropertiesTrySetValue(string key, StringValues value) } break; case 8: - if (string.Equals(key, "If-Match", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.IfMatch, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x200000u; IfMatch = value; return true; } - if (string.Equals(key, "If-Range", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.IfRange, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x1000000u; IfRange = value; @@ -1545,7 +1542,7 @@ private bool PropertiesTrySetValue(string key, StringValues value) } break; case 9: - if (string.Equals(key, "Translate", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Translate, StringComparison.OrdinalIgnoreCase)) { _flag1 |= 0x10u; Translate = value; @@ -1553,19 +1550,19 @@ private bool PropertiesTrySetValue(string key, StringValues value) } break; case 10: - if (string.Equals(key, "Connection", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Connection, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x80u; Connection = value; return true; } - if (string.Equals(key, "Keep-Alive", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.KeepAlive, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x4000000u; KeepAlive = value; return true; } - if (string.Equals(key, "User-Agent", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.UserAgent, StringComparison.OrdinalIgnoreCase)) { _flag1 |= 0x40u; UserAgent = value; @@ -1573,21 +1570,21 @@ private bool PropertiesTrySetValue(string key, StringValues value) } break; case 11: - if (string.Equals(key, "Content-Md5", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.ContentMD5, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x1000u; - ContentMd5 = value; + ContentMD5 = value; return true; } break; case 12: - if (string.Equals(key, "Content-Type", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.ContentType, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x4000u; ContentType = value; return true; } - if (string.Equals(key, "Max-Forwards", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.MaxForwards, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x10000000u; MaxForwards = value; @@ -1595,31 +1592,31 @@ private bool PropertiesTrySetValue(string key, StringValues value) } break; case 13: - if (string.Equals(key, "Authorization", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.Authorization, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x20u; Authorization = value; return true; } - if (string.Equals(key, "Cache-Control", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.CacheControl, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x40u; CacheControl = value; return true; } - if (string.Equals(key, "Content-Range", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.ContentRange, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x2000u; ContentRange = value; return true; } - if (string.Equals(key, "If-None-Match", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.IfNoneMatch, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x800000u; IfNoneMatch = value; return true; } - if (string.Equals(key, "Last-Modified", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.LastModified, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x8000000u; LastModified = value; @@ -1627,13 +1624,13 @@ private bool PropertiesTrySetValue(string key, StringValues value) } break; case 14: - if (string.Equals(key, "Accept-Charset", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.AcceptCharset, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x2u; AcceptCharset = value; return true; } - if (string.Equals(key, "Content-Length", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.ContentLength, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x400u; ContentLength = value; @@ -1641,13 +1638,13 @@ private bool PropertiesTrySetValue(string key, StringValues value) } break; case 15: - if (string.Equals(key, "Accept-Encoding", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.AcceptEncoding, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x4u; AcceptEncoding = value; return true; } - if (string.Equals(key, "Accept-Language", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.AcceptLanguage, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x8u; AcceptLanguage = value; @@ -1655,19 +1652,19 @@ private bool PropertiesTrySetValue(string key, StringValues value) } break; case 16: - if (string.Equals(key, "Content-Encoding", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.ContentEncoding, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x100u; ContentEncoding = value; return true; } - if (string.Equals(key, "Content-Language", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.ContentLanguage, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x200u; ContentLanguage = value; return true; } - if (string.Equals(key, "Content-Location", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.ContentLocation, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x800u; ContentLocation = value; @@ -1675,13 +1672,13 @@ private bool PropertiesTrySetValue(string key, StringValues value) } break; case 17: - if (string.Equals(key, "If-Modified-Since", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.IfModifiedSince, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x400000u; IfModifiedSince = value; return true; } - if (string.Equals(key, "Transfer-Encoding", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.TransferEncoding, StringComparison.OrdinalIgnoreCase)) { _flag1 |= 0x8u; TransferEncoding = value; @@ -1689,13 +1686,13 @@ private bool PropertiesTrySetValue(string key, StringValues value) } break; case 19: - if (string.Equals(key, "If-Unmodified-Since", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.IfUnmodifiedSince, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x2000000u; IfUnmodifiedSince = value; return true; } - if (string.Equals(key, "Proxy-Authorization", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, HeaderNames.ProxyAuthorization, StringComparison.OrdinalIgnoreCase)) { _flag0 |= 0x40000000u; ProxyAuthorization = value; @@ -1711,17 +1708,17 @@ private bool PropertiesTryRemove(string key) switch (key.Length) { case 2: - if (_Te.Count > 0 - && string.Equals(key, "Te", StringComparison.Ordinal)) + if (_TE.Count > 0 + && string.Equals(key, HeaderNames.TE, StringComparison.Ordinal)) { bool wasSet = ((_flag1 & 0x2u) != 0); - Te = StringValues.Empty; + TE = StringValues.Empty; return wasSet; } break; case 3: if (_Via.Count > 0 - && string.Equals(key, "Via", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.Via, StringComparison.Ordinal)) { bool wasSet = ((_flag1 & 0x80u) != 0); Via = StringValues.Empty; @@ -1730,21 +1727,21 @@ private bool PropertiesTryRemove(string key) break; case 4: if (_Date.Count > 0 - && string.Equals(key, "Date", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.Date, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x10000u) != 0); Date = StringValues.Empty; return wasSet; } if (_From.Count > 0 - && string.Equals(key, "From", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.From, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x80000u) != 0); From = StringValues.Empty; return wasSet; } if (_Host.Count > 0 - && string.Equals(key, "Host", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.Host, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x100000u) != 0); Host = StringValues.Empty; @@ -1753,14 +1750,14 @@ private bool PropertiesTryRemove(string key) break; case 5: if (_Allow.Count > 0 - && string.Equals(key, "Allow", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.Allow, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x10u) != 0); Allow = StringValues.Empty; return wasSet; } if (_Range.Count > 0 - && string.Equals(key, "Range", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.Range, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x80000000u) != 0); Range = StringValues.Empty; @@ -1769,28 +1766,28 @@ private bool PropertiesTryRemove(string key) break; case 6: if (_Accept.Count > 0 - && string.Equals(key, "Accept", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.Accept, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x1u) != 0); Accept = StringValues.Empty; return wasSet; } if (_Cookie.Count > 0 - && string.Equals(key, "Cookie", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.Cookie, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x8000u) != 0); Cookie = StringValues.Empty; return wasSet; } if (_Expect.Count > 0 - && string.Equals(key, "Expect", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.Expect, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x20000u) != 0); Expect = StringValues.Empty; return wasSet; } if (_Pragma.Count > 0 - && string.Equals(key, "Pragma", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.Pragma, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x20000000u) != 0); Pragma = StringValues.Empty; @@ -1799,35 +1796,35 @@ private bool PropertiesTryRemove(string key) break; case 7: if (_Expires.Count > 0 - && string.Equals(key, "Expires", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.Expires, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x40000u) != 0); Expires = StringValues.Empty; return wasSet; } if (_Referer.Count > 0 - && string.Equals(key, "Referer", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.Referer, StringComparison.Ordinal)) { bool wasSet = ((_flag1 & 0x1u) != 0); Referer = StringValues.Empty; return wasSet; } if (_Trailer.Count > 0 - && string.Equals(key, "Trailer", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.Trailer, StringComparison.Ordinal)) { bool wasSet = ((_flag1 & 0x4u) != 0); Trailer = StringValues.Empty; return wasSet; } if (_Upgrade.Count > 0 - && string.Equals(key, "Upgrade", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.Upgrade, StringComparison.Ordinal)) { bool wasSet = ((_flag1 & 0x20u) != 0); Upgrade = StringValues.Empty; return wasSet; } if (_Warning.Count > 0 - && string.Equals(key, "Warning", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.Warning, StringComparison.Ordinal)) { bool wasSet = ((_flag1 & 0x100u) != 0); Warning = StringValues.Empty; @@ -1836,14 +1833,14 @@ private bool PropertiesTryRemove(string key) break; case 8: if (_IfMatch.Count > 0 - && string.Equals(key, "If-Match", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.IfMatch, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x200000u) != 0); IfMatch = StringValues.Empty; return wasSet; } if (_IfRange.Count > 0 - && string.Equals(key, "If-Range", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.IfRange, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x1000000u) != 0); IfRange = StringValues.Empty; @@ -1852,7 +1849,7 @@ private bool PropertiesTryRemove(string key) break; case 9: if (_Translate.Count > 0 - && string.Equals(key, "Translate", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.Translate, StringComparison.Ordinal)) { bool wasSet = ((_flag1 & 0x10u) != 0); Translate = StringValues.Empty; @@ -1861,21 +1858,21 @@ private bool PropertiesTryRemove(string key) break; case 10: if (_Connection.Count > 0 - && string.Equals(key, "Connection", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.Connection, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x80u) != 0); Connection = StringValues.Empty; return wasSet; } if (_KeepAlive.Count > 0 - && string.Equals(key, "Keep-Alive", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.KeepAlive, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x4000000u) != 0); KeepAlive = StringValues.Empty; return wasSet; } if (_UserAgent.Count > 0 - && string.Equals(key, "User-Agent", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.UserAgent, StringComparison.Ordinal)) { bool wasSet = ((_flag1 & 0x40u) != 0); UserAgent = StringValues.Empty; @@ -1883,24 +1880,24 @@ private bool PropertiesTryRemove(string key) } break; case 11: - if (_ContentMd5.Count > 0 - && string.Equals(key, "Content-Md5", StringComparison.Ordinal)) + if (_ContentMD5.Count > 0 + && string.Equals(key, HeaderNames.ContentMD5, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x1000u) != 0); - ContentMd5 = StringValues.Empty; + ContentMD5 = StringValues.Empty; return wasSet; } break; case 12: if (_ContentType.Count > 0 - && string.Equals(key, "Content-Type", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.ContentType, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x4000u) != 0); ContentType = StringValues.Empty; return wasSet; } if (_MaxForwards.Count > 0 - && string.Equals(key, "Max-Forwards", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.MaxForwards, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x10000000u) != 0); MaxForwards = StringValues.Empty; @@ -1909,35 +1906,35 @@ private bool PropertiesTryRemove(string key) break; case 13: if (_Authorization.Count > 0 - && string.Equals(key, "Authorization", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.Authorization, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x20u) != 0); Authorization = StringValues.Empty; return wasSet; } if (_CacheControl.Count > 0 - && string.Equals(key, "Cache-Control", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.CacheControl, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x40u) != 0); CacheControl = StringValues.Empty; return wasSet; } if (_ContentRange.Count > 0 - && string.Equals(key, "Content-Range", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.ContentRange, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x2000u) != 0); ContentRange = StringValues.Empty; return wasSet; } if (_IfNoneMatch.Count > 0 - && string.Equals(key, "If-None-Match", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.IfNoneMatch, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x800000u) != 0); IfNoneMatch = StringValues.Empty; return wasSet; } if (_LastModified.Count > 0 - && string.Equals(key, "Last-Modified", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.LastModified, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x8000000u) != 0); LastModified = StringValues.Empty; @@ -1946,14 +1943,14 @@ private bool PropertiesTryRemove(string key) break; case 14: if (_AcceptCharset.Count > 0 - && string.Equals(key, "Accept-Charset", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.AcceptCharset, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x2u) != 0); AcceptCharset = StringValues.Empty; return wasSet; } if (_ContentLength.Count > 0 - && string.Equals(key, "Content-Length", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.ContentLength, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x400u) != 0); ContentLength = StringValues.Empty; @@ -1962,14 +1959,14 @@ private bool PropertiesTryRemove(string key) break; case 15: if (_AcceptEncoding.Count > 0 - && string.Equals(key, "Accept-Encoding", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.AcceptEncoding, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x4u) != 0); AcceptEncoding = StringValues.Empty; return wasSet; } if (_AcceptLanguage.Count > 0 - && string.Equals(key, "Accept-Language", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.AcceptLanguage, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x8u) != 0); AcceptLanguage = StringValues.Empty; @@ -1978,21 +1975,21 @@ private bool PropertiesTryRemove(string key) break; case 16: if (_ContentEncoding.Count > 0 - && string.Equals(key, "Content-Encoding", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.ContentEncoding, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x100u) != 0); ContentEncoding = StringValues.Empty; return wasSet; } if (_ContentLanguage.Count > 0 - && string.Equals(key, "Content-Language", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.ContentLanguage, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x200u) != 0); ContentLanguage = StringValues.Empty; return wasSet; } if (_ContentLocation.Count > 0 - && string.Equals(key, "Content-Location", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.ContentLocation, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x800u) != 0); ContentLocation = StringValues.Empty; @@ -2001,14 +1998,14 @@ private bool PropertiesTryRemove(string key) break; case 17: if (_IfModifiedSince.Count > 0 - && string.Equals(key, "If-Modified-Since", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.IfModifiedSince, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x400000u) != 0); IfModifiedSince = StringValues.Empty; return wasSet; } if (_TransferEncoding.Count > 0 - && string.Equals(key, "Transfer-Encoding", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.TransferEncoding, StringComparison.Ordinal)) { bool wasSet = ((_flag1 & 0x8u) != 0); TransferEncoding = StringValues.Empty; @@ -2017,14 +2014,14 @@ private bool PropertiesTryRemove(string key) break; case 19: if (_IfUnmodifiedSince.Count > 0 - && string.Equals(key, "If-Unmodified-Since", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.IfUnmodifiedSince, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x2000000u) != 0); IfUnmodifiedSince = StringValues.Empty; return wasSet; } if (_ProxyAuthorization.Count > 0 - && string.Equals(key, "Proxy-Authorization", StringComparison.Ordinal)) + && string.Equals(key, HeaderNames.ProxyAuthorization, StringComparison.Ordinal)) { bool wasSet = ((_flag0 & 0x40000000u) != 0); ProxyAuthorization = StringValues.Empty; @@ -2039,167 +2036,167 @@ private IEnumerable PropertiesKeys() { if (Accept.Count > 0) { - yield return "Accept"; + yield return HeaderNames.Accept; } if (AcceptCharset.Count > 0) { - yield return "Accept-Charset"; + yield return HeaderNames.AcceptCharset; } if (AcceptEncoding.Count > 0) { - yield return "Accept-Encoding"; + yield return HeaderNames.AcceptEncoding; } if (AcceptLanguage.Count > 0) { - yield return "Accept-Language"; + yield return HeaderNames.AcceptLanguage; } if (Allow.Count > 0) { - yield return "Allow"; + yield return HeaderNames.Allow; } if (Authorization.Count > 0) { - yield return "Authorization"; + yield return HeaderNames.Authorization; } if (CacheControl.Count > 0) { - yield return "Cache-Control"; + yield return HeaderNames.CacheControl; } if (Connection.Count > 0) { - yield return "Connection"; + yield return HeaderNames.Connection; } if (ContentEncoding.Count > 0) { - yield return "Content-Encoding"; + yield return HeaderNames.ContentEncoding; } if (ContentLanguage.Count > 0) { - yield return "Content-Language"; + yield return HeaderNames.ContentLanguage; } if (ContentLength.Count > 0) { - yield return "Content-Length"; + yield return HeaderNames.ContentLength; } if (ContentLocation.Count > 0) { - yield return "Content-Location"; + yield return HeaderNames.ContentLocation; } - if (ContentMd5.Count > 0) + if (ContentMD5.Count > 0) { - yield return "Content-Md5"; + yield return HeaderNames.ContentMD5; } if (ContentRange.Count > 0) { - yield return "Content-Range"; + yield return HeaderNames.ContentRange; } if (ContentType.Count > 0) { - yield return "Content-Type"; + yield return HeaderNames.ContentType; } if (Cookie.Count > 0) { - yield return "Cookie"; + yield return HeaderNames.Cookie; } if (Date.Count > 0) { - yield return "Date"; + yield return HeaderNames.Date; } if (Expect.Count > 0) { - yield return "Expect"; + yield return HeaderNames.Expect; } if (Expires.Count > 0) { - yield return "Expires"; + yield return HeaderNames.Expires; } if (From.Count > 0) { - yield return "From"; + yield return HeaderNames.From; } if (Host.Count > 0) { - yield return "Host"; + yield return HeaderNames.Host; } if (IfMatch.Count > 0) { - yield return "If-Match"; + yield return HeaderNames.IfMatch; } if (IfModifiedSince.Count > 0) { - yield return "If-Modified-Since"; + yield return HeaderNames.IfModifiedSince; } if (IfNoneMatch.Count > 0) { - yield return "If-None-Match"; + yield return HeaderNames.IfNoneMatch; } if (IfRange.Count > 0) { - yield return "If-Range"; + yield return HeaderNames.IfRange; } if (IfUnmodifiedSince.Count > 0) { - yield return "If-Unmodified-Since"; + yield return HeaderNames.IfUnmodifiedSince; } if (KeepAlive.Count > 0) { - yield return "Keep-Alive"; + yield return HeaderNames.KeepAlive; } if (LastModified.Count > 0) { - yield return "Last-Modified"; + yield return HeaderNames.LastModified; } if (MaxForwards.Count > 0) { - yield return "Max-Forwards"; + yield return HeaderNames.MaxForwards; } if (Pragma.Count > 0) { - yield return "Pragma"; + yield return HeaderNames.Pragma; } if (ProxyAuthorization.Count > 0) { - yield return "Proxy-Authorization"; + yield return HeaderNames.ProxyAuthorization; } if (Range.Count > 0) { - yield return "Range"; + yield return HeaderNames.Range; } if (Referer.Count > 0) { - yield return "Referer"; + yield return HeaderNames.Referer; } - if (Te.Count > 0) + if (TE.Count > 0) { - yield return "Te"; + yield return HeaderNames.TE; } if (Trailer.Count > 0) { - yield return "Trailer"; + yield return HeaderNames.Trailer; } if (TransferEncoding.Count > 0) { - yield return "Transfer-Encoding"; + yield return HeaderNames.TransferEncoding; } if (Translate.Count > 0) { - yield return "Translate"; + yield return HeaderNames.Translate; } if (Upgrade.Count > 0) { - yield return "Upgrade"; + yield return HeaderNames.Upgrade; } if (UserAgent.Count > 0) { - yield return "User-Agent"; + yield return HeaderNames.UserAgent; } if (Via.Count > 0) { - yield return "Via"; + yield return HeaderNames.Via; } if (Warning.Count > 0) { - yield return "Warning"; + yield return HeaderNames.Warning; } } @@ -2253,9 +2250,9 @@ private IEnumerable PropertiesValues() { yield return ContentLocation; } - if (ContentMd5.Count > 0) + if (ContentMD5.Count > 0) { - yield return ContentMd5; + yield return ContentMD5; } if (ContentRange.Count > 0) { @@ -2337,9 +2334,9 @@ private IEnumerable PropertiesValues() { yield return Referer; } - if (Te.Count > 0) + if (TE.Count > 0) { - yield return Te; + yield return TE; } if (Trailer.Count > 0) { @@ -2375,167 +2372,167 @@ private IEnumerable> PropertiesEnumerable() { if (Accept.Count > 0) { - yield return new KeyValuePair("Accept", Accept); + yield return new KeyValuePair(HeaderNames.Accept, Accept); } if (AcceptCharset.Count > 0) { - yield return new KeyValuePair("Accept-Charset", AcceptCharset); + yield return new KeyValuePair(HeaderNames.AcceptCharset, AcceptCharset); } if (AcceptEncoding.Count > 0) { - yield return new KeyValuePair("Accept-Encoding", AcceptEncoding); + yield return new KeyValuePair(HeaderNames.AcceptEncoding, AcceptEncoding); } if (AcceptLanguage.Count > 0) { - yield return new KeyValuePair("Accept-Language", AcceptLanguage); + yield return new KeyValuePair(HeaderNames.AcceptLanguage, AcceptLanguage); } if (Allow.Count > 0) { - yield return new KeyValuePair("Allow", Allow); + yield return new KeyValuePair(HeaderNames.Allow, Allow); } if (Authorization.Count > 0) { - yield return new KeyValuePair("Authorization", Authorization); + yield return new KeyValuePair(HeaderNames.Authorization, Authorization); } if (CacheControl.Count > 0) { - yield return new KeyValuePair("Cache-Control", CacheControl); + yield return new KeyValuePair(HeaderNames.CacheControl, CacheControl); } if (Connection.Count > 0) { - yield return new KeyValuePair("Connection", Connection); + yield return new KeyValuePair(HeaderNames.Connection, Connection); } if (ContentEncoding.Count > 0) { - yield return new KeyValuePair("Content-Encoding", ContentEncoding); + yield return new KeyValuePair(HeaderNames.ContentEncoding, ContentEncoding); } if (ContentLanguage.Count > 0) { - yield return new KeyValuePair("Content-Language", ContentLanguage); + yield return new KeyValuePair(HeaderNames.ContentLanguage, ContentLanguage); } if (ContentLength.Count > 0) { - yield return new KeyValuePair("Content-Length", ContentLength); + yield return new KeyValuePair(HeaderNames.ContentLength, ContentLength); } if (ContentLocation.Count > 0) { - yield return new KeyValuePair("Content-Location", ContentLocation); + yield return new KeyValuePair(HeaderNames.ContentLocation, ContentLocation); } - if (ContentMd5.Count > 0) + if (ContentMD5.Count > 0) { - yield return new KeyValuePair("Content-Md5", ContentMd5); + yield return new KeyValuePair(HeaderNames.ContentMD5, ContentMD5); } if (ContentRange.Count > 0) { - yield return new KeyValuePair("Content-Range", ContentRange); + yield return new KeyValuePair(HeaderNames.ContentRange, ContentRange); } if (ContentType.Count > 0) { - yield return new KeyValuePair("Content-Type", ContentType); + yield return new KeyValuePair(HeaderNames.ContentType, ContentType); } if (Cookie.Count > 0) { - yield return new KeyValuePair("Cookie", Cookie); + yield return new KeyValuePair(HeaderNames.Cookie, Cookie); } if (Date.Count > 0) { - yield return new KeyValuePair("Date", Date); + yield return new KeyValuePair(HeaderNames.Date, Date); } if (Expect.Count > 0) { - yield return new KeyValuePair("Expect", Expect); + yield return new KeyValuePair(HeaderNames.Expect, Expect); } if (Expires.Count > 0) { - yield return new KeyValuePair("Expires", Expires); + yield return new KeyValuePair(HeaderNames.Expires, Expires); } if (From.Count > 0) { - yield return new KeyValuePair("From", From); + yield return new KeyValuePair(HeaderNames.From, From); } if (Host.Count > 0) { - yield return new KeyValuePair("Host", Host); + yield return new KeyValuePair(HeaderNames.Host, Host); } if (IfMatch.Count > 0) { - yield return new KeyValuePair("If-Match", IfMatch); + yield return new KeyValuePair(HeaderNames.IfMatch, IfMatch); } if (IfModifiedSince.Count > 0) { - yield return new KeyValuePair("If-Modified-Since", IfModifiedSince); + yield return new KeyValuePair(HeaderNames.IfModifiedSince, IfModifiedSince); } if (IfNoneMatch.Count > 0) { - yield return new KeyValuePair("If-None-Match", IfNoneMatch); + yield return new KeyValuePair(HeaderNames.IfNoneMatch, IfNoneMatch); } if (IfRange.Count > 0) { - yield return new KeyValuePair("If-Range", IfRange); + yield return new KeyValuePair(HeaderNames.IfRange, IfRange); } if (IfUnmodifiedSince.Count > 0) { - yield return new KeyValuePair("If-Unmodified-Since", IfUnmodifiedSince); + yield return new KeyValuePair(HeaderNames.IfUnmodifiedSince, IfUnmodifiedSince); } if (KeepAlive.Count > 0) { - yield return new KeyValuePair("Keep-Alive", KeepAlive); + yield return new KeyValuePair(HeaderNames.KeepAlive, KeepAlive); } if (LastModified.Count > 0) { - yield return new KeyValuePair("Last-Modified", LastModified); + yield return new KeyValuePair(HeaderNames.LastModified, LastModified); } if (MaxForwards.Count > 0) { - yield return new KeyValuePair("Max-Forwards", MaxForwards); + yield return new KeyValuePair(HeaderNames.MaxForwards, MaxForwards); } if (Pragma.Count > 0) { - yield return new KeyValuePair("Pragma", Pragma); + yield return new KeyValuePair(HeaderNames.Pragma, Pragma); } if (ProxyAuthorization.Count > 0) { - yield return new KeyValuePair("Proxy-Authorization", ProxyAuthorization); + yield return new KeyValuePair(HeaderNames.ProxyAuthorization, ProxyAuthorization); } if (Range.Count > 0) { - yield return new KeyValuePair("Range", Range); + yield return new KeyValuePair(HeaderNames.Range, Range); } if (Referer.Count > 0) { - yield return new KeyValuePair("Referer", Referer); + yield return new KeyValuePair(HeaderNames.Referer, Referer); } - if (Te.Count > 0) + if (TE.Count > 0) { - yield return new KeyValuePair("Te", Te); + yield return new KeyValuePair(HeaderNames.TE, TE); } if (Trailer.Count > 0) { - yield return new KeyValuePair("Trailer", Trailer); + yield return new KeyValuePair(HeaderNames.Trailer, Trailer); } if (TransferEncoding.Count > 0) { - yield return new KeyValuePair("Transfer-Encoding", TransferEncoding); + yield return new KeyValuePair(HeaderNames.TransferEncoding, TransferEncoding); } if (Translate.Count > 0) { - yield return new KeyValuePair("Translate", Translate); + yield return new KeyValuePair(HeaderNames.Translate, Translate); } if (Upgrade.Count > 0) { - yield return new KeyValuePair("Upgrade", Upgrade); + yield return new KeyValuePair(HeaderNames.Upgrade, Upgrade); } if (UserAgent.Count > 0) { - yield return new KeyValuePair("User-Agent", UserAgent); + yield return new KeyValuePair(HeaderNames.UserAgent, UserAgent); } if (Via.Count > 0) { - yield return new KeyValuePair("Via", Via); + yield return new KeyValuePair(HeaderNames.Via, Via); } if (Warning.Count > 0) { - yield return new KeyValuePair("Warning", Warning); + yield return new KeyValuePair(HeaderNames.Warning, Warning); } } } diff --git a/src/Shared/HttpSys/RequestProcessing/RequestHeaders.cs b/src/Shared/HttpSys/RequestProcessing/RequestHeaders.cs index dda225cdd0f4..4540a2b62a7f 100644 --- a/src/Shared/HttpSys/RequestProcessing/RequestHeaders.cs +++ b/src/Shared/HttpSys/RequestProcessing/RequestHeaders.cs @@ -142,7 +142,7 @@ bool ICollection>.IsReadOnly get { long value; - var rawValue = this[HttpKnownHeaderNames.ContentLength]; + var rawValue = this[HeaderNames.ContentLength]; if (_contentLengthText.Equals(rawValue)) { @@ -171,12 +171,12 @@ bool ICollection>.IsReadOnly throw new ArgumentOutOfRangeException("value", value.Value, "Cannot be negative."); } _contentLengthText = HeaderUtilities.FormatNonNegativeInt64(value.Value); - this[HttpKnownHeaderNames.ContentLength] = _contentLengthText; + this[HeaderNames.ContentLength] = _contentLengthText; _contentLength = value; } else { - Remove(HttpKnownHeaderNames.ContentLength); + Remove(HeaderNames.ContentLength); _contentLengthText = StringValues.Empty; _contentLength = null; } diff --git a/src/Shared/RangeHelper/RangeHelper.cs b/src/Shared/RangeHelper/RangeHelper.cs index 0d13aba2ee55..90ba526e5f10 100644 --- a/src/Shared/RangeHelper/RangeHelper.cs +++ b/src/Shared/RangeHelper/RangeHelper.cs @@ -37,7 +37,7 @@ public static (bool isRangeRequest, RangeItemHeaderValue? range) ParseRange( long length, ILogger logger) { - var rawRangeHeader = context.Request.Headers[HeaderNames.Range]; + var rawRangeHeader = context.Request.Headers.Range; if (StringValues.IsNullOrEmpty(rawRangeHeader)) { logger.LogTrace("Range header's value is empty."); diff --git a/src/SignalR/clients/ts/FunctionalTests/Startup.cs b/src/SignalR/clients/ts/FunctionalTests/Startup.cs index ca5ce0fdab40..8df66d3b900e 100644 --- a/src/SignalR/clients/ts/FunctionalTests/Startup.cs +++ b/src/SignalR/clients/ts/FunctionalTests/Startup.cs @@ -118,23 +118,23 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILogger< // This is for testing purposes only (karma hosts the client on its own server), never do this in production app.Use((context, next) => { - var originHeader = context.Request.Headers[HeaderNames.Origin]; + var originHeader = context.Request.Headers.Origin; if (!StringValues.IsNullOrEmpty(originHeader)) { logger.LogInformation("Setting CORS headers."); - context.Response.Headers[HeaderNames.AccessControlAllowOrigin] = originHeader; - context.Response.Headers[HeaderNames.AccessControlAllowCredentials] = "true"; + context.Response.Headers.AccessControlAllowOrigin = originHeader; + context.Response.Headers.AccessControlAllowCredentials = "true"; - var requestMethod = context.Request.Headers[HeaderNames.AccessControlRequestMethod]; + var requestMethod = context.Request.Headers.AccessControlRequestMethod; if (!StringValues.IsNullOrEmpty(requestMethod)) { - context.Response.Headers[HeaderNames.AccessControlAllowMethods] = requestMethod; + context.Response.Headers.AccessControlAllowMethods = requestMethod; } - var requestHeaders = context.Request.Headers[HeaderNames.AccessControlRequestHeaders]; + var requestHeaders = context.Request.Headers.AccessControlRequestHeaders; if (!StringValues.IsNullOrEmpty(requestHeaders)) { - context.Response.Headers[HeaderNames.AccessControlAllowHeaders] = requestHeaders; + context.Response.Headers.AccessControlAllowHeaders = requestHeaders; } } diff --git a/src/SignalR/common/Http.Connections/src/Internal/Transports/ServerSentEventsServerTransport.cs b/src/SignalR/common/Http.Connections/src/Internal/Transports/ServerSentEventsServerTransport.cs index ffda642fa44a..9a342dd3fc6d 100644 --- a/src/SignalR/common/Http.Connections/src/Internal/Transports/ServerSentEventsServerTransport.cs +++ b/src/SignalR/common/Http.Connections/src/Internal/Transports/ServerSentEventsServerTransport.cs @@ -35,14 +35,14 @@ public ServerSentEventsServerTransport(PipeReader application, string connection public async Task ProcessRequestAsync(HttpContext context, CancellationToken token) { context.Response.ContentType = "text/event-stream"; - context.Response.Headers[HeaderNames.CacheControl] = "no-cache,no-store"; - context.Response.Headers[HeaderNames.Pragma] = "no-cache"; + context.Response.Headers.CacheControl = "no-cache,no-store"; + context.Response.Headers.Pragma = "no-cache"; // Make sure we disable all response buffering for SSE var bufferingFeature = context.Features.Get()!; bufferingFeature.DisableBuffering(); - context.Response.Headers[HeaderNames.ContentEncoding] = "identity"; + context.Response.Headers.ContentEncoding = "identity"; // Workaround for a Firefox bug where EventSource won't fire the open event // until it receives some data