Full Code of aspnet/BasicMiddleware for AI

master 87d4df52fa20 cached
283 files
814.0 KB
179.1k tokens
873 symbols
1 requests
Download .txt
Showing preview only (898K chars total). Download the full file or copy to clipboard to get everything.
Repository: aspnet/BasicMiddleware
Branch: master
Commit: 87d4df52fa20
Files: 283
Total size: 814.0 KB

Directory structure:
gitextract_jlb0z59u/

├── .appveyor.yml
├── .gitattributes
├── .gitignore
├── .travis.yml
├── .vsts-pipelines/
│   └── builds/
│       ├── ci-internal.yml
│       └── ci-public.yml
├── BasicMiddleware.sln
├── CONTRIBUTING.md
├── Directory.Build.props
├── Directory.Build.targets
├── LICENSE.txt
├── NuGet.config
├── NuGetPackageVerifier.json
├── README.md
├── benchmarks/
│   └── Microsoft.AspNetCore.ResponseCompression.Benchmarks/
│       ├── AssemblyInfo.cs
│       ├── Microsoft.AspNetCore.ResponseCompression.Benchmarks.csproj
│       └── ResponseCompressionProviderBenchmark.cs
├── build/
│   ├── Key.snk
│   ├── dependencies.props
│   ├── repo.props
│   └── sources.props
├── build.cmd
├── build.sh
├── korebuild-lock.txt
├── korebuild.json
├── run.cmd
├── run.ps1
├── run.sh
├── samples/
│   ├── HostFilteringSample/
│   │   ├── HostFilteringSample.csproj
│   │   ├── Program.cs
│   │   ├── Properties/
│   │   │   └── launchSettings.json
│   │   ├── Startup.cs
│   │   ├── appsettings.Development.json
│   │   ├── appsettings.Production.json
│   │   └── appsettings.json
│   ├── HttpOverridesSample/
│   │   ├── HttpOverridesSample.csproj
│   │   ├── Properties/
│   │   │   └── launchSettings.json
│   │   └── Startup.cs
│   ├── HttpsPolicySample/
│   │   ├── HttpsPolicySample.csproj
│   │   ├── Properties/
│   │   │   └── launchSettings.json
│   │   ├── Startup.cs
│   │   └── testCert.pfx
│   ├── ResponseBufferingSample/
│   │   ├── Properties/
│   │   │   └── launchSettings.json
│   │   ├── ResponseBufferingSample.csproj
│   │   └── Startup.cs
│   ├── ResponseCompressionSample/
│   │   ├── CustomCompressionProvider.cs
│   │   ├── LoremIpsum.cs
│   │   ├── Properties/
│   │   │   └── launchSettings.json
│   │   ├── ResponseCompressionSample.csproj
│   │   ├── Startup.cs
│   │   └── testfile1kb.txt
│   └── RewriteSample/
│       ├── Properties/
│       │   └── launchSettings.json
│       ├── Rewrite.txt
│       ├── RewriteSample.csproj
│       ├── Startup.cs
│       ├── UrlRewrite.xml
│       └── testCert.pfx
├── src/
│   ├── Directory.Build.props
│   ├── Microsoft.AspNetCore.Buffering/
│   │   ├── BufferingWriteStream.cs
│   │   ├── HttpBufferingFeature.cs
│   │   ├── Microsoft.AspNetCore.Buffering.csproj
│   │   ├── ResponseBufferingMiddleware.cs
│   │   ├── ResponseBufferingMiddlewareExtensions.cs
│   │   └── SendFileFeatureWrapper.cs
│   ├── Microsoft.AspNetCore.HostFiltering/
│   │   ├── HostFilteringBuilderExtensions.cs
│   │   ├── HostFilteringMiddleware.cs
│   │   ├── HostFilteringOptions.cs
│   │   ├── HostFilteringServicesExtensions.cs
│   │   ├── Microsoft.AspNetCore.HostFiltering.csproj
│   │   └── baseline.netcore.json
│   ├── Microsoft.AspNetCore.HttpOverrides/
│   │   ├── ForwardedHeaders.cs
│   │   ├── ForwardedHeadersDefaults.cs
│   │   ├── ForwardedHeadersExtensions.cs
│   │   ├── ForwardedHeadersMiddleware.cs
│   │   ├── ForwardedHeadersOptions.cs
│   │   ├── HttpMethodOverrideExtensions.cs
│   │   ├── HttpMethodOverrideMiddleware.cs
│   │   ├── HttpMethodOverrideOptions.cs
│   │   ├── IPNetwork.cs
│   │   ├── Internal/
│   │   │   └── IPEndPointParser.cs
│   │   ├── Microsoft.AspNetCore.HttpOverrides.csproj
│   │   ├── baseline.net45.json
│   │   └── baseline.netcore.json
│   ├── Microsoft.AspNetCore.HttpsPolicy/
│   │   ├── HstsBuilderExtensions.cs
│   │   ├── HstsMiddleware.cs
│   │   ├── HstsOptions.cs
│   │   ├── HstsServicesExtensions.cs
│   │   ├── HttpsRedirectionBuilderExtensions.cs
│   │   ├── HttpsRedirectionMiddleware.cs
│   │   ├── HttpsRedirectionOptions.cs
│   │   ├── HttpsRedirectionServicesExtensions.cs
│   │   ├── Microsoft.AspNetCore.HttpsPolicy.csproj
│   │   ├── baseline.netcore.json
│   │   └── internal/
│   │       ├── HstsLoggingExtensions.cs
│   │       └── HttpsLoggingExtensions.cs
│   ├── Microsoft.AspNetCore.ResponseCompression/
│   │   ├── BodyWrapperStream.cs
│   │   ├── BrotliCompressionProvider.cs
│   │   ├── BrotliCompressionProviderOptions.cs
│   │   ├── CompressionProviderCollection.cs
│   │   ├── CompressionProviderFactory.cs
│   │   ├── GzipCompressionProvider.cs
│   │   ├── GzipCompressionProviderOptions.cs
│   │   ├── ICompressionProvider.cs
│   │   ├── IResponseCompressionProvider.cs
│   │   ├── Microsoft.AspNetCore.ResponseCompression.csproj
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── ResponseCompressionBuilderExtensions.cs
│   │   ├── ResponseCompressionDefaults.cs
│   │   ├── ResponseCompressionMiddleware.cs
│   │   ├── ResponseCompressionOptions.cs
│   │   ├── ResponseCompressionProvider.cs
│   │   ├── ResponseCompressionServicesExtensions.cs
│   │   ├── baseline.netcore.json
│   │   ├── baseline.netframework.json
│   │   └── internal/
│   │       └── ResponseCompressionLoggingExtensions.cs
│   └── Microsoft.AspNetCore.Rewrite/
│       ├── ApacheModRewriteOptionsExtensions.cs
│       ├── Extensions/
│       │   └── RewriteMiddlewareLoggingExtensions.cs
│       ├── IISUrlRewriteOptionsExtensions.cs
│       ├── IRule.cs
│       ├── Internal/
│       │   ├── ApacheModRewrite/
│       │   │   ├── ApacheModRewriteRule.cs
│       │   │   ├── Condition.cs
│       │   │   ├── ConditionEvaluator.cs
│       │   │   ├── ConditionPatternParser.cs
│       │   │   ├── ConditionType.cs
│       │   │   ├── CookieActionFactory.cs
│       │   │   ├── FileParser.cs
│       │   │   ├── FlagParser.cs
│       │   │   ├── FlagType.cs
│       │   │   ├── Flags.cs
│       │   │   ├── OperationType.cs
│       │   │   ├── ParsedModRewriteCondition.cs
│       │   │   ├── RuleBuilder.cs
│       │   │   ├── RuleRegexParser.cs
│       │   │   ├── SegmentType.cs
│       │   │   ├── ServerVariables.cs
│       │   │   ├── TestStringParser.cs
│       │   │   └── Tokenizer.cs
│       │   ├── BackReferenceCollection.cs
│       │   ├── DelegateRule.cs
│       │   ├── IISUrlRewrite/
│       │   │   ├── ActionType.cs
│       │   │   ├── Condition.cs
│       │   │   ├── ConditionCollection.cs
│       │   │   ├── ConditionEvaluator.cs
│       │   │   ├── IISRewriteMap.cs
│       │   │   ├── IISRewriteMapCollection.cs
│       │   │   ├── IISUrlRewriteRule.cs
│       │   │   ├── InputParser.cs
│       │   │   ├── InvalidUrlRewriteFormatException.cs
│       │   │   ├── LogicalGrouping.cs
│       │   │   ├── MatchType.cs
│       │   │   ├── PatternSyntax.cs
│       │   │   ├── RedirectType.cs
│       │   │   ├── RewriteMapParser.cs
│       │   │   ├── RewriteTags.cs
│       │   │   ├── ServerVariables.cs
│       │   │   ├── UriMatchCondition.cs
│       │   │   ├── UriMatchPart.cs
│       │   │   ├── UrlRewriteFileParser.cs
│       │   │   └── UrlRewriteRuleBuilder.cs
│       │   ├── MatchResults.cs
│       │   ├── ParserContext.cs
│       │   ├── Pattern.cs
│       │   ├── PatternSegment.cs
│       │   ├── PatternSegments/
│       │   │   ├── ConditionMatchSegment.cs
│       │   │   ├── DateTimeSegment.cs
│       │   │   ├── HeaderSegment.cs
│       │   │   ├── IsHttpsModSegment.cs
│       │   │   ├── IsHttpsUrlSegment.cs
│       │   │   ├── IsIPV6Segment.cs
│       │   │   ├── LiteralSegment.cs
│       │   │   ├── LocalAddressSegment.cs
│       │   │   ├── LocalPortSegment.cs
│       │   │   ├── QueryStringSegment.cs
│       │   │   ├── RemoteAddressSegment.cs
│       │   │   ├── RemotePortSegment.cs
│       │   │   ├── RequestFilenameSegment.cs
│       │   │   ├── RequestMethodSegment.cs
│       │   │   ├── RewriteMapSegment.cs
│       │   │   ├── RuleMatchSegment.cs
│       │   │   ├── SchemeSegment.cs
│       │   │   ├── ServerProtocolSegment.cs
│       │   │   ├── ToLowerSegment.cs
│       │   │   ├── UrlEncodeSegment.cs
│       │   │   └── UrlSegment.cs
│       │   ├── RedirectRule.cs
│       │   ├── RedirectToHttpsRule.cs
│       │   ├── RedirectToWwwRule.cs
│       │   ├── RewriteRule.cs
│       │   ├── UrlAction.cs
│       │   ├── UrlActions/
│       │   │   ├── AbortAction.cs
│       │   │   ├── ChangeCookieAction.cs
│       │   │   ├── CustomResponseAction.cs
│       │   │   ├── ForbiddenAction.cs
│       │   │   ├── GoneAction.cs
│       │   │   ├── NoneAction.cs
│       │   │   ├── RedirectAction.cs
│       │   │   └── RewriteAction.cs
│       │   ├── UrlMatch.cs
│       │   └── UrlMatches/
│       │       ├── ExactMatch.cs
│       │       ├── FileSizeMatch.cs
│       │       ├── IntegerMatch.cs
│       │       ├── IntegerOperation.cs
│       │       ├── IsDirectoryMatch.cs
│       │       ├── IsFileMatch.cs
│       │       ├── RegexMatch.cs
│       │       ├── StringMatch.cs
│       │       └── StringOperation.cs
│       ├── Microsoft.AspNetCore.Rewrite.csproj
│       ├── Properties/
│       │   ├── AssemblyInfo.cs
│       │   └── Resources.Designer.cs
│       ├── Resources.resx
│       ├── RewriteBuilderExtensions.cs
│       ├── RewriteContext.cs
│       ├── RewriteMiddleware.cs
│       ├── RewriteOptions.cs
│       ├── RewriteOptionsExtensions.cs
│       ├── RuleResult.cs
│       └── baseline.netcore.json
├── test/
│   ├── Directory.Build.props
│   ├── Microsoft.AspNetCore.Buffering.Tests/
│   │   ├── Microsoft.AspNetCore.Buffering.Tests.csproj
│   │   └── ResponseBufferingMiddlewareTests.cs
│   ├── Microsoft.AspNetCore.HostFiltering.Tests/
│   │   ├── HostFilteringMiddlewareTests.cs
│   │   └── Microsoft.AspNetCore.HostFiltering.Tests.csproj
│   ├── Microsoft.AspNetCore.HttpOverrides.Tests/
│   │   ├── ForwardedHeadersMiddlewareTest.cs
│   │   ├── HttpMethodOverrideMiddlewareTest.cs
│   │   ├── IPEndPointParserTest.cs
│   │   ├── IPNetworkTest.cs
│   │   └── Microsoft.AspNetCore.HttpOverrides.Tests.csproj
│   ├── Microsoft.AspNetCore.HttpsPolicy.Tests/
│   │   ├── HstsMiddlewareTests.cs
│   │   ├── HttpsPolicyTests.cs
│   │   ├── HttpsRedirectionMiddlewareTests.cs
│   │   └── Microsoft.AspNetCore.HttpsPolicy.Tests.csproj
│   ├── Microsoft.AspNetCore.ResponseCompression.Tests/
│   │   ├── BodyWrapperStreamTests.cs
│   │   ├── Microsoft.AspNetCore.ResponseCompression.Tests.csproj
│   │   ├── ResponseCompressionMiddlewareTest.cs
│   │   └── testfile1kb.txt
│   └── Microsoft.AspNetCore.Rewrite.Tests/
│       ├── ApacheModRewrite/
│       │   ├── ConditionPatternParserTest.cs
│       │   ├── CookieActionFactoryTest.cs
│       │   ├── FlagParserTest.cs
│       │   ├── FormatExceptionTests.cs
│       │   ├── ModRewriteMiddlewareTest.cs
│       │   ├── RewriteTokenizerTest.cs
│       │   ├── RuleBuilderTest.cs
│       │   ├── RuleRegexParserTest.cs
│       │   └── TestStringParserTests.cs
│       ├── IISUrlRewrite/
│       │   ├── FileParserTests.cs
│       │   ├── FormatExceptionHandlingTests.cs
│       │   ├── InputParserTests.cs
│       │   ├── InvalidUrlRewriteFormatExceptionHandlingTests.cs
│       │   ├── MiddleWareTests.cs
│       │   ├── RewriteMapParserTests.cs
│       │   ├── ServerVariableTests.cs
│       │   └── UrlRewriteApplicationTests.cs
│       ├── Microsoft.AspNetCore.Rewrite.Tests.csproj
│       ├── MiddlewareTests.cs
│       ├── PatternSegments/
│       │   ├── ConditionMatchSegmentTests.cs
│       │   ├── DateTimeSegmentTests.cs
│       │   ├── HeaderSegmentTests.cs
│       │   ├── IsHttpsModSegmentTests.cs
│       │   ├── IsHttpsSegmentTests.cs
│       │   ├── IsIPV6SegmentTests.cs
│       │   ├── LIteralSegmentTests.cs
│       │   ├── LocalAddressSegmentTests.cs
│       │   ├── LocalPortSegmentTests.cs
│       │   ├── QueryStringSegmentTests.cs
│       │   ├── RemoteAddressSegmentTests.cs
│       │   ├── RemotePortSegmentTests.cs
│       │   ├── RequestFilenameSegmentTests.cs
│       │   ├── RequestMethodSegmentTests.cs
│       │   ├── RuleMatchSegmentTests.cs
│       │   ├── SchemeSegmentTests.cs
│       │   ├── ServerProtocolSegmentTests.cs
│       │   ├── ToLowerSegmentTests.cs
│       │   ├── UrlEncodeSegmentTests.cs
│       │   └── UrlSegmentTests.cs
│       ├── UrlActions/
│       │   ├── AbortActionTests.cs
│       │   ├── ChangeCookieActionTests.cs
│       │   ├── ForbiddenActionTests.cs
│       │   └── GoneActionTests.cs
│       └── UrlMatches/
│           ├── ExactMatchTests.cs
│           ├── IntegerMatchTests.cs
│           └── StringMatchTests.cs
└── version.props

================================================
FILE CONTENTS
================================================

================================================
FILE: .appveyor.yml
================================================
init:
- git config --global core.autocrlf true
branches:
  only:
  - master
  - /^release\/.*$/
  - /^(.*\/)?ci-.*$/
build_script:
- ps: .\run.ps1 default-build
clone_depth: 1
environment:
  global:
    DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
    DOTNET_CLI_TELEMETRY_OPTOUT: 1
test: 'off'
deploy: 'off'
os: Visual Studio 2017


================================================
FILE: .gitattributes
================================================
*.doc  diff=astextplain
*.DOC	diff=astextplain
*.docx	diff=astextplain
*.DOCX	diff=astextplain
*.dot	diff=astextplain
*.DOT	diff=astextplain
*.pdf	diff=astextplain
*.PDF	diff=astextplain
*.rtf	diff=astextplain
*.RTF	diff=astextplain

*.jpg  	binary
*.png 	binary
*.gif 	binary

*.cs text=auto diff=csharp 
*.vb text=auto
*.resx text=auto
*.c text=auto
*.cpp text=auto
*.cxx text=auto
*.h text=auto
*.hxx text=auto
*.py text=auto
*.rb text=auto
*.java text=auto
*.html text=auto
*.htm text=auto
*.css text=auto
*.scss text=auto
*.sass text=auto
*.less text=auto
*.js text=auto
*.lisp text=auto
*.clj text=auto
*.sql text=auto
*.php text=auto
*.lua text=auto
*.m text=auto
*.asm text=auto
*.erl text=auto
*.fs text=auto
*.fsx text=auto
*.hs text=auto

*.csproj text=auto
*.vbproj text=auto
*.fsproj text=auto
*.dbproj text=auto
*.sln text=auto eol=crlf
*.sh eol=lf

================================================
FILE: .gitignore
================================================
[Oo]bj/
[Bb]in/
TestResults/
.nuget/
*.sln.ide/
_ReSharper.*/
packages/
artifacts/
PublishProfiles/
*.user
*.suo
*.cache
*.docstates
_ReSharper.*
nuget.exe
project.lock.json
*net45.csproj
*net451.csproj
*k10.csproj
*.psess
*.vsp
*.pidb
*.userprefs
*DS_Store
*.ncrunchsolution
*.*sdf
*.ipch
.vs/
.build/
.testPublish/
.idea/
.vscode/
*.nuget.props
*.nuget.targets
global.json


================================================
FILE: .travis.yml
================================================
language: csharp
sudo: false
dist: trusty
env:
  global:
  - DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
  - DOTNET_CLI_TELEMETRY_OPTOUT: 1
mono: none
os:
- linux
- osx
osx_image: xcode8.2
addons:
  apt:
    packages:
    - libunwind8
branches:
  only:
  - master
  - /^release\/.*$/
  - /^(.*\/)?ci-.*$/
before_install:
- if test "$TRAVIS_OS_NAME" == "osx"; then brew update; brew install openssl; ln -s
  /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/lib/; ln -s /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
  /usr/local/lib/; fi
script:
- ./build.sh


================================================
FILE: .vsts-pipelines/builds/ci-internal.yml
================================================
trigger:
- master
- release/*

resources:
  repositories:
  - repository: buildtools
    type: git
    name: aspnet-BuildTools
    ref: refs/heads/master

phases:
- template: .vsts-pipelines/templates/project-ci.yml@buildtools


================================================
FILE: .vsts-pipelines/builds/ci-public.yml
================================================
trigger:
- master
- release/*

# See https://github.com/aspnet/BuildTools
resources:
  repositories:
  - repository: buildtools
    type: github
    endpoint: DotNet-Bot GitHub Connection
    name: aspnet/BuildTools
    ref: refs/heads/master

phases:
- template: .vsts-pipelines/templates/project-ci.yml@buildtools


================================================
FILE: BasicMiddleware.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27130.2027
MinimumVisualStudioVersion = 15.0.26730.03
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.HttpOverrides", "src\Microsoft.AspNetCore.HttpOverrides\Microsoft.AspNetCore.HttpOverrides.csproj", "{517308C3-B477-4B01-B461-CAB9C10B6928}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{A5076D28-FA7E-4606-9410-FEDD0D603527}"
	ProjectSection(SolutionItems) = preProject
		src\Directory.Build.props = src\Directory.Build.props
	EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{8437B0F3-3894-4828-A945-A9187F37631D}"
	ProjectSection(SolutionItems) = preProject
		test\Directory.Build.props = test\Directory.Build.props
	EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.HttpOverrides.Tests", "test\Microsoft.AspNetCore.HttpOverrides.Tests\Microsoft.AspNetCore.HttpOverrides.Tests.csproj", "{D6341B92-3416-4F11-8DF4-CB274296175F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Buffering", "src\Microsoft.AspNetCore.Buffering\Microsoft.AspNetCore.Buffering.csproj", "{2363D0DD-A3BF-437E-9B64-B33AE132D875}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Buffering.Tests", "test\Microsoft.AspNetCore.Buffering.Tests\Microsoft.AspNetCore.Buffering.Tests.csproj", "{F5F1D123-9C81-4A9E-8644-AA46B8E578FB}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{9587FE9F-5A17-42C4-8021-E87F59CECB98}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ResponseBufferingSample", "samples\ResponseBufferingSample\ResponseBufferingSample.csproj", "{E5C55B80-7827-40EB-B661-32B0E0E431CA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HttpOverridesSample", "samples\HttpOverridesSample\HttpOverridesSample.csproj", "{7F95478D-E1D4-4A64-BA42-B041591A96EB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Rewrite", "src\Microsoft.AspNetCore.Rewrite\Microsoft.AspNetCore.Rewrite.csproj", "{0E7CA1A7-1DC3-4CE6-B9C7-1688FE1410F1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RewriteSample", "samples\RewriteSample\RewriteSample.csproj", "{9E049645-13BC-4598-89E1-5B43D36E5D14}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Rewrite.Tests", "test\Microsoft.AspNetCore.Rewrite.Tests\Microsoft.AspNetCore.Rewrite.Tests.csproj", "{31794F9E-A1AA-4535-B03C-A3233737CD1A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ResponseCompression", "src\Microsoft.AspNetCore.ResponseCompression\Microsoft.AspNetCore.ResponseCompression.csproj", "{45308A9D-F4C6-46A8-A24F-E73D995CC223}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ResponseCompression.Tests", "test\Microsoft.AspNetCore.ResponseCompression.Tests\Microsoft.AspNetCore.ResponseCompression.Tests.csproj", "{3360A5D1-70C0-49EE-9051-04A6A6B836DC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ResponseCompressionSample", "samples\ResponseCompressionSample\ResponseCompressionSample.csproj", "{B2A3CE38-51B2-4486-982C-98C380AF140E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{59A9B64C-E9BE-409E-89A2-58D72E2918F5}"
	ProjectSection(SolutionItems) = preProject
		.appveyor.yml = .appveyor.yml
		.gitattributes = .gitattributes
		.gitignore = .gitignore
		.travis.yml = .travis.yml
		build.cmd = build.cmd
		build.ps1 = build.ps1
		build.sh = build.sh
		CONTRIBUTING.md = CONTRIBUTING.md
		Directory.Build.props = Directory.Build.props
		Directory.Build.targets = Directory.Build.targets
		LICENSE.txt = LICENSE.txt
		NuGet.config = NuGet.config
		NuGetPackageVerifier.json = NuGetPackageVerifier.json
		README.md = README.md
		version.xml = version.xml
	EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.HttpsPolicy", "src\Microsoft.AspNetCore.HttpsPolicy\Microsoft.AspNetCore.HttpsPolicy.csproj", "{4D39C29B-4EC8-497C-B411-922DA494D71B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HttpsPolicySample", "samples\HttpsPolicySample\HttpsPolicySample.csproj", "{AC424AEE-4883-49C6-945F-2FC916B8CA1C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.HttpsPolicy.Tests", "test\Microsoft.AspNetCore.HttpsPolicy.Tests\Microsoft.AspNetCore.HttpsPolicy.Tests.csproj", "{1C67B0F1-6E70-449E-A2F1-98B9D5C576CE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HostFilteringSample", "samples\HostFilteringSample\HostFilteringSample.csproj", "{368B00A2-992A-4B0E-9085-A8136A22922D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{5CEA6F31-A829-4A02-8CD5-EC3DDD4CC1EA}"
	ProjectSection(SolutionItems) = preProject
		build\dependencies.props = build\dependencies.props
		build\repo.props = build\repo.props
		build\sources.props = build\sources.props
	EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.HostFiltering.Tests", "test\Microsoft.AspNetCore.HostFiltering.Tests\Microsoft.AspNetCore.HostFiltering.Tests.csproj", "{4BC947ED-13B8-4BE6-82A4-96A48D86980B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.HostFiltering", "src\Microsoft.AspNetCore.HostFiltering\Microsoft.AspNetCore.HostFiltering.csproj", "{762F7276-C916-4111-A6C0-41668ABB3823}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "benchmarks", "benchmarks", "{C6DA6317-30FC-42FE-891C-64E75D88FF12}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.ResponseCompression.Benchmarks", "benchmarks\Microsoft.AspNetCore.ResponseCompression.Benchmarks\Microsoft.AspNetCore.ResponseCompression.Benchmarks.csproj", "{5AF10E85-5076-40B9-84CF-9830B585ABE5}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{517308C3-B477-4B01-B461-CAB9C10B6928}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{517308C3-B477-4B01-B461-CAB9C10B6928}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{517308C3-B477-4B01-B461-CAB9C10B6928}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{517308C3-B477-4B01-B461-CAB9C10B6928}.Release|Any CPU.Build.0 = Release|Any CPU
		{D6341B92-3416-4F11-8DF4-CB274296175F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{D6341B92-3416-4F11-8DF4-CB274296175F}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{D6341B92-3416-4F11-8DF4-CB274296175F}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{D6341B92-3416-4F11-8DF4-CB274296175F}.Release|Any CPU.Build.0 = Release|Any CPU
		{2363D0DD-A3BF-437E-9B64-B33AE132D875}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{2363D0DD-A3BF-437E-9B64-B33AE132D875}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{2363D0DD-A3BF-437E-9B64-B33AE132D875}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{2363D0DD-A3BF-437E-9B64-B33AE132D875}.Release|Any CPU.Build.0 = Release|Any CPU
		{F5F1D123-9C81-4A9E-8644-AA46B8E578FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{F5F1D123-9C81-4A9E-8644-AA46B8E578FB}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{F5F1D123-9C81-4A9E-8644-AA46B8E578FB}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{F5F1D123-9C81-4A9E-8644-AA46B8E578FB}.Release|Any CPU.Build.0 = Release|Any CPU
		{E5C55B80-7827-40EB-B661-32B0E0E431CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{E5C55B80-7827-40EB-B661-32B0E0E431CA}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{E5C55B80-7827-40EB-B661-32B0E0E431CA}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{E5C55B80-7827-40EB-B661-32B0E0E431CA}.Release|Any CPU.Build.0 = Release|Any CPU
		{7F95478D-E1D4-4A64-BA42-B041591A96EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{7F95478D-E1D4-4A64-BA42-B041591A96EB}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{7F95478D-E1D4-4A64-BA42-B041591A96EB}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{7F95478D-E1D4-4A64-BA42-B041591A96EB}.Release|Any CPU.Build.0 = Release|Any CPU
		{0E7CA1A7-1DC3-4CE6-B9C7-1688FE1410F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{0E7CA1A7-1DC3-4CE6-B9C7-1688FE1410F1}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{0E7CA1A7-1DC3-4CE6-B9C7-1688FE1410F1}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{0E7CA1A7-1DC3-4CE6-B9C7-1688FE1410F1}.Release|Any CPU.Build.0 = Release|Any CPU
		{9E049645-13BC-4598-89E1-5B43D36E5D14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{9E049645-13BC-4598-89E1-5B43D36E5D14}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{9E049645-13BC-4598-89E1-5B43D36E5D14}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{9E049645-13BC-4598-89E1-5B43D36E5D14}.Release|Any CPU.Build.0 = Release|Any CPU
		{31794F9E-A1AA-4535-B03C-A3233737CD1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{31794F9E-A1AA-4535-B03C-A3233737CD1A}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{31794F9E-A1AA-4535-B03C-A3233737CD1A}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{31794F9E-A1AA-4535-B03C-A3233737CD1A}.Release|Any CPU.Build.0 = Release|Any CPU
		{45308A9D-F4C6-46A8-A24F-E73D995CC223}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{45308A9D-F4C6-46A8-A24F-E73D995CC223}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{45308A9D-F4C6-46A8-A24F-E73D995CC223}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{45308A9D-F4C6-46A8-A24F-E73D995CC223}.Release|Any CPU.Build.0 = Release|Any CPU
		{3360A5D1-70C0-49EE-9051-04A6A6B836DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{3360A5D1-70C0-49EE-9051-04A6A6B836DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{3360A5D1-70C0-49EE-9051-04A6A6B836DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{3360A5D1-70C0-49EE-9051-04A6A6B836DC}.Release|Any CPU.Build.0 = Release|Any CPU
		{B2A3CE38-51B2-4486-982C-98C380AF140E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{B2A3CE38-51B2-4486-982C-98C380AF140E}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{B2A3CE38-51B2-4486-982C-98C380AF140E}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{B2A3CE38-51B2-4486-982C-98C380AF140E}.Release|Any CPU.Build.0 = Release|Any CPU
		{4D39C29B-4EC8-497C-B411-922DA494D71B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{4D39C29B-4EC8-497C-B411-922DA494D71B}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{4D39C29B-4EC8-497C-B411-922DA494D71B}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{4D39C29B-4EC8-497C-B411-922DA494D71B}.Release|Any CPU.Build.0 = Release|Any CPU
		{AC424AEE-4883-49C6-945F-2FC916B8CA1C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{AC424AEE-4883-49C6-945F-2FC916B8CA1C}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{AC424AEE-4883-49C6-945F-2FC916B8CA1C}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{AC424AEE-4883-49C6-945F-2FC916B8CA1C}.Release|Any CPU.Build.0 = Release|Any CPU
		{1C67B0F1-6E70-449E-A2F1-98B9D5C576CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{1C67B0F1-6E70-449E-A2F1-98B9D5C576CE}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{1C67B0F1-6E70-449E-A2F1-98B9D5C576CE}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{1C67B0F1-6E70-449E-A2F1-98B9D5C576CE}.Release|Any CPU.Build.0 = Release|Any CPU
		{368B00A2-992A-4B0E-9085-A8136A22922D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{368B00A2-992A-4B0E-9085-A8136A22922D}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{368B00A2-992A-4B0E-9085-A8136A22922D}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{368B00A2-992A-4B0E-9085-A8136A22922D}.Release|Any CPU.Build.0 = Release|Any CPU
		{4BC947ED-13B8-4BE6-82A4-96A48D86980B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{4BC947ED-13B8-4BE6-82A4-96A48D86980B}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{4BC947ED-13B8-4BE6-82A4-96A48D86980B}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{4BC947ED-13B8-4BE6-82A4-96A48D86980B}.Release|Any CPU.Build.0 = Release|Any CPU
		{762F7276-C916-4111-A6C0-41668ABB3823}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{762F7276-C916-4111-A6C0-41668ABB3823}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{762F7276-C916-4111-A6C0-41668ABB3823}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{762F7276-C916-4111-A6C0-41668ABB3823}.Release|Any CPU.Build.0 = Release|Any CPU
		{5AF10E85-5076-40B9-84CF-9830B585ABE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{5AF10E85-5076-40B9-84CF-9830B585ABE5}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{5AF10E85-5076-40B9-84CF-9830B585ABE5}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{5AF10E85-5076-40B9-84CF-9830B585ABE5}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(NestedProjects) = preSolution
		{517308C3-B477-4B01-B461-CAB9C10B6928} = {A5076D28-FA7E-4606-9410-FEDD0D603527}
		{D6341B92-3416-4F11-8DF4-CB274296175F} = {8437B0F3-3894-4828-A945-A9187F37631D}
		{2363D0DD-A3BF-437E-9B64-B33AE132D875} = {A5076D28-FA7E-4606-9410-FEDD0D603527}
		{F5F1D123-9C81-4A9E-8644-AA46B8E578FB} = {8437B0F3-3894-4828-A945-A9187F37631D}
		{E5C55B80-7827-40EB-B661-32B0E0E431CA} = {9587FE9F-5A17-42C4-8021-E87F59CECB98}
		{7F95478D-E1D4-4A64-BA42-B041591A96EB} = {9587FE9F-5A17-42C4-8021-E87F59CECB98}
		{0E7CA1A7-1DC3-4CE6-B9C7-1688FE1410F1} = {A5076D28-FA7E-4606-9410-FEDD0D603527}
		{9E049645-13BC-4598-89E1-5B43D36E5D14} = {9587FE9F-5A17-42C4-8021-E87F59CECB98}
		{31794F9E-A1AA-4535-B03C-A3233737CD1A} = {8437B0F3-3894-4828-A945-A9187F37631D}
		{45308A9D-F4C6-46A8-A24F-E73D995CC223} = {A5076D28-FA7E-4606-9410-FEDD0D603527}
		{3360A5D1-70C0-49EE-9051-04A6A6B836DC} = {8437B0F3-3894-4828-A945-A9187F37631D}
		{B2A3CE38-51B2-4486-982C-98C380AF140E} = {9587FE9F-5A17-42C4-8021-E87F59CECB98}
		{4D39C29B-4EC8-497C-B411-922DA494D71B} = {A5076D28-FA7E-4606-9410-FEDD0D603527}
		{AC424AEE-4883-49C6-945F-2FC916B8CA1C} = {9587FE9F-5A17-42C4-8021-E87F59CECB98}
		{1C67B0F1-6E70-449E-A2F1-98B9D5C576CE} = {8437B0F3-3894-4828-A945-A9187F37631D}
		{368B00A2-992A-4B0E-9085-A8136A22922D} = {9587FE9F-5A17-42C4-8021-E87F59CECB98}
		{5CEA6F31-A829-4A02-8CD5-EC3DDD4CC1EA} = {59A9B64C-E9BE-409E-89A2-58D72E2918F5}
		{4BC947ED-13B8-4BE6-82A4-96A48D86980B} = {8437B0F3-3894-4828-A945-A9187F37631D}
		{762F7276-C916-4111-A6C0-41668ABB3823} = {A5076D28-FA7E-4606-9410-FEDD0D603527}
		{5AF10E85-5076-40B9-84CF-9830B585ABE5} = {C6DA6317-30FC-42FE-891C-64E75D88FF12}
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {4518E9CE-3680-4E05-9259-B64EA7807158}
	EndGlobalSection
EndGlobal


================================================
FILE: CONTRIBUTING.md
================================================
Contributing
======

Information on contributing to this repo is in the [Contributing Guide](https://github.com/aspnet/Home/blob/master/CONTRIBUTING.md) in the Home repo.


================================================
FILE: Directory.Build.props
================================================
<Project>
  <Import
    Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), AspNetCoreSettings.props))\AspNetCoreSettings.props"
    Condition=" '$(CI)' != 'true' AND '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), AspNetCoreSettings.props))' != '' " />

  <Import Project="version.props" />
  <Import Project="build\dependencies.props" />
  <Import Project="build\sources.props" />

  <PropertyGroup>
    <Product>Microsoft ASP.NET Core</Product>
    <RepositoryUrl>https://github.com/aspnet/BasicMiddleware</RepositoryUrl>
    <RepositoryType>git</RepositoryType>
    <RepositoryRoot>$(MSBuildThisFileDirectory)</RepositoryRoot>
    <AssemblyOriginatorKeyFile>$(MSBuildThisFileDirectory)build\Key.snk</AssemblyOriginatorKeyFile>
    <SignAssembly>true</SignAssembly>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
  </PropertyGroup>

</Project>


================================================
FILE: Directory.Build.targets
================================================
<Project>
  <PropertyGroup>
    <RuntimeFrameworkVersion Condition=" '$(TargetFramework)' == 'netcoreapp2.1' ">$(MicrosoftNETCoreApp21PackageVersion)</RuntimeFrameworkVersion>
    <RuntimeFrameworkVersion Condition=" '$(TargetFramework)' == 'netcoreapp2.2' ">$(MicrosoftNETCoreApp22PackageVersion)</RuntimeFrameworkVersion>
    <NETStandardImplicitPackageVersion Condition=" '$(TargetFramework)' == 'netstandard2.0' ">$(NETStandardLibrary20PackageVersion)</NETStandardImplicitPackageVersion>
    <!-- aspnet/BuildTools#662 Don't police what version of NetCoreApp we use -->
    <NETCoreAppMaximumVersion>99.9</NETCoreAppMaximumVersion>
  </PropertyGroup>
</Project>


================================================
FILE: LICENSE.txt
================================================
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright (c) .NET Foundation and Contributors

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: NuGet.config
================================================
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <clear />
    <!-- Restore sources should be defined in build/sources.props. -->
  </packageSources>
</configuration>


================================================
FILE: NuGetPackageVerifier.json
================================================
{
    "Default": {
        "rules": [
            "DefaultCompositeRule"
        ]
    }
}

================================================
FILE: README.md
================================================
ASP.NET Core Basic Middleware Components [Archived]
===================================================

**This GitHub project has been archived.** Ongoing development on this project can be found in <https://github.com/aspnet/AspNetCore>.

This repo hosts a collection of basic middleware components for ASP.NET Core. This includes Buffering, HTTP Overrides, Response Compression, and URL Rewriting. 
The Rewrite middleware can import rules from IIS's UrlRewrite and Apache's mod_rewrite.

This project is part of ASP.NET Core. You can find samples, documentation and getting started instructions for ASP.NET Core at the [AspNetCore](https://github.com/aspnet/AspNetCore) repo.


================================================
FILE: benchmarks/Microsoft.AspNetCore.ResponseCompression.Benchmarks/AssemblyInfo.cs
================================================
// 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.

[assembly: BenchmarkDotNet.Attributes.AspNetCoreBenchmark]


================================================
FILE: benchmarks/Microsoft.AspNetCore.ResponseCompression.Benchmarks/Microsoft.AspNetCore.ResponseCompression.Benchmarks.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\..\src\Microsoft.AspNetCore.ResponseCompression\Microsoft.AspNetCore.ResponseCompression.csproj" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="BenchmarkDotNet" Version="$(BenchmarkDotNetPackageVersion)" />
    <PackageReference Include="Microsoft.AspNetCore.Http" Version="$(MicrosoftAspNetCoreHttpPackageVersion)" />
    <PackageReference Include="Microsoft.AspNetCore.BenchmarkRunner.Sources" Version="$(MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion)" />
    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="$(MicrosoftExtensionsDependencyInjectionPackageVersion)" />
  </ItemGroup>

</Project>


================================================
FILE: benchmarks/Microsoft.AspNetCore.ResponseCompression.Benchmarks/ResponseCompressionProviderBenchmark.cs
================================================
// 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.Collections.Generic;
using BenchmarkDotNet.Attributes;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Microsoft.Net.Http.Headers;

namespace Microsoft.AspNetCore.ResponseCompression.Benchmarks
{
    public class ResponseCompressionProviderBenchmark
    {
        [GlobalSetup]
        public void GlobalSetup()
        {
            var services = new ServiceCollection()
                .AddOptions()
                .AddResponseCompression()
                .BuildServiceProvider();

            var options = new ResponseCompressionOptions();

            Provider = new ResponseCompressionProvider(services, Options.Create(options));
        }

        [ParamsSource(nameof(EncodingStrings))]
        public string AcceptEncoding { get; set; }

        public static IEnumerable<string> EncodingStrings()
        {
            return new[]
            {
                "gzip;q=0.8, compress;q=0.6, br;q=0.4",
                "gzip, compress, br",
                "br, compress, gzip",
                "gzip, compress",
                "identity",
                "*"
            };
        }

        public ResponseCompressionProvider Provider { get; set; }

        [Benchmark]
        public ICompressionProvider GetCompressionProvider()
        {
            var context = new DefaultHttpContext();

            context.Request.Headers[HeaderNames.AcceptEncoding] = AcceptEncoding;

            return Provider.GetCompressionProvider(context);
        }
    }
}

================================================
FILE: build/dependencies.props
================================================
<Project>
  <PropertyGroup>
    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
  </PropertyGroup>
  <PropertyGroup Label="Package Versions">
    <BenchmarkDotNetPackageVersion>0.10.13</BenchmarkDotNetPackageVersion>
    <InternalAspNetCoreSdkPackageVersion>3.0.0-alpha1-20181011.3</InternalAspNetCoreSdkPackageVersion>
    <MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>3.0.0-alpha1-10605</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>
    <MicrosoftAspNetCoreHostingAbstractionsPackageVersion>3.0.0-alpha1-10605</MicrosoftAspNetCoreHostingAbstractionsPackageVersion>
    <MicrosoftAspNetCoreHttpAbstractionsPackageVersion>3.0.0-alpha1-10605</MicrosoftAspNetCoreHttpAbstractionsPackageVersion>
    <MicrosoftAspNetCoreHttpExtensionsPackageVersion>3.0.0-alpha1-10605</MicrosoftAspNetCoreHttpExtensionsPackageVersion>
    <MicrosoftAspNetCoreHttpPackageVersion>3.0.0-alpha1-10605</MicrosoftAspNetCoreHttpPackageVersion>
    <MicrosoftAspNetCoreServerKestrelCorePackageVersion>3.0.0-alpha1-10605</MicrosoftAspNetCoreServerKestrelCorePackageVersion>
    <MicrosoftAspNetCoreServerKestrelHttpsPackageVersion>3.0.0-alpha1-10605</MicrosoftAspNetCoreServerKestrelHttpsPackageVersion>
    <MicrosoftAspNetCoreServerKestrelPackageVersion>3.0.0-alpha1-10605</MicrosoftAspNetCoreServerKestrelPackageVersion>
    <MicrosoftAspNetCoreTestHostPackageVersion>3.0.0-alpha1-10605</MicrosoftAspNetCoreTestHostPackageVersion>
    <MicrosoftExtensionsConfigurationAbstractionsPackageVersion>3.0.0-alpha1-10605</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
    <MicrosoftExtensionsConfigurationBinderPackageVersion>3.0.0-alpha1-10605</MicrosoftExtensionsConfigurationBinderPackageVersion>
    <MicrosoftExtensionsConfigurationJsonPackageVersion>3.0.0-alpha1-10605</MicrosoftExtensionsConfigurationJsonPackageVersion>
    <MicrosoftExtensionsDependencyInjectionPackageVersion>3.0.0-alpha1-10605</MicrosoftExtensionsDependencyInjectionPackageVersion>
    <MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>3.0.0-alpha1-10605</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
    <MicrosoftExtensionsLoggingAbstractionsPackageVersion>3.0.0-alpha1-10605</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
    <MicrosoftExtensionsLoggingConsolePackageVersion>3.0.0-alpha1-10605</MicrosoftExtensionsLoggingConsolePackageVersion>
    <MicrosoftExtensionsLoggingTestingPackageVersion>3.0.0-alpha1-10605</MicrosoftExtensionsLoggingTestingPackageVersion>
    <MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>3.0.0-alpha1-10605</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
    <MicrosoftExtensionsOptionsPackageVersion>3.0.0-alpha1-10605</MicrosoftExtensionsOptionsPackageVersion>
    <MicrosoftNETCoreApp21PackageVersion>2.1.3</MicrosoftNETCoreApp21PackageVersion>
    <MicrosoftNETCoreApp22PackageVersion>2.2.0-preview2-26905-02</MicrosoftNETCoreApp22PackageVersion>
    <MicrosoftNetHttpHeadersPackageVersion>3.0.0-alpha1-10605</MicrosoftNetHttpHeadersPackageVersion>
    <MicrosoftNETTestSdkPackageVersion>15.6.1</MicrosoftNETTestSdkPackageVersion>
    <MoqPackageVersion>4.10.0</MoqPackageVersion>
    <NETStandardLibrary20PackageVersion>2.0.3</NETStandardLibrary20PackageVersion>
    <XunitAnalyzersPackageVersion>0.10.0</XunitAnalyzersPackageVersion>
    <XunitPackageVersion>2.3.1</XunitPackageVersion>
    <XunitRunnerVisualStudioPackageVersion>2.4.0</XunitRunnerVisualStudioPackageVersion>
  </PropertyGroup>
  <PropertyGroup Label="Package Versions: Pinned" />
  <Import Project="$(DotNetPackageVersionPropsPath)" Condition=" '$(DotNetPackageVersionPropsPath)' != '' " />
  <PropertyGroup Label="Package Versions: Pinned" />
</Project>


================================================
FILE: build/repo.props
================================================
<Project>
  <Import Project="dependencies.props" />

  <PropertyGroup>
    <!-- These properties are use by the automation that updates dependencies.props -->
    <LineupPackageId>Internal.AspNetCore.Universe.Lineup</LineupPackageId>
    <LineupPackageRestoreSource>https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json</LineupPackageRestoreSource>
  </PropertyGroup>

  <ItemGroup>
    <DotNetCoreRuntime Include="$(MicrosoftNETCoreApp22PackageVersion)" />
  </ItemGroup>
</Project>


================================================
FILE: build/sources.props
================================================
<Project>
  <Import Project="$(DotNetRestoreSourcePropsPath)" Condition="'$(DotNetRestoreSourcePropsPath)' != ''"/>

  <PropertyGroup Label="RestoreSources">
    <RestoreSources>$(DotNetRestoreSources)</RestoreSources>
    <RestoreSources Condition="'$(DotNetBuildOffline)' != 'true' AND '$(AspNetUniverseBuildOffline)' != 'true' ">
      $(RestoreSources);
      https://dotnet.myget.org/F/dotnet-core/api/v3/index.json;
      https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json;
      https://dotnet.myget.org/F/aspnetcore-tools/api/v3/index.json;
    </RestoreSources>
    <RestoreSources Condition="'$(DotNetBuildOffline)' != 'true'">
      $(RestoreSources);
      https://api.nuget.org/v3/index.json;
    </RestoreSources>
  </PropertyGroup>
</Project>


================================================
FILE: build.cmd
================================================
@ECHO OFF
PowerShell -NoProfile -NoLogo -ExecutionPolicy unrestricted -Command "[System.Threading.Thread]::CurrentThread.CurrentCulture = ''; [System.Threading.Thread]::CurrentThread.CurrentUICulture = '';& '%~dp0run.ps1' default-build %*; exit $LASTEXITCODE"


================================================
FILE: build.sh
================================================
#!/usr/bin/env bash

set -euo pipefail
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

# Call "sync" between "chmod" and execution to prevent "text file busy" error in Docker (aufs)
chmod +x "$DIR/run.sh"; sync
"$DIR/run.sh" default-build "$@"


================================================
FILE: korebuild-lock.txt
================================================
version:3.0.0-alpha1-20181011.3
commithash:e7569d931e994629267ab2646e9926140962b4ac


================================================
FILE: korebuild.json
================================================
{
  "$schema": "https://raw.githubusercontent.com/aspnet/BuildTools/master/tools/korebuild.schema.json",
  "channel": "master"
}


================================================
FILE: run.cmd
================================================
@ECHO OFF
PowerShell -NoProfile -NoLogo -ExecutionPolicy unrestricted -Command "[System.Threading.Thread]::CurrentThread.CurrentCulture = ''; [System.Threading.Thread]::CurrentThread.CurrentUICulture = '';& '%~dp0run.ps1' %*; exit $LASTEXITCODE"


================================================
FILE: run.ps1
================================================
#!/usr/bin/env powershell
#requires -version 4

<#
.SYNOPSIS
Executes KoreBuild commands.

.DESCRIPTION
Downloads korebuild if required. Then executes the KoreBuild command. To see available commands, execute with `-Command help`.

.PARAMETER Command
The KoreBuild command to run.

.PARAMETER Path
The folder to build. Defaults to the folder containing this script.

.PARAMETER Channel
The channel of KoreBuild to download. Overrides the value from the config file.

.PARAMETER DotNetHome
The directory where .NET Core tools will be stored.

.PARAMETER ToolsSource
The base url where build tools can be downloaded. Overrides the value from the config file.

.PARAMETER Update
Updates KoreBuild to the latest version even if a lock file is present.

.PARAMETER Reinstall
Re-installs KoreBuild

.PARAMETER ConfigFile
The path to the configuration file that stores values. Defaults to korebuild.json.

.PARAMETER ToolsSourceSuffix
The Suffix to append to the end of the ToolsSource. Useful for query strings in blob stores.

.PARAMETER CI
Sets up CI specific settings and variables.

.PARAMETER Arguments
Arguments to be passed to the command

.NOTES
This function will create a file $PSScriptRoot/korebuild-lock.txt. This lock file can be committed to source, but does not have to be.
When the lockfile is not present, KoreBuild will create one using latest available version from $Channel.

The $ConfigFile is expected to be an JSON file. It is optional, and the configuration values in it are optional as well. Any options set
in the file are overridden by command line parameters.

.EXAMPLE
Example config file:
```json
{
  "$schema": "https://raw.githubusercontent.com/aspnet/BuildTools/master/tools/korebuild.schema.json",
  "channel": "master",
  "toolsSource": "https://aspnetcore.blob.core.windows.net/buildtools"
}
```
#>
[CmdletBinding(PositionalBinding = $false)]
param(
    [Parameter(Mandatory = $true, Position = 0)]
    [string]$Command,
    [string]$Path = $PSScriptRoot,
    [Alias('c')]
    [string]$Channel,
    [Alias('d')]
    [string]$DotNetHome,
    [Alias('s')]
    [string]$ToolsSource,
    [Alias('u')]
    [switch]$Update,
    [switch]$Reinstall,
    [string]$ToolsSourceSuffix,
    [string]$ConfigFile = $null,
    [switch]$CI,
    [Parameter(ValueFromRemainingArguments = $true)]
    [string[]]$Arguments
)

Set-StrictMode -Version 2
$ErrorActionPreference = 'Stop'

#
# Functions
#

function Get-KoreBuild {

    $lockFile = Join-Path $Path 'korebuild-lock.txt'

    if (!(Test-Path $lockFile) -or $Update) {
        Get-RemoteFile "$ToolsSource/korebuild/channels/$Channel/latest.txt" $lockFile $ToolsSourceSuffix
    }

    $version = Get-Content $lockFile | Where-Object { $_ -like 'version:*' } | Select-Object -first 1
    if (!$version) {
        Write-Error "Failed to parse version from $lockFile. Expected a line that begins with 'version:'"
    }
    $version = $version.TrimStart('version:').Trim()
    $korebuildPath = Join-Paths $DotNetHome ('buildtools', 'korebuild', $version)

    if ($Reinstall -and (Test-Path $korebuildPath)) {
        Remove-Item -Force -Recurse $korebuildPath
    }

    if (!(Test-Path $korebuildPath)) {
        Write-Host -ForegroundColor Magenta "Downloading KoreBuild $version"
        New-Item -ItemType Directory -Path $korebuildPath | Out-Null
        $remotePath = "$ToolsSource/korebuild/artifacts/$version/korebuild.$version.zip"

        try {
            $tmpfile = Join-Path ([IO.Path]::GetTempPath()) "KoreBuild-$([guid]::NewGuid()).zip"
            Get-RemoteFile $remotePath $tmpfile $ToolsSourceSuffix
            if (Get-Command -Name 'Microsoft.PowerShell.Archive\Expand-Archive' -ErrorAction Ignore) {
                # Use built-in commands where possible as they are cross-plat compatible
                Microsoft.PowerShell.Archive\Expand-Archive -Path $tmpfile -DestinationPath $korebuildPath
            }
            else {
                # Fallback to old approach for old installations of PowerShell
                Add-Type -AssemblyName System.IO.Compression.FileSystem
                [System.IO.Compression.ZipFile]::ExtractToDirectory($tmpfile, $korebuildPath)
            }
        }
        catch {
            Remove-Item -Recurse -Force $korebuildPath -ErrorAction Ignore
            throw
        }
        finally {
            Remove-Item $tmpfile -ErrorAction Ignore
        }
    }

    return $korebuildPath
}

function Join-Paths([string]$path, [string[]]$childPaths) {
    $childPaths | ForEach-Object { $path = Join-Path $path $_ }
    return $path
}

function Get-RemoteFile([string]$RemotePath, [string]$LocalPath, [string]$RemoteSuffix) {
    if ($RemotePath -notlike 'http*') {
        Copy-Item $RemotePath $LocalPath
        return
    }

    $retries = 10
    while ($retries -gt 0) {
        $retries -= 1
        try {
            Invoke-WebRequest -UseBasicParsing -Uri $($RemotePath + $RemoteSuffix) -OutFile $LocalPath
            return
        }
        catch {
            Write-Verbose "Request failed. $retries retries remaining"
        }
    }

    Write-Error "Download failed: '$RemotePath'."
}

#
# Main
#

# Load configuration or set defaults

$Path = Resolve-Path $Path
if (!$ConfigFile) { $ConfigFile = Join-Path $Path 'korebuild.json' }

if (Test-Path $ConfigFile) {
    try {
        $config = Get-Content -Raw -Encoding UTF8 -Path $ConfigFile | ConvertFrom-Json
        if ($config) {
            if (!($Channel) -and (Get-Member -Name 'channel' -InputObject $config)) { [string] $Channel = $config.channel }
            if (!($ToolsSource) -and (Get-Member -Name 'toolsSource' -InputObject $config)) { [string] $ToolsSource = $config.toolsSource}
        }
    }
    catch {
        Write-Host -ForegroundColor Red $Error[0]
        Write-Error "$ConfigFile contains invalid JSON."
        exit 1
    }
}

if (!$DotNetHome) {
    $DotNetHome = if ($env:DOTNET_HOME) { $env:DOTNET_HOME } `
        elseif ($env:USERPROFILE) { Join-Path $env:USERPROFILE '.dotnet'} `
        elseif ($env:HOME) {Join-Path $env:HOME '.dotnet'}`
        else { Join-Path $PSScriptRoot '.dotnet'}
}

if (!$Channel) { $Channel = 'master' }
if (!$ToolsSource) { $ToolsSource = 'https://aspnetcore.blob.core.windows.net/buildtools' }

# Execute

$korebuildPath = Get-KoreBuild
Import-Module -Force -Scope Local (Join-Path $korebuildPath 'KoreBuild.psd1')

try {
    Set-KoreBuildSettings -ToolsSource $ToolsSource -DotNetHome $DotNetHome -RepoPath $Path -ConfigFile $ConfigFile -CI:$CI
    Invoke-KoreBuildCommand $Command @Arguments
}
finally {
    Remove-Module 'KoreBuild' -ErrorAction Ignore
}


================================================
FILE: run.sh
================================================
#!/usr/bin/env bash

set -euo pipefail

#
# variables
#

RESET="\033[0m"
RED="\033[0;31m"
YELLOW="\033[0;33m"
MAGENTA="\033[0;95m"
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
[ -z "${DOTNET_HOME:-}" ] && DOTNET_HOME="$HOME/.dotnet"
verbose=false
update=false
reinstall=false
repo_path="$DIR"
channel=''
tools_source=''
tools_source_suffix=''
ci=false

#
# Functions
#
__usage() {
    echo "Usage: $(basename "${BASH_SOURCE[0]}") command [options] [[--] <Arguments>...]"
    echo ""
    echo "Arguments:"
    echo "    command                The command to be run."
    echo "    <Arguments>...         Arguments passed to the command. Variable number of arguments allowed."
    echo ""
    echo "Options:"
    echo "    --verbose                                             Show verbose output."
    echo "    -c|--channel <CHANNEL>                                The channel of KoreBuild to download. Overrides the value from the config file.."
    echo "    --config-file <FILE>                                  The path to the configuration file that stores values. Defaults to korebuild.json."
    echo "    -d|--dotnet-home <DIR>                                The directory where .NET Core tools will be stored. Defaults to '\$DOTNET_HOME' or '\$HOME/.dotnet."
    echo "    --path <PATH>                                         The directory to build. Defaults to the directory containing the script."
    echo "    -s|--tools-source|-ToolsSource <URL>                  The base url where build tools can be downloaded. Overrides the value from the config file."
    echo "    --tools-source-suffix|-ToolsSourceSuffix <SUFFIX>     The suffix to append to tools-source. Useful for query strings."
    echo "    -u|--update                                           Update to the latest KoreBuild even if the lock file is present."
    echo "    --reinstall                                           Reinstall KoreBuild."
    echo "    --ci                                                  Apply CI specific settings and environment variables."
    echo ""
    echo "Description:"
    echo "    This function will create a file \$DIR/korebuild-lock.txt. This lock file can be committed to source, but does not have to be."
    echo "    When the lockfile is not present, KoreBuild will create one using latest available version from \$channel."

    if [[ "${1:-}" != '--no-exit' ]]; then
        exit 2
    fi
}

get_korebuild() {
    local version
    local lock_file="$repo_path/korebuild-lock.txt"
    if [ ! -f "$lock_file" ] || [ "$update" = true ]; then
        __get_remote_file "$tools_source/korebuild/channels/$channel/latest.txt" "$lock_file" "$tools_source_suffix"
    fi
    version="$(grep 'version:*' -m 1 "$lock_file")"
    if [[ "$version" == '' ]]; then
        __error "Failed to parse version from $lock_file. Expected a line that begins with 'version:'"
        return 1
    fi
    version="$(echo "${version#version:}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
    local korebuild_path="$DOTNET_HOME/buildtools/korebuild/$version"

    if [ "$reinstall" = true ] && [ -d "$korebuild_path" ]; then
        rm -rf "$korebuild_path"
    fi

    {
        if [ ! -d "$korebuild_path" ]; then
            mkdir -p "$korebuild_path"
            local remote_path="$tools_source/korebuild/artifacts/$version/korebuild.$version.zip"
            tmpfile="$(mktemp)"
            echo -e "${MAGENTA}Downloading KoreBuild ${version}${RESET}"
            if __get_remote_file "$remote_path" "$tmpfile" "$tools_source_suffix"; then
                unzip -q -d "$korebuild_path" "$tmpfile"
            fi
            rm "$tmpfile" || true
        fi

        source "$korebuild_path/KoreBuild.sh"
    } || {
        if [ -d "$korebuild_path" ]; then
            echo "Cleaning up after failed installation"
            rm -rf "$korebuild_path" || true
        fi
        return 1
    }
}

__error() {
    echo -e "${RED}error: $*${RESET}" 1>&2
}

__warn() {
    echo -e "${YELLOW}warning: $*${RESET}"
}

__machine_has() {
    hash "$1" > /dev/null 2>&1
    return $?
}

__get_remote_file() {
    local remote_path=$1
    local local_path=$2
    local remote_path_suffix=$3

    if [[ "$remote_path" != 'http'* ]]; then
        cp "$remote_path" "$local_path"
        return 0
    fi

    local failed=false
    if __machine_has wget; then
        wget --tries 10 --quiet -O "$local_path" "${remote_path}${remote_path_suffix}" || failed=true
    else
        failed=true
    fi

    if [ "$failed" = true ] && __machine_has curl; then
        failed=false
        curl --retry 10 -sSL -f --create-dirs -o "$local_path" "${remote_path}${remote_path_suffix}" || failed=true
    fi

    if [ "$failed" = true ]; then
        __error "Download failed: $remote_path" 1>&2
        return 1
    fi
}

#
# main
#

command="${1:-}"
shift

while [[ $# -gt 0 ]]; do
    case $1 in
        -\?|-h|--help)
            __usage --no-exit
            exit 0
            ;;
        -c|--channel|-Channel)
            shift
            channel="${1:-}"
            [ -z "$channel" ] && __usage
            ;;
        --config-file|-ConfigFile)
            shift
            config_file="${1:-}"
            [ -z "$config_file" ] && __usage
            if [ ! -f "$config_file" ]; then
                __error "Invalid value for --config-file. $config_file does not exist."
                exit 1
            fi
            ;;
        -d|--dotnet-home|-DotNetHome)
            shift
            DOTNET_HOME="${1:-}"
            [ -z "$DOTNET_HOME" ] && __usage
            ;;
        --path|-Path)
            shift
            repo_path="${1:-}"
            [ -z "$repo_path" ] && __usage
            ;;
        -s|--tools-source|-ToolsSource)
            shift
            tools_source="${1:-}"
            [ -z "$tools_source" ] && __usage
            ;;
        --tools-source-suffix|-ToolsSourceSuffix)
            shift
            tools_source_suffix="${1:-}"
            [ -z "$tools_source_suffix" ] && __usage
            ;;
        -u|--update|-Update)
            update=true
            ;;
        --reinstall|-[Rr]einstall)
            reinstall=true
            ;;
        --ci|-[Cc][Ii])
            ci=true
            ;;
        --verbose|-Verbose)
            verbose=true
            ;;
        --)
            shift
            break
            ;;
        *)
            break
            ;;
    esac
    shift
done

if ! __machine_has unzip; then
    __error 'Missing required command: unzip'
    exit 1
fi

if ! __machine_has curl && ! __machine_has wget; then
    __error 'Missing required command. Either wget or curl is required.'
    exit 1
fi

[ -z "${config_file:-}" ] && config_file="$repo_path/korebuild.json"
if [ -f "$config_file" ]; then
    if __machine_has jq ; then
        if jq '.' "$config_file" >/dev/null ; then
            config_channel="$(jq -r 'select(.channel!=null) | .channel' "$config_file")"
            config_tools_source="$(jq -r 'select(.toolsSource!=null) | .toolsSource' "$config_file")"
        else
            __error "$config_file contains invalid JSON."
            exit 1
        fi
    elif __machine_has python ; then
        if python -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'))" >/dev/null ; then
            config_channel="$(python -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['channel'] if 'channel' in obj else '')")"
            config_tools_source="$(python -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['toolsSource'] if 'toolsSource' in obj else '')")"
        else
            __error "$config_file contains invalid JSON."
            exit 1
        fi
    elif __machine_has python3 ; then
        if python3 -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'))" >/dev/null ; then
            config_channel="$(python3 -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['channel'] if 'channel' in obj else '')")"
            config_tools_source="$(python3 -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['toolsSource'] if 'toolsSource' in obj else '')")"
        else
            __error "$config_file contains invalid JSON."
            exit 1
        fi
    else
        __error 'Missing required command: jq or python. Could not parse the JSON file.'
        exit 1
    fi

    [ ! -z "${config_channel:-}" ] && channel="$config_channel"
    [ ! -z "${config_tools_source:-}" ] && tools_source="$config_tools_source"
fi

[ -z "$channel" ] && channel='master'
[ -z "$tools_source" ] && tools_source='https://aspnetcore.blob.core.windows.net/buildtools'

get_korebuild
set_korebuildsettings "$tools_source" "$DOTNET_HOME" "$repo_path" "$config_file" "$ci"
invoke_korebuild_command "$command" "$@"


================================================
FILE: samples/HostFilteringSample/HostFilteringSample.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFrameworks>netcoreapp2.2;net461</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\..\src\Microsoft.AspNetCore.HostFiltering\Microsoft.AspNetCore.HostFiltering.csproj" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="$(MicrosoftAspNetCoreServerKestrelPackageVersion)" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="$(MicrosoftExtensionsConfigurationJsonPackageVersion)" />
    <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="$(MicrosoftExtensionsLoggingConsolePackageVersion)" />
  </ItemGroup>

  <ItemGroup>
    <Content Update="appsettings.Development.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Update="appsettings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Update="appsettings.Production.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>

</Project>


================================================
FILE: samples/HostFilteringSample/Program.cs
================================================
// 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.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;

namespace HostFilteringSample
{
    public class Program
    {
        public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }

        public static IWebHost BuildWebHost(string[] args)
        {
            var hostBuilder = new WebHostBuilder()
                .ConfigureLogging((_, factory) =>
                {
                    factory.SetMinimumLevel(LogLevel.Debug);
                    factory.AddConsole();
                })
                .ConfigureAppConfiguration((hostingContext, config) =>
                {
                    var env = hostingContext.HostingEnvironment;
                    config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                          .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
                })
                .UseKestrel()
                .UseStartup<Startup>();

            return hostBuilder.Build();
        }
    }
}


================================================
FILE: samples/HostFilteringSample/Properties/launchSettings.json
================================================
{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:14124/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "HostFilteringSample": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:14125/"
    }
  }
}

================================================
FILE: samples/HostFilteringSample/Startup.cs
================================================
// 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.Collections.Generic;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.HostFiltering;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;

namespace HostFilteringSample
{
    public class Startup
    {
        public IConfiguration Config { get; }

        public Startup(IConfiguration config)
        {
            Config = config;
        }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddHostFiltering(options =>
            {

            });

            // Fallback
            services.PostConfigure<HostFilteringOptions>(options =>
            {
                if (options.AllowedHosts == null || options.AllowedHosts.Count == 0)
                {
                    // "AllowedHosts": "localhost;127.0.0.1;[::1]"
                    var hosts = Config["AllowedHosts"]?.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                    // Fall back to "*" to disable.
                    options.AllowedHosts = (hosts?.Length > 0 ? hosts : new[] { "*" });
                }
            });
            // Change notification
            services.AddSingleton<IOptionsChangeTokenSource<HostFilteringOptions>>(new ConfigurationChangeTokenSource<HostFilteringOptions>(Config));
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            app.UseHostFiltering();

            app.Run(context =>
            {
                return context.Response.WriteAsync("Hello World! " + context.Request.Host);
            });
        }
    }
}


================================================
FILE: samples/HostFilteringSample/appsettings.Development.json
================================================
{
  "AllowedHosts": "localhost;127.0.0.1;[::1]"
}


================================================
FILE: samples/HostFilteringSample/appsettings.Production.json
================================================
{
  "AllowedHosts": "example.com;localhost"
}


================================================
FILE: samples/HostFilteringSample/appsettings.json
================================================
{

}

================================================
FILE: samples/HttpOverridesSample/HttpOverridesSample.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFrameworks>netcoreapp2.2;net461</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\..\src\Microsoft.AspNetCore.HttpOverrides\Microsoft.AspNetCore.HttpOverrides.csproj" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="$(MicrosoftAspNetCoreServerKestrelPackageVersion)" />
  </ItemGroup>

</Project>


================================================
FILE: samples/HttpOverridesSample/Properties/launchSettings.json
================================================
{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:1658/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "web": {
      "commandName": "web",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

================================================
FILE: samples/HttpOverridesSample/Startup.cs
================================================
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.HttpOverrides;

namespace HttpOverridesSample
{
    public class Startup
    {
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app)
        {
            app.UseForwardedHeaders(new ForwardedHeadersOptions
            {
                ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
            });
            app.UseHttpMethodOverride();

            app.Run(async (context) =>
            {
                foreach (var header in context.Request.Headers)
                {
                    await context.Response.WriteAsync($"{header.Key}: {header.Value}\r\n");
                }
                await context.Response.WriteAsync($"Method: {context.Request.Method}\r\n");
                await context.Response.WriteAsync($"Scheme: {context.Request.Scheme}\r\n");
                await context.Response.WriteAsync($"RemoteIP: {context.Connection.RemoteIpAddress}\r\n");
                await context.Response.WriteAsync($"RemotePort: {context.Connection.RemotePort}\r\n");
            });
        }

        // Entry point for the application.
        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel()
                // .UseIIS() // This repo can no longer reference IIS because IISIntegration depends on it.
                .UseStartup<Startup>()
                .Build();

            host.Run();
        }
    }
}



================================================
FILE: samples/HttpsPolicySample/HttpsPolicySample.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFrameworks>net461;netcoreapp2.2</TargetFrameworks>
    <TargetFrameworks Condition=" '$(OS)' != 'Windows_NT' ">netcoreapp2.2</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="$(MicrosoftAspNetCoreServerKestrelPackageVersion)" />
    <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel.Https" Version="$(MicrosoftAspNetCoreServerKestrelHttpsPackageVersion)" />
    <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="$(MicrosoftExtensionsLoggingConsolePackageVersion)" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\..\src\Microsoft.AspNetCore.HttpsPolicy\Microsoft.AspNetCore.HttpsPolicy.csproj" />
  </ItemGroup>

</Project>


================================================
FILE: samples/HttpsPolicySample/Properties/launchSettings.json
================================================
{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:31894/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "HttpsSample": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:5000/"
    }
  }
}

================================================
FILE: samples/HttpsPolicySample/Startup.cs
================================================
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

namespace HttpsSample
{
    public class Startup
    {
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddHttpsRedirection(options =>
            {
                options.RedirectStatusCode = StatusCodes.Status301MovedPermanently;
                options.HttpsPort = 5001;
            });

            services.AddHsts(options =>
            {
                options.MaxAge = TimeSpan.FromDays(30);
                options.Preload = true;
                options.IncludeSubDomains = true;
            });
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment environment)
        {
            if (!environment.IsDevelopment())
            {
                app.UseHsts();
            }
            app.UseHttpsRedirection();

            app.Run(async context =>
            {
                await context.Response.WriteAsync("Hello world!");
            });
        }

        // Entry point for the application.
        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel(
                options =>
                {
                    options.Listen(new IPEndPoint(IPAddress.Loopback, 5001), listenOptions =>
                    {
                        listenOptions.UseHttps("testCert.pfx", "testPassword");
                    });
                    options.Listen(new IPEndPoint(IPAddress.Loopback, 5000), listenOptions =>
                    {
                    });
                })
                .UseContentRoot(Directory.GetCurrentDirectory()) // for the cert file
                .ConfigureLogging(factory =>
                {
                    factory.SetMinimumLevel(LogLevel.Debug);
                    factory.AddConsole();
                })
                .UseStartup<Startup>()
                .Build();

            host.Run();
        }
    }
}


================================================
FILE: samples/ResponseBufferingSample/Properties/launchSettings.json
================================================
{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:49657/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNET_ENV": "Development"
      }
    },
    "web": {
      "commandName": "web",
      "environmentVariables": {
        "Hosting:Environment": "Development"
      }
    }
  }
}

================================================
FILE: samples/ResponseBufferingSample/ResponseBufferingSample.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFrameworks>netcoreapp2.2;net461</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\..\src\Microsoft.AspNetCore.Buffering\Microsoft.AspNetCore.Buffering.csproj" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="$(MicrosoftAspNetCoreServerKestrelPackageVersion)" />
  </ItemGroup>

</Project>


================================================
FILE: samples/ResponseBufferingSample/Startup.cs
================================================
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;

namespace ResponseBufferingSample
{
    public class Startup
    {
        // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
        }

        public void Configure(IApplicationBuilder app)
        {
            app.UseResponseBuffering();
            app.Run(async (context) =>
            {
                // Write some stuff
                context.Response.ContentType = "text/other";
                await context.Response.WriteAsync("Hello World!");

                // ... more work ...

                // Something went wrong and we want to replace the response
                context.Response.StatusCode = 200;
                context.Response.Headers.Clear();
                context.Response.Body.SetLength(0);

                // Try again
                context.Response.ContentType = "text/plain";
                await context.Response.WriteAsync("Hi Bob!");
            });
        }

        // Entry point for the application.
        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel()
                // .UseIIS() // This repo can no longer reference IIS because IISIntegration depends on it.
                .UseStartup<Startup>()
                .Build();

            host.Run();
        }
    }
}



================================================
FILE: samples/ResponseCompressionSample/CustomCompressionProvider.cs
================================================
using System.IO;
using Microsoft.AspNetCore.ResponseCompression;

namespace ResponseCompressionSample
{
    public class CustomCompressionProvider : ICompressionProvider
    {
        public string EncodingName => "custom";

        public bool SupportsFlush => true;

        public Stream CreateStream(Stream outputStream)
        {
            // Create a custom compression stream wrapper here
            return outputStream;
        }
    }
}


================================================
FILE: samples/ResponseCompressionSample/LoremIpsum.cs
================================================
// 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 ResponseCompressionSample
{
    internal static class LoremIpsum
    {
        internal const string Text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit." +
            "Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar.Nulla sollicitudin.Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula.Pellentesque rhoncus nunc et augue.Integer id felis.Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas.Lorem ipsum dolor sit amet, consectetuer adipiscing elit.Morbi vel erat non mauris convallis vehicula.Nulla et sapien.Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam.Mauris ullamcorper felis vitae erat.Proin feugiat, augue non elementum posuere, metus purus iaculis lectus, et tristique ligula justo vitae magna." +
            "Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Fusce vulputate sem at sapien.Vivamus leo. Aliquam euismod libero eu enim.Nulla nec felis sed leo placerat imperdiet.Aenean suscipit nulla in justo.Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, et ultricies lacus lorem varius purus. Curabitur eu amet.";
    }
}


================================================
FILE: samples/ResponseCompressionSample/Properties/launchSettings.json
================================================
{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:6164/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "ResponseCompressionSample": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "http://localhost:5000/",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

================================================
FILE: samples/ResponseCompressionSample/ResponseCompressionSample.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFrameworks>netcoreapp2.2;net461</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup>
    <Content Update="testfile1kb.txt" CopyToOutputDirectory="PreserveNewest" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\..\src\Microsoft.AspNetCore.ResponseCompression\Microsoft.AspNetCore.ResponseCompression.csproj" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="$(MicrosoftAspNetCoreServerKestrelPackageVersion)" />
    <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="$(MicrosoftExtensionsLoggingConsolePackageVersion)" />
  </ItemGroup>

</Project>


================================================
FILE: samples/ResponseCompressionSample/Startup.cs
================================================
// 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.IO.Compression;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.ResponseCompression;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

namespace ResponseCompressionSample
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<GzipCompressionProviderOptions>(options => options.Level = CompressionLevel.Fastest);
            services.AddResponseCompression(options =>
            {
                options.Providers.Add<GzipCompressionProvider>();
                options.Providers.Add<CustomCompressionProvider>();
                // .Append(TItem) is only available on Core.
                options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(new[] { "image/svg+xml" });

                ////Example of using excluded and wildcard MIME types:
                ////Compress all MIME types except various media types, but do compress SVG images.
                //options.MimeTypes = new[] { "*/*", "image/svg+xml" };
                //options.ExcludedMimeTypes = new[] { "image/*", "audio/*", "video/*" };
            });
        }

        public void Configure(IApplicationBuilder app)
        {
            app.UseResponseCompression();

            app.Map("/testfile1kb.txt", fileApp =>
            {
                fileApp.Run(context =>
                {
                    context.Response.ContentType = "text/plain";
                    return context.Response.SendFileAsync("testfile1kb.txt");
                });
            });

            app.Map("/trickle", trickleApp =>
            {
                trickleApp.Run(async context =>
                {
                    context.Response.ContentType = "text/plain";
                    // Disables compression on net451 because that GZipStream does not implement Flush.
                    context.Features.Get<IHttpBufferingFeature>()?.DisableResponseBuffering();

                    for (int i = 0; i < 100; i++)
                    {
                        await context.Response.WriteAsync("a");
                        await context.Response.Body.FlushAsync();
                        await Task.Delay(TimeSpan.FromSeconds(1));
                    }
                });
            });

            app.Run(async context =>
            {
                context.Response.ContentType = "text/plain";
                await context.Response.WriteAsync(LoremIpsum.Text);
            });
        }

        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel()
                .ConfigureLogging(factory =>
                {
                    factory.AddConsole()
                        .SetMinimumLevel(LogLevel.Debug);
                })
                .UseStartup<Startup>()
                .Build();

            host.Run();
        }
    }
}


================================================
FILE: samples/ResponseCompressionSample/testfile1kb.txt
================================================
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

================================================
FILE: samples/RewriteSample/Properties/launchSettings.json
================================================
{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:6156/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "RewriteSample": {
      "commandName": "Project"
    }
  }
}

================================================
FILE: samples/RewriteSample/Rewrite.txt
================================================
# Rewrite path with additional sub directory
RewriteCond %{HTTP_HOST}   !^www\.example\.com [NC,OR]
RewriteCond %{SERVER_PORT} !^5000$
RewriteRule ^/(.*)         http://www.example.com/$1 [L,R=302]

================================================
FILE: samples/RewriteSample/RewriteSample.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFrameworks>netcoreapp2.2;net461</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\..\src\Microsoft.AspNetCore.Rewrite\Microsoft.AspNetCore.Rewrite.csproj" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="$(MicrosoftAspNetCoreServerKestrelPackageVersion)" />
    <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel.Https" Version="$(MicrosoftAspNetCoreServerKestrelHttpsPackageVersion)" />
  </ItemGroup>

</Project>


================================================
FILE: samples/RewriteSample/Startup.cs
================================================
// 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.IO;
using System.Net;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Rewrite;
using Microsoft.Extensions.DependencyInjection;

namespace RewriteSample
{
    public class Startup
    {
        public Startup(IHostingEnvironment environment)
        {
            Environment = environment;
        }

        public IHostingEnvironment Environment { get; private set; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<RewriteOptions>(options =>
            {
                options.AddRedirect("(.*)/$", "$1")
                       .AddRewrite(@"app/(\d+)", "app?id=$1", skipRemainingRules: false)
                       .AddRedirectToHttps(302, 5001)
                       .AddIISUrlRewrite(Environment.ContentRootFileProvider, "UrlRewrite.xml")
                       .AddApacheModRewrite(Environment.ContentRootFileProvider, "Rewrite.txt");
            });
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            app.UseRewriter();

            app.Run(context =>
            {
                return context.Response.WriteAsync($"Rewritten Url: {context.Request.Path + context.Request.QueryString}");
            });
        }

        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel(options =>
                {
                    options.Listen(IPAddress.Loopback, 5000);
                    options.Listen(IPAddress.Loopback, 5001, listenOptions =>
                    {
                        // Configure SSL
                        listenOptions.UseHttps("testCert.pfx", "testPassword");
                    });
                })
                .UseStartup<Startup>()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .Build();

            host.Run();
        }
    }
}


================================================
FILE: samples/RewriteSample/UrlRewrite.xml
================================================
<rewrite>
  <rules>
    <rule name="Rewrite 20 to 10" stopProcessing="true">
      <match url="^app$" />
      <conditions>
        <add input="{QUERY_STRING}" pattern="id=20" />
      </conditions>
      <action type="Rewrite" url="app?id=10" appendQueryString="false"/>
    </rule>
  </rules>
</rewrite>

================================================
FILE: src/Directory.Build.props
================================================
<Project>
  <Import Project="..\Directory.Build.props" />

  <ItemGroup>
    <PackageReference Include="Internal.AspNetCore.Sdk" PrivateAssets="All" Version="$(InternalAspNetCoreSdkPackageVersion)" />
  </ItemGroup>
</Project>


================================================
FILE: src/Microsoft.AspNetCore.Buffering/BufferingWriteStream.cs
================================================
// 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.IO;
using System.Threading;
using System.Threading.Tasks;

namespace Microsoft.AspNetCore.Buffering
{
    internal class BufferingWriteStream : Stream
    {
        private readonly Stream _innerStream;
        private readonly MemoryStream _buffer = new MemoryStream();
        private bool _isBuffering = true;

        public BufferingWriteStream(Stream innerStream)
        {
            _innerStream = innerStream;
        }

        public override bool CanRead
        {
            get { return false; }
        }

        public override bool CanSeek
        {
            get { return _isBuffering; }
        }

        public override bool CanWrite
        {
            get { return _innerStream.CanWrite; }
        }

        public override long Length
        {
            get
            {
                if (_isBuffering)
                {
                    return _buffer.Length;
                }
                // May throw
                return _innerStream.Length;
            }
        }

        // Clear/Reset the buffer by setting Position, Seek, or SetLength to 0. Random access is not supported.
        public override long Position
        {
            get
            {
                if (_isBuffering)
                {
                    return _buffer.Position;
                }
                // May throw
                return _innerStream.Position;
            }
            set
            {
                if (_isBuffering)
                {
                    if (value != 0)
                    {
                        throw new ArgumentOutOfRangeException(nameof(value), value, nameof(Position) + " can only be set to 0.");
                    }
                    _buffer.Position = value;
                    _buffer.SetLength(value);
                }
                else
                {
                    // May throw
                    _innerStream.Position = value;
                }
            }
        }

        // Clear/Reset the buffer by setting Position, Seek, or SetLength to 0. Random access is not supported.
        public override void SetLength(long value)
        {
            if (_isBuffering)
            {
                if (value != 0)
                {
                    throw new ArgumentOutOfRangeException(nameof(value), value, nameof(Length) + " can only be set to 0.");
                }
                _buffer.Position = value;
                _buffer.SetLength(value);
            }
            else
            {
                // May throw
                _innerStream.SetLength(value);
            }
        }

        // Clear/Reset the buffer by setting Position, Seek, or SetLength to 0. Random access is not supported.
        public override long Seek(long offset, SeekOrigin origin)
        {
            if (_isBuffering)
            {
                if (origin != SeekOrigin.Begin)
                {
                    throw new ArgumentException(nameof(origin), nameof(Seek) + " can only be set to " + nameof(SeekOrigin.Begin) + ".");
                }
                if (offset != 0)
                {
                    throw new ArgumentOutOfRangeException(nameof(offset), offset, nameof(Seek) + " can only be set to 0.");
                }
                _buffer.SetLength(offset);
                return _buffer.Seek(offset, origin);
            }
            // Try the inner stream instead, but this will usually fail.
            return _innerStream.Seek(offset, origin);
        }

        internal void DisableBuffering()
        {
            _isBuffering = false;
            if (_buffer.Length > 0)
            {
                Flush();
            }
        }

        internal Task DisableBufferingAsync(CancellationToken cancellationToken)
        {
            _isBuffering = false;
            if (_buffer.Length > 0)
            {
                return FlushAsync(cancellationToken);
            }
            return Task.CompletedTask;
        }

        public override void Write(byte[] buffer, int offset, int count)
        {
            if (_isBuffering)
            {
                _buffer.Write(buffer, offset, count);
            }
            else
            {
                _innerStream.Write(buffer, offset, count);
            }
        }

        public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
        {
            if (_isBuffering)
            {
                return _buffer.WriteAsync(buffer, offset, count, cancellationToken);
            }
            else
            {
                return _innerStream.WriteAsync(buffer, offset, count, cancellationToken);
            }
        }

        public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state)
        {
            if (_isBuffering)
            {
                return _buffer.BeginWrite(buffer, offset, count, callback, state);
            }
            else
            {
                return _innerStream.BeginWrite(buffer, offset, count, callback, state);
            }
        }

        public override void EndWrite(IAsyncResult asyncResult)
        {
            if (_isBuffering)
            {
                _buffer.EndWrite(asyncResult);
            }
            else
            {
                _innerStream.EndWrite(asyncResult);
            }
        }

        public override void Flush()
        {
            _isBuffering = false;
            if (_buffer.Length > 0)
            {
                _buffer.Seek(0, SeekOrigin.Begin);
                _buffer.CopyTo(_innerStream);
                _buffer.Seek(0, SeekOrigin.Begin);
                _buffer.SetLength(0);
            }
            _innerStream.Flush();
        }

        public override async Task FlushAsync(CancellationToken cancellationToken)
        {
            _isBuffering = false;
            if (_buffer.Length > 0)
            {
                _buffer.Seek(0, SeekOrigin.Begin);
                await _buffer.CopyToAsync(_innerStream, 1024 * 16, cancellationToken);
                _buffer.Seek(0, SeekOrigin.Begin);
                _buffer.SetLength(0);
            }
            await _innerStream.FlushAsync(cancellationToken);
        }

        public override int Read(byte[] buffer, int offset, int count)
        {
            throw new NotSupportedException("This Stream only supports Write operations.");
        }
    }
}


================================================
FILE: src/Microsoft.AspNetCore.Buffering/HttpBufferingFeature.cs
================================================
// 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.AspNetCore.Http.Features;

namespace Microsoft.AspNetCore.Buffering
{
    internal class HttpBufferingFeature : IHttpBufferingFeature
    {
        private readonly BufferingWriteStream _buffer;
        private readonly IHttpBufferingFeature _innerFeature;

        internal HttpBufferingFeature(BufferingWriteStream buffer, IHttpBufferingFeature innerFeature)
        {
            _buffer = buffer;
            _innerFeature = innerFeature;
        }

        public void DisableRequestBuffering()
        {
            _innerFeature?.DisableRequestBuffering();
        }

        public void DisableResponseBuffering()
        {
            _buffer.DisableBuffering();
            _innerFeature?.DisableResponseBuffering();
        }
    }
}


================================================
FILE: src/Microsoft.AspNetCore.Buffering/Microsoft.AspNetCore.Buffering.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <VersionPrefix Condition="'$(ExperimentalVersionPrefix)' != ''">$(ExperimentalVersionPrefix)</VersionPrefix>
    <VersionSuffix Condition="'$(ExperimentalVersionSuffix)' != ''">$(ExperimentalVersionSuffix)</VersionSuffix>
    <VerifyVersion Condition="'$(ExperimentalVersionPrefix)' != ''">false</VerifyVersion>
    <PackageVersion Condition="'$(ExperimentalPackageVersion)' != ''">$(ExperimentalPackageVersion)</PackageVersion>
    <Description>ASP.NET Core middleware for buffering response bodies.</Description>
    <TargetFramework>netstandard2.0</TargetFramework>
    <NoWarn>$(NoWarn);CS1591</NoWarn>
    <GenerateDocumentationFile>true</GenerateDocumentationFile>
    <PackageTags>aspnetcore;buffer;buffering</PackageTags>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="$(MicrosoftAspNetCoreHttpAbstractionsPackageVersion)" />
  </ItemGroup>

</Project>


================================================
FILE: src/Microsoft.AspNetCore.Buffering/ResponseBufferingMiddleware.cs
================================================
// 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.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Features;

namespace Microsoft.AspNetCore.Buffering
{
    public class ResponseBufferingMiddleware
    {
        private readonly RequestDelegate _next;

        public ResponseBufferingMiddleware(RequestDelegate next)
        {
            _next = next;
        }

        public async Task Invoke(HttpContext httpContext)
        {
            var originalResponseBody = httpContext.Response.Body;

            // no-op if buffering is already available.
            if (originalResponseBody.CanSeek)
            {
                await _next(httpContext);
                return;
            }

            var originalBufferingFeature = httpContext.Features.Get<IHttpBufferingFeature>();
            var originalSendFileFeature = httpContext.Features.Get<IHttpSendFileFeature>();
            try
            {
                // Shim the response stream
                var bufferStream = new BufferingWriteStream(originalResponseBody);
                httpContext.Response.Body = bufferStream;
                httpContext.Features.Set<IHttpBufferingFeature>(new HttpBufferingFeature(bufferStream, originalBufferingFeature));
                if (originalSendFileFeature != null)
                {
                    httpContext.Features.Set<IHttpSendFileFeature>(new SendFileFeatureWrapper(originalSendFileFeature, bufferStream));
                }

                await _next(httpContext);

                // If we're still buffered, set the content-length header and flush the buffer.
                // Only if the content-length header is not already set, and some content was buffered.
                if (!httpContext.Response.HasStarted && bufferStream.CanSeek && bufferStream.Length > 0)
                {
                    if (!httpContext.Response.ContentLength.HasValue)
                    {
                        httpContext.Response.ContentLength = bufferStream.Length;
                    }
                    await bufferStream.FlushAsync();
                }
            }
            finally
            {
                // undo everything
                httpContext.Features.Set(originalBufferingFeature);
                httpContext.Features.Set(originalSendFileFeature);
                httpContext.Response.Body = originalResponseBody;
            }
        }
    }
}


================================================
FILE: src/Microsoft.AspNetCore.Buffering/ResponseBufferingMiddlewareExtensions.cs
================================================
// 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.AspNetCore.Buffering;

namespace Microsoft.AspNetCore.Builder
{
    public static class ResponseBufferingMiddlewareExtensions
    {
        /// <summary>
        /// Enables full buffering of response bodies. This can be disabled on a per request basis using IHttpBufferingFeature.
        /// </summary>
        /// <param name="builder"></param>
        /// <returns></returns>
        public static IApplicationBuilder UseResponseBuffering(this IApplicationBuilder builder)
        {
            return builder.UseMiddleware<ResponseBufferingMiddleware>();
        }
    }
}


================================================
FILE: src/Microsoft.AspNetCore.Buffering/SendFileFeatureWrapper.cs
================================================
// 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.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http.Features;

namespace Microsoft.AspNetCore.Buffering
{
    internal class SendFileFeatureWrapper : IHttpSendFileFeature
    {
        private readonly IHttpSendFileFeature _originalSendFileFeature;
        private readonly BufferingWriteStream _bufferStream;

        public SendFileFeatureWrapper(IHttpSendFileFeature originalSendFileFeature, BufferingWriteStream bufferStream)
        {
            _originalSendFileFeature = originalSendFileFeature;
            _bufferStream = bufferStream;
        }

        // Flush and disable the buffer if anyone tries to call the SendFile feature.
        public async Task SendFileAsync(string path, long offset, long? length, CancellationToken cancellation)
        {
            await _bufferStream.DisableBufferingAsync(cancellation);
            await _originalSendFileFeature.SendFileAsync(path, offset, length, cancellation);
        }
    }
}

================================================
FILE: src/Microsoft.AspNetCore.HostFiltering/HostFilteringBuilderExtensions.cs
================================================
// 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 Microsoft.AspNetCore.HostFiltering;

namespace Microsoft.AspNetCore.Builder
{
    /// <summary>
    /// Extension methods for the HostFiltering middleware.
    /// </summary>
    public static class HostFilteringBuilderExtensions
    {
        /// <summary>
        /// Adds middleware for filtering requests by allowed host headers. Invalid requests will be rejected with a
        /// 400 status code.
        /// </summary>
        /// <param name="app">The <see cref="IApplicationBuilder"/> instance this method extends.</param>
        /// <returns>The original <see cref="IApplicationBuilder"/>.</returns>
        public static IApplicationBuilder UseHostFiltering(this IApplicationBuilder app)
        {
            if (app == null)
            {
                throw new ArgumentNullException(nameof(app));
            }

            app.UseMiddleware<HostFilteringMiddleware>();

            return app;
        }
    }
}


================================================
FILE: src/Microsoft.AspNetCore.HostFiltering/HostFilteringMiddleware.cs
================================================
// 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.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Primitives;
using Microsoft.Net.Http.Headers;

namespace Microsoft.AspNetCore.HostFiltering
{
    /// <summary>
    /// A middleware used to filter requests by their Host header.
    /// </summary>
    public class HostFilteringMiddleware
    {
        // Matches Http.Sys.
        private static readonly byte[] DefaultResponse = Encoding.ASCII.GetBytes(
            "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\"http://www.w3.org/TR/html4/strict.dtd\">\r\n"
            + "<HTML><HEAD><TITLE>Bad Request</TITLE>\r\n"
            + "<META HTTP-EQUIV=\"Content-Type\" Content=\"text/html; charset=us-ascii\"></ HEAD >\r\n"
            + "<BODY><h2>Bad Request - Invalid Hostname</h2>\r\n"
            + "<hr><p>HTTP Error 400. The request hostname is invalid.</p>\r\n"
            + "</BODY></HTML>");

        private readonly RequestDelegate _next;
        private readonly ILogger<HostFilteringMiddleware> _logger;
        private readonly IOptionsMonitor<HostFilteringOptions> _optionsMonitor;
        private HostFilteringOptions _options;
        private IList<StringSegment> _allowedHosts;
        private bool? _allowAnyNonEmptyHost;

        /// <summary>
        /// A middleware used to filter requests by their Host header.
        /// </summary>
        /// <param name="next"></param>
        /// <param name="logger"></param>
        /// <param name="optionsMonitor"></param>
        public HostFilteringMiddleware(RequestDelegate next, ILogger<HostFilteringMiddleware> logger, 
            IOptionsMonitor<HostFilteringOptions> optionsMonitor)
        {
            _next = next ?? throw new ArgumentNullException(nameof(next));
            _logger = logger ?? throw new ArgumentNullException(nameof(logger));
            _optionsMonitor = optionsMonitor ?? throw new ArgumentNullException(nameof(optionsMonitor));
            _options = _optionsMonitor.CurrentValue;
            _optionsMonitor.OnChange(options =>
            {
                // Clear the cached settings so the next EnsureConfigured will re-evaluate.
                _options = options;
                _allowedHosts = new List<StringSegment>();
                _allowAnyNonEmptyHost = null;
            });
        }

        /// <summary>
        /// Processes requests
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public Task Invoke(HttpContext context)
        {
            var allowedHosts = EnsureConfigured();

            if (!CheckHost(context, allowedHosts))
            {
                context.Response.StatusCode = 400;
                if (_options.IncludeFailureMessage)
                {
                    context.Response.ContentLength = DefaultResponse.Length;
                    context.Response.ContentType = "text/html";
                    return context.Response.Body.WriteAsync(DefaultResponse, 0, DefaultResponse.Length);
                }
                return Task.CompletedTask;
            }

            return _next(context);
        }

        private IList<StringSegment> EnsureConfigured()
        {
            if (_allowAnyNonEmptyHost == true || _allowedHosts?.Count > 0)
            {
                return _allowedHosts;
            }

            var allowedHosts = new List<StringSegment>();
            if (_options.AllowedHosts?.Count > 0 && !TryProcessHosts(_options.AllowedHosts, allowedHosts))
            {
                _logger.LogDebug("Wildcard detected, all requests with hosts will be allowed.");
                _allowedHosts = allowedHosts;
                _allowAnyNonEmptyHost = true;
                return _allowedHosts;
            }

            if (allowedHosts.Count == 0)
            {
                throw new InvalidOperationException("No allowed hosts were configured.");
            }

            if (_logger.IsEnabled(LogLevel.Debug))
            {
                _logger.LogDebug("Allowed hosts: {Hosts}", string.Join("; ", allowedHosts));
            }

            _allowedHosts = allowedHosts;
            return _allowedHosts;
        }

        // returns false if any wildcards were found
        private bool TryProcessHosts(IEnumerable<string> incoming, IList<StringSegment> results)
        {
            foreach (var entry in incoming)
            {
                // Punycode. Http.Sys requires you to register Unicode hosts, but the headers contain punycode.
                var host = new HostString(entry).ToUriComponent();

                if (IsTopLevelWildcard(host))
                {
                    // Disable filtering
                    return false;
                }

                if (!results.Contains(host, StringSegmentComparer.OrdinalIgnoreCase))
                {
                    results.Add(host);
                }
            }

            return true;
        }

        private bool IsTopLevelWildcard(string host)
        {
            return (string.Equals("*", host, StringComparison.Ordinal) // HttpSys wildcard
                           || string.Equals("[::]", host, StringComparison.Ordinal) // Kestrel wildcard, IPv6 Any
                           || string.Equals("0.0.0.0", host, StringComparison.Ordinal)); // IPv4 Any
        }

        // This does not duplicate format validations that are expected to be performed by the host.
        private bool CheckHost(HttpContext context, IList<StringSegment> allowedHosts)
        {
            var host = new StringSegment(context.Request.Headers[HeaderNames.Host].ToString()).Trim();

            if (StringSegment.IsNullOrEmpty(host))
            {
                // Http/1.0 does not require the host header.
                // Http/1.1 requires the header but the value may be empty.
                if (!_options.AllowEmptyHosts)
                {
                    _logger.LogInformation("{Protocol} request rejected due to missing or empty host header.", context.Request.Protocol);
                    return false;
                }
                _logger.LogDebug("{Protocol} request allowed with missing or empty host header.", context.Request.Protocol);
                return true;
            }

            if (_allowAnyNonEmptyHost == true)
            {
                _logger.LogTrace("All hosts are allowed.");
                return true;
            }

            if (HostString.MatchesAny(host, allowedHosts))
            {
                _logger.LogTrace("The host '{Host}' matches an allowed host.", host);
                return true;
            }
            
            _logger.LogInformation("The host '{Host}' does not match an allowed host.", host);
            return false;
        }
    }
}


================================================
FILE: src/Microsoft.AspNetCore.HostFiltering/HostFilteringOptions.cs
================================================
// 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.Collections.Generic;

namespace Microsoft.AspNetCore.HostFiltering
{
    /// <summary>
    /// Options for the HostFiltering middleware
    /// </summary>
    public class HostFilteringOptions
    {
        /// <summary>
        /// The hosts headers that are allowed to access this site. At least one value is required.
        /// </summary>
        /// <remarks>
        /// <list type="bullet">
        /// <item><description>Port numbers must be excluded.</description></item>
        /// <item><description>A top level wildcard "*" allows all non-empty hosts.</description></item>
        /// <item><description>Subdomain wildcards are permitted. E.g. "*.example.com" matches subdomains like foo.example.com,
        ///    but not the parent domain example.com.</description></item>
        /// <item><description>Unicode host names are allowed but will be converted to punycode for matching.</description></item>
        /// <item><description>IPv6 addresses must include their bounding brackets and be in their normalized form.</description></item>
        /// </list>
        /// </remarks>
        public IList<string> AllowedHosts { get; set; } = new List<string>();

        /// <summary>
        /// Indicates if requests without hosts are allowed. The default is true.
        /// </summary>
        /// <remarks>
        /// HTTP/1.0 does not require a host header.
        /// Http/1.1 requires a host header, but says the value may be empty.
        /// </remarks>
        public bool AllowEmptyHosts { get; set; } = true;

        // Note if this were disabled then things like the status code middleware may try to re-execute
        // the request. This is a low level protocol violation, pretty error pages should not be required.
        /// <summary>
        /// Indicates if the 400 response should include a default message or be empty. This is enabled by default.
        /// </summary>
        public bool IncludeFailureMessage { get; set; } = true;
    }
}


================================================
FILE: src/Microsoft.AspNetCore.HostFiltering/HostFilteringServicesExtensions.cs
================================================
// 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 Microsoft.AspNetCore.HostFiltering;
using Microsoft.Extensions.DependencyInjection;

namespace Microsoft.AspNetCore.Builder
{
    /// <summary>
    /// Extension methods for the host filtering middleware.
    /// </summary>
    public static class HostFilteringServicesExtensions
    {
        /// <summary>
        /// Adds services and options for the host filtering middleware.
        /// </summary>
        /// <param name="services">The <see cref="IServiceCollection"/> for adding services.</param>
        /// <param name="configureOptions">A delegate to configure the <see cref="HostFilteringOptions"/>.</param>
        /// <returns></returns>
        public static IServiceCollection AddHostFiltering(this IServiceCollection services, Action<HostFilteringOptions> configureOptions)
        {
            if (services == null)
            {
                throw new ArgumentNullException(nameof(services));
            }
            if (configureOptions == null)
            {
                throw new ArgumentNullException(nameof(configureOptions));
            }

            services.Configure(configureOptions);
            return services;
        }
    }
}


================================================
FILE: src/Microsoft.AspNetCore.HostFiltering/Microsoft.AspNetCore.HostFiltering.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <Description>
      ASP.NET Core middleware for filtering out requests with unknown HTTP host headers.
    </Description>
    <TargetFramework>netstandard2.0</TargetFramework>
    <GenerateDocumentationFile>true</GenerateDocumentationFile>
    <PackageTags>aspnetcore</PackageTags>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Http" Version="$(MicrosoftAspNetCoreHttpAbstractionsPackageVersion)" />
    <PackageReference Include="Microsoft.AspNetCore.Http.Extensions" Version="$(MicrosoftAspNetCoreHttpExtensionsPackageVersion)" />
    <PackageReference Include="Microsoft.Extensions.Options" Version="$(MicrosoftExtensionsOptionsPackageVersion)" />
    <PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions" Version="$(MicrosoftAspNetCoreHostingAbstractionsPackageVersion)" /> 
  </ItemGroup>
</Project>


================================================
FILE: src/Microsoft.AspNetCore.HostFiltering/baseline.netcore.json
================================================
{
  "AssemblyIdentity": "Microsoft.AspNetCore.HostFiltering, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60",
  "Types": [
    {
      "Name": "Microsoft.AspNetCore.HostFiltering.HostFilteringMiddleware",
      "Visibility": "Public",
      "Kind": "Class",
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "Invoke",
          "Parameters": [
            {
              "Name": "context",
              "Type": "Microsoft.AspNetCore.Http.HttpContext"
            }
          ],
          "ReturnType": "System.Threading.Tasks.Task",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Constructor",
          "Name": ".ctor",
          "Parameters": [
            {
              "Name": "next",
              "Type": "Microsoft.AspNetCore.Http.RequestDelegate"
            },
            {
              "Name": "logger",
              "Type": "Microsoft.Extensions.Logging.ILogger<Microsoft.AspNetCore.HostFiltering.HostFilteringMiddleware>"
            },
            {
              "Name": "optionsMonitor",
              "Type": "Microsoft.Extensions.Options.IOptionsMonitor<Microsoft.AspNetCore.HostFiltering.HostFilteringOptions>"
            }
          ],
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.AspNetCore.HostFiltering.HostFilteringOptions",
      "Visibility": "Public",
      "Kind": "Class",
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "get_AllowedHosts",
          "Parameters": [],
          "ReturnType": "System.Collections.Generic.IList<System.String>",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "set_AllowedHosts",
          "Parameters": [
            {
              "Name": "value",
              "Type": "System.Collections.Generic.IList<System.String>"
            }
          ],
          "ReturnType": "System.Void",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_AllowEmptyHosts",
          "Parameters": [],
          "ReturnType": "System.Boolean",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "set_AllowEmptyHosts",
          "Parameters": [
            {
              "Name": "value",
              "Type": "System.Boolean"
            }
          ],
          "ReturnType": "System.Void",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_IncludeFailureMessage",
          "Parameters": [],
          "ReturnType": "System.Boolean",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "set_IncludeFailureMessage",
          "Parameters": [
            {
              "Name": "value",
              "Type": "System.Boolean"
            }
          ],
          "ReturnType": "System.Void",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Constructor",
          "Name": ".ctor",
          "Parameters": [],
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.AspNetCore.Builder.HostFilteringBuilderExtensions",
      "Visibility": "Public",
      "Kind": "Class",
      "Abstract": true,
      "Static": true,
      "Sealed": true,
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "UseHostFiltering",
          "Parameters": [
            {
              "Name": "app",
              "Type": "Microsoft.AspNetCore.Builder.IApplicationBuilder"
            }
          ],
          "ReturnType": "Microsoft.AspNetCore.Builder.IApplicationBuilder",
          "Static": true,
          "Extension": true,
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.AspNetCore.Builder.HostFilteringServicesExtensions",
      "Visibility": "Public",
      "Kind": "Class",
      "Abstract": true,
      "Static": true,
      "Sealed": true,
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "AddHostFiltering",
          "Parameters": [
            {
              "Name": "services",
              "Type": "Microsoft.Extensions.DependencyInjection.IServiceCollection"
            },
            {
              "Name": "configureOptions",
              "Type": "System.Action<Microsoft.AspNetCore.HostFiltering.HostFilteringOptions>"
            }
          ],
          "ReturnType": "Microsoft.Extensions.DependencyInjection.IServiceCollection",
          "Static": true,
          "Extension": true,
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    }
  ]
}

================================================
FILE: src/Microsoft.AspNetCore.HttpOverrides/ForwardedHeaders.cs
================================================
// 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;

namespace Microsoft.AspNetCore.HttpOverrides
{
    [Flags]
    public enum ForwardedHeaders
    {
        None = 0,
        XForwardedFor = 1 << 0,
        XForwardedHost = 1 << 1,
        XForwardedProto = 1 << 2,
        All = XForwardedFor | XForwardedHost | XForwardedProto
    }
}


================================================
FILE: src/Microsoft.AspNetCore.HttpOverrides/ForwardedHeadersDefaults.cs
================================================
// 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.HttpOverrides
{
    /// <summary>
    /// Default values related to <see cref="ForwardedHeadersMiddleware"/> middleware
    /// </summary>
    /// <seealso cref="Microsoft.AspNetCore.Builder.ForwardedHeadersOptions"/>
    public static class ForwardedHeadersDefaults
    {
        /// <summary>
        /// X-Forwarded-For
        /// </summary>
        public static string XForwardedForHeaderName { get; } = "X-Forwarded-For";

        /// <summary>
        /// X-Forwarded-Host
        /// </summary>
        public static string XForwardedHostHeaderName { get; } = "X-Forwarded-Host";

        /// <summary>
        /// X-Forwarded-Proto
        /// </summary>
        public static string XForwardedProtoHeaderName { get; } = "X-Forwarded-Proto";

        /// <summary>
        /// X-Original-For
        /// </summary>
        public static string XOriginalForHeaderName { get; } = "X-Original-For";

        /// <summary>
        /// X-Original-Host
        /// </summary>
        public static string XOriginalHostHeaderName { get; } = "X-Original-Host";

        /// <summary>
        /// X-Original-Proto
        /// </summary>
        public static string XOriginalProtoHeaderName { get; } = "X-Original-Proto";
    }
}


================================================
FILE: src/Microsoft.AspNetCore.HttpOverrides/ForwardedHeadersExtensions.cs
================================================
// 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 Microsoft.AspNetCore.HttpOverrides;
using Microsoft.Extensions.Options;

namespace Microsoft.AspNetCore.Builder
{
    public static class ForwardedHeadersExtensions
    {
        /// <summary>
        /// Forwards proxied headers onto current request
        /// </summary>
        /// <param name="builder"></param>
        /// <returns></returns>
        public static IApplicationBuilder UseForwardedHeaders(this IApplicationBuilder builder)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            return builder.UseMiddleware<ForwardedHeadersMiddleware>();
        }

        /// <summary>
        /// Forwards proxied headers onto current request
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="options">Enables the different forwarding options.</param>
        /// <returns></returns>
        public static IApplicationBuilder UseForwardedHeaders(this IApplicationBuilder builder, ForwardedHeadersOptions options)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            return builder.UseMiddleware<ForwardedHeadersMiddleware>(Options.Create(options));
        }
    }
}


================================================
FILE: src/Microsoft.AspNetCore.HttpOverrides/ForwardedHeadersMiddleware.cs
================================================
// 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.Collections.Generic;
using System.Linq;
using System.Net;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.HttpOverrides.Internal;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Primitives;

namespace Microsoft.AspNetCore.HttpOverrides
{
    public class ForwardedHeadersMiddleware
    {
        private static readonly bool[] HostCharValidity = new bool[127];
        private static readonly bool[] SchemeCharValidity = new bool[123];

        private readonly ForwardedHeadersOptions _options;
        private readonly RequestDelegate _next;
        private readonly ILogger _logger;
        private bool _allowAllHosts;
        private IList<StringSegment> _allowedHosts;

        static ForwardedHeadersMiddleware()
        {
            // RFC 3986 scheme = ALPHA * (ALPHA / DIGIT / "+" / "-" / ".")
            SchemeCharValidity['+'] = true;
            SchemeCharValidity['-'] = true;
            SchemeCharValidity['.'] = true;

            // Host Matches Http.Sys and Kestrel
            // Host Matches RFC 3986 except "*" / "+" / "," / ";" / "=" and "%" HEXDIG HEXDIG which are not allowed by Http.Sys
            HostCharValidity['!'] = true;
            HostCharValidity['$'] = true;
            HostCharValidity['&'] = true;
            HostCharValidity['\''] = true;
            HostCharValidity['('] = true;
            HostCharValidity[')'] = true;
            HostCharValidity['-'] = true;
            HostCharValidity['.'] = true;
            HostCharValidity['_'] = true;
            HostCharValidity['~'] = true;
            for (var ch = '0'; ch <= '9'; ch++)
            {
                SchemeCharValidity[ch] = true;
                HostCharValidity[ch] = true;
            }
            for (var ch = 'A'; ch <= 'Z'; ch++)
            {
                SchemeCharValidity[ch] = true;
                HostCharValidity[ch] = true;
            }
            for (var ch = 'a'; ch <= 'z'; ch++)
            {
                SchemeCharValidity[ch] = true;
                HostCharValidity[ch] = true;
            }
        }

        public ForwardedHeadersMiddleware(RequestDelegate next, ILoggerFactory loggerFactory, IOptions<ForwardedHeadersOptions> options)
        {
            if (next == null)
            {
                throw new ArgumentNullException(nameof(next));
            }
            if (loggerFactory == null)
            {
                throw new ArgumentNullException(nameof(loggerFactory));
            }
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            // Make sure required options is not null or whitespace
            EnsureOptionNotNullorWhitespace(options.Value.ForwardedForHeaderName, nameof(options.Value.ForwardedForHeaderName));
            EnsureOptionNotNullorWhitespace(options.Value.ForwardedHostHeaderName, nameof(options.Value.ForwardedHostHeaderName));
            EnsureOptionNotNullorWhitespace(options.Value.ForwardedProtoHeaderName, nameof(options.Value.ForwardedProtoHeaderName));
            EnsureOptionNotNullorWhitespace(options.Value.OriginalForHeaderName, nameof(options.Value.OriginalForHeaderName));
            EnsureOptionNotNullorWhitespace(options.Value.OriginalHostHeaderName, nameof(options.Value.OriginalHostHeaderName));
            EnsureOptionNotNullorWhitespace(options.Value.OriginalProtoHeaderName, nameof(options.Value.OriginalProtoHeaderName));

            _options = options.Value;
            _logger = loggerFactory.CreateLogger<ForwardedHeadersMiddleware>();
            _next = next;

            PreProcessHosts();
        }

        private static void EnsureOptionNotNullorWhitespace(string value, string propertyName)
        {
            if (string.IsNullOrWhiteSpace(value))
            {
                throw new ArgumentException($"options.{propertyName} is required", "options");
            }
        }

        private void PreProcessHosts()
        {
            if (_options.AllowedHosts == null || _options.AllowedHosts.Count == 0)
            {
                _allowAllHosts = true;
                return;
            }

            var allowedHosts = new List<StringSegment>();
            foreach (var entry in _options.AllowedHosts)
            {
                // Punycode. Http.Sys requires you to register Unicode hosts, but the headers contain punycode.
                var host = new HostString(entry).ToUriComponent();

                if (IsTopLevelWildcard(host))
                {
                    // Disable filtering
                    _allowAllHosts = true;
                    return;
                }

                if (!allowedHosts.Contains(host, StringSegmentComparer.OrdinalIgnoreCase))
                {
                    allowedHosts.Add(host);
                }
            }

            _allowedHosts = allowedHosts;
        }

        private bool IsTopLevelWildcard(string host)
        {
            return (string.Equals("*", host, StringComparison.Ordinal) // HttpSys wildcard
                           || string.Equals("[::]", host, StringComparison.Ordinal) // Kestrel wildcard, IPv6 Any
                           || string.Equals("0.0.0.0", host, StringComparison.Ordinal)); // IPv4 Any
        }

        public Task Invoke(HttpContext context)
        {
            ApplyForwarders(context);
            return _next(context);
        }

        public void ApplyForwarders(HttpContext context)
        {
            // Gather expected headers.
            string[] forwardedFor = null, forwardedProto = null, forwardedHost = null;
            bool checkFor = false, checkProto = false, checkHost = false;
            int entryCount = 0;

            if ((_options.ForwardedHeaders & ForwardedHeaders.XForwardedFor) == ForwardedHeaders.XForwardedFor)
            {
                checkFor = true;
                forwardedFor = context.Request.Headers.GetCommaSeparatedValues(_options.ForwardedForHeaderName);
                entryCount = Math.Max(forwardedFor.Length, entryCount);
            }

            if ((_options.ForwardedHeaders & ForwardedHeaders.XForwardedProto) == ForwardedHeaders.XForwardedProto)
            {
                checkProto = true;
                forwardedProto = context.Request.Headers.GetCommaSeparatedValues(_options.ForwardedProtoHeaderName);
                if (_options.RequireHeaderSymmetry && checkFor && forwardedFor.Length != forwardedProto.Length)
                {
                    _logger.LogWarning(1, "Parameter count mismatch between X-Forwarded-For and X-Forwarded-Proto.");
                    return;
                }
                entryCount = Math.Max(forwardedProto.Length, entryCount);
            }

            if ((_options.ForwardedHeaders & ForwardedHeaders.XForwardedHost) == ForwardedHeaders.XForwardedHost)
            {
                checkHost = true;
                forwardedHost = context.Request.Headers.GetCommaSeparatedValues(_options.ForwardedHostHeaderName);
                if (_options.RequireHeaderSymmetry
                    && ((checkFor && forwardedFor.Length != forwardedHost.Length)
                        || (checkProto && forwardedProto.Length != forwardedHost.Length)))
                {
                    _logger.LogWarning(1, "Parameter count mismatch between X-Forwarded-Host and X-Forwarded-For or X-Forwarded-Proto.");
                    return;
                }
                entryCount =  Math.Max(forwardedHost.Length, entryCount);
            }

            // Apply ForwardLimit, if any
            if (_options.ForwardLimit.HasValue && entryCount > _options.ForwardLimit)
            {
                entryCount = _options.ForwardLimit.Value;
            }

            // Group the data together.
            var sets = new SetOfForwarders[entryCount];
            for (int i = 0; i < sets.Length; i++)
            {
                // They get processed in reverse order, right to left.
                var set = new SetOfForwarders();
                if (checkFor && i < forwardedFor.Length)
                {
                    set.IpAndPortText = forwardedFor[forwardedFor.Length - i - 1];
                }
                if (checkProto && i < forwardedProto.Length)
                {
                    set.Scheme = forwardedProto[forwardedProto.Length - i - 1];
                }
                if (checkHost && i < forwardedHost.Length)
                {
                    set.Host = forwardedHost[forwardedHost.Length - i - 1];
                }
                sets[i] = set;
            }

            // Gather initial values
            var connection = context.Connection;
            var request = context.Request;
            var currentValues = new SetOfForwarders()
            {
                RemoteIpAndPort = connection.RemoteIpAddress != null ? new IPEndPoint(connection.RemoteIpAddress, connection.RemotePort) : null,
                // Host and Scheme initial values are never inspected, no need to set them here.
            };

            var checkKnownIps = _options.KnownNetworks.Count > 0 || _options.KnownProxies.Count > 0;
            bool applyChanges = false;
            int entriesConsumed = 0;

            for ( ; entriesConsumed < sets.Length; entriesConsumed++)
            {
                var set = sets[entriesConsumed];
                if (checkFor)
                {
                    // For the first instance, allow remoteIp to be null for servers that don't support it natively.
                    if (currentValues.RemoteIpAndPort != null && checkKnownIps && !CheckKnownAddress(currentValues.RemoteIpAndPort.Address))
                    {
                        // Stop at the first unknown remote IP, but still apply changes processed so far.
                        _logger.LogDebug(1, "Unknown proxy: {RemoteIpAndPort}", currentValues.RemoteIpAndPort);
                        break;
                    }

                    IPEndPoint parsedEndPoint;
                    if (IPEndPointParser.TryParse(set.IpAndPortText, out parsedEndPoint))
                    {
                        applyChanges = true;
                        set.RemoteIpAndPort = parsedEndPoint;
                        currentValues.IpAndPortText = set.IpAndPortText;
                        currentValues.RemoteIpAndPort = set.RemoteIpAndPort;
                    }
                    else if (!string.IsNullOrEmpty(set.IpAndPortText))
                    {
                        // Stop at the first unparsable IP, but still apply changes processed so far.
                        _logger.LogDebug(1, "Unparsable IP: {IpAndPortText}", set.IpAndPortText);
                        break;
                    }
                    else if (_options.RequireHeaderSymmetry)
                    {
                        _logger.LogWarning(2, "Missing forwarded IPAddress.");
                        return;
                    }
                }

                if (checkProto)
                {
                    if (!string.IsNullOrEmpty(set.Scheme) && TryValidateScheme(set.Scheme))
                    {
                        applyChanges = true;
                        currentValues.Scheme = set.Scheme;
                    }
                    else if (_options.RequireHeaderSymmetry)
                    {
                        _logger.LogWarning(3, $"Forwarded scheme is not present, this is required by {nameof(_options.RequireHeaderSymmetry)}");
                        return;
                    }
                }

                if (checkHost)
                {
                    if (!string.IsNullOrEmpty(set.Host) && TryValidateHost(set.Host)
                        && (_allowAllHosts || HostString.MatchesAny(set.Host, _allowedHosts)))
                    {
                        applyChanges = true;
                        currentValues.Host = set.Host;
                    }
                    else if (_options.RequireHeaderSymmetry)
                    {
                        _logger.LogWarning(4, $"Incorrect number of x-forwarded-host header values, see {nameof(_options.RequireHeaderSymmetry)}.");
                        return;
                    }
                }
            }

            if (applyChanges)
            {
                if (checkFor && currentValues.RemoteIpAndPort != null)
                {
                    if (connection.RemoteIpAddress != null)
                    {
                        // Save the original
                        request.Headers[_options.OriginalForHeaderName] = new IPEndPoint(connection.RemoteIpAddress, connection.RemotePort).ToString();
                    }
                    if (forwardedFor.Length > entriesConsumed)
                    {
                        // Truncate the consumed header values
                        request.Headers[_options.ForwardedForHeaderName] = forwardedFor.Take(forwardedFor.Length - entriesConsumed).ToArray();
                    }
                    else
                    {
                        // All values were consumed
                        request.Headers.Remove(_options.ForwardedForHeaderName);
                    }
                    connection.RemoteIpAddress = currentValues.RemoteIpAndPort.Address;
                    connection.RemotePort = currentValues.RemoteIpAndPort.Port;
                }

                if (checkProto && currentValues.Scheme != null)
                {
                    // Save the original
                    request.Headers[_options.OriginalProtoHeaderName] = request.Scheme;
                    if (forwardedProto.Length > entriesConsumed)
                    {
                        // Truncate the consumed header values
                        request.Headers[_options.ForwardedProtoHeaderName] = forwardedProto.Take(forwardedProto.Length - entriesConsumed).ToArray();
                    }
                    else
                    {
                        // All values were consumed
                        request.Headers.Remove(_options.ForwardedProtoHeaderName);
                    }
                    request.Scheme = currentValues.Scheme;
                }

                if (checkHost && currentValues.Host != null)
                {
                    // Save the original
                    request.Headers[_options.OriginalHostHeaderName] = request.Host.ToString();
                    if (forwardedHost.Length > entriesConsumed)
                    {
                        // Truncate the consumed header values
                        request.Headers[_options.ForwardedHostHeaderName] = forwardedHost.Take(forwardedHost.Length - entriesConsumed).ToArray();
                    }
                    else
                    {
                        // All values were consumed
                        request.Headers.Remove(_options.ForwardedHostHeaderName);
                    }
                    request.Host = HostString.FromUriComponent(currentValues.Host);
                }
            }
        }

        private bool CheckKnownAddress(IPAddress address)
        {
            if (address.IsIPv4MappedToIPv6)
            {
                var ipv4Address = address.MapToIPv4();
                if (CheckKnownAddress(ipv4Address))
                {
                    return true;
                }
            }
            if (_options.KnownProxies.Contains(address))
            {
                return true;
            }
            foreach (var network in _options.KnownNetworks)
            {
                if (network.Contains(address))
                {
                    return true;
                }
            }
            return false;
        }

        private struct SetOfForwarders
        {
            public string IpAndPortText;
            public IPEndPoint RemoteIpAndPort;
            public string Host;
            public string Scheme;
        }

        // Empty was checked for by the caller
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private bool TryValidateScheme(string scheme)
        {
            for (var i = 0; i < scheme.Length; i++)
            {
                if (!IsValidSchemeChar(scheme[i]))
                {
                    return false;
                }
            }
            return true;
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private static bool IsValidSchemeChar(char ch)
        {
            return ch < SchemeCharValidity.Length && SchemeCharValidity[ch];
        }

        // Empty was checked for by the caller
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private bool TryValidateHost(string host)
        {
            if (host[0] == '[')
            {
                return TryValidateIPv6Host(host);
            }

            if (host[0] == ':')
            {
                // Only a port
                return false;
            }

            var i = 0;
            for (; i < host.Length; i++)
            {
                if (!IsValidHostChar(host[i]))
                {
                    break;
                }
            }
            return TryValidateHostPort(host, i);
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private static bool IsValidHostChar(char ch)
        {
            return ch < HostCharValidity.Length && HostCharValidity[ch];
        }

        // The lead '[' was already checked
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private bool TryValidateIPv6Host(string hostText)
        {
            for (var i = 1; i < hostText.Length; i++)
            {
                var ch = hostText[i];
                if (ch == ']')
                {
                    // [::1] is the shortest valid IPv6 host
                    if (i < 4)
                    {
                        return false;
                    }
                    return TryValidateHostPort(hostText, i + 1);
                }

                if (!IsHex(ch) && ch != ':' && ch != '.')
                {
                    return false;
                }
            }

            // Must contain a ']'
            return false;
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private bool TryValidateHostPort(string hostText, int offset)
        {
            if (offset == hostText.Length)
            {
                // No port
                return true;
            }

            if (hostText[offset] != ':' || hostText.Length == offset + 1)
            {
                // Must have at least one number after the colon if present.
                return false;
            }

            for (var i = offset + 1; i < hostText.Length; i++)
            {
                if (!IsNumeric(hostText[i]))
                {
                    return false;
                }
            }

            return true;
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private bool IsNumeric(char ch)
        {
            return '0' <= ch && ch <= '9';
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private bool IsHex(char ch)
        {
            return IsNumeric(ch)
                || ('a' <= ch && ch <= 'f')
                || ('A' <= ch && ch <= 'F');
        }
    }
}


================================================
FILE: src/Microsoft.AspNetCore.HttpOverrides/ForwardedHeadersOptions.cs
================================================
// 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.Collections.Generic;
using System.Net;
using Microsoft.AspNetCore.HttpOverrides;

namespace Microsoft.AspNetCore.Builder
{
    public class ForwardedHeadersOptions
    {
        /// <summary>
        /// Use this header instead of <see cref="ForwardedHeadersDefaults.XForwardedForHeaderName"/>
        /// </summary>
        /// <seealso cref="Microsoft.AspNetCore.HttpOverrides.ForwardedHeadersDefaults"/>
        public string ForwardedForHeaderName { get; set; } = ForwardedHeadersDefaults.XForwardedForHeaderName;

        /// <summary>
        /// Use this header instead of <see cref="ForwardedHeadersDefaults.XForwardedHostHeaderName"/>
        /// </summary>
        /// <seealso cref="ForwardedHeadersDefaults"/>
        public string ForwardedHostHeaderName { get; set; } = ForwardedHeadersDefaults.XForwardedHostHeaderName;

        /// <summary>
        /// Use this header instead of <see cref="ForwardedHeadersDefaults.XForwardedProtoHeaderName"/>
        /// </summary>
        /// <seealso cref="ForwardedHeadersDefaults"/>
        public string ForwardedProtoHeaderName { get; set; } = ForwardedHeadersDefaults.XForwardedProtoHeaderName;

        /// <summary>
        /// Use this header instead of <see cref="ForwardedHeadersDefaults.XOriginalForHeaderName"/>
        /// </summary>
        /// <seealso cref="ForwardedHeadersDefaults"/>
        public string OriginalForHeaderName { get; set; } = ForwardedHeadersDefaults.XOriginalForHeaderName;

        /// <summary>
        /// Use this header instead of <see cref="ForwardedHeadersDefaults.XOriginalHostHeaderName"/>
        /// </summary>
        /// <seealso cref="ForwardedHeadersDefaults"/>
        public string OriginalHostHeaderName { get; set; } = ForwardedHeadersDefaults.XOriginalHostHeaderName;

        /// <summary>
        /// Use this header instead of <see cref="ForwardedHeadersDefaults.XOriginalProtoHeaderName"/>
        /// </summary>
        /// <seealso cref="ForwardedHeadersDefaults"/>
        public string OriginalProtoHeaderName { get; set; } = ForwardedHeadersDefaults.XOriginalProtoHeaderName;

        /// <summary>
        /// Identifies which forwarders should be processed.
        /// </summary>
        public ForwardedHeaders ForwardedHeaders { get; set; }

        /// <summary>
        /// Limits the number of entries in the headers that will be processed. The default value is 1.
        /// Set to null to disable the limit, but this should only be done if
        /// KnownProxies or KnownNetworks are configured.
        /// </summary>
        public int? ForwardLimit { get; set; } = 1;

        /// <summary>
        /// Addresses of known proxies to accept forwarded headers from.
        /// </summary>
        public IList<IPAddress> KnownProxies { get; } = new List<IPAddress>() { IPAddress.IPv6Loopback };

        /// <summary>
        /// Address ranges of known proxies to accept forwarded headers from.
        /// </summary>
        public IList<IPNetwork> KnownNetworks { get; } = new List<IPNetwork>() { new IPNetwork(IPAddress.Loopback, 8) };

        /// <summary>
        /// The allowed values from x-forwarded-host. If the list is empty then all hosts are allowed.
        /// Failing to restrict this these values may allow an attacker to spoof links generated by your service. 
        /// </summary>
        /// <remarks>
        /// <list type="bullet">
        /// <item><description>Port numbers must be excluded.</description></item>
        /// <item><description>A top level wildcard "*" allows all non-empty hosts.</description></item>
        /// <item><description>Subdomain wildcards are permitted. E.g. "*.example.com" matches subdomains like foo.example.com,
        ///    but not the parent domain example.com.</description></item>
        /// <item><description>Unicode host names are allowed but will be converted to punycode for matching.</description></item>
        /// <item><description>IPv6 addresses must include their bounding brackets and be in their normalized form.</description></item>
        /// </list>
        /// </remarks>
        public IList<string> AllowedHosts { get; set;  } = new List<string>();

        /// <summary>
        /// Require the number of header values to be in sync between the different headers being processed.
        /// The default is 'false'.
        /// </summary>
        public bool RequireHeaderSymmetry { get; set; } = false;
    }
}


================================================
FILE: src/Microsoft.AspNetCore.HttpOverrides/HttpMethodOverrideExtensions.cs
================================================
// 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 Microsoft.AspNetCore.HttpOverrides;
using Microsoft.Extensions.Options;

namespace Microsoft.AspNetCore.Builder
{
    public static class HttpMethodOverrideExtensions
    {
        /// <summary>
        /// Allows incoming POST request to override method type with type specified in header.
        /// </summary>
        /// <param name="builder">The <see cref="IApplicationBuilder"/> instance this method extends.</param>
        public static IApplicationBuilder UseHttpMethodOverride(this IApplicationBuilder builder)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            return builder.UseMiddleware<HttpMethodOverrideMiddleware>();
        }

        /// <summary>
        /// Allows incoming POST request to override method type with type specified in form.
        /// </summary>
        /// <param name="builder">The <see cref="IApplicationBuilder"/> instance this method extends.</param>
        /// <param name="options">The <see cref="HttpMethodOverrideOptions"/>.</param>
        public static IApplicationBuilder UseHttpMethodOverride(this IApplicationBuilder builder, HttpMethodOverrideOptions options)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            return builder.UseMiddleware<HttpMethodOverrideMiddleware>(Options.Create(options));
        }
    }
}


================================================
FILE: src/Microsoft.AspNetCore.HttpOverrides/HttpMethodOverrideMiddleware.cs
================================================
// 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.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Options;

namespace Microsoft.AspNetCore.HttpOverrides
{
    public class HttpMethodOverrideMiddleware
    {
        private const string xHttpMethodOverride = "X-Http-Method-Override";
        private readonly RequestDelegate _next;
        private readonly HttpMethodOverrideOptions _options;

        public HttpMethodOverrideMiddleware(RequestDelegate next, IOptions<HttpMethodOverrideOptions> options)
        {
            if (next == null)
            {
                throw new ArgumentNullException(nameof(next));
            }
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }
            _next = next;
            _options = options.Value;
        }

        public async Task Invoke(HttpContext context)
        {
            if (string.Equals(context.Request.Method, "POST", StringComparison.OrdinalIgnoreCase))
            {
                if (_options.FormFieldName != null)
                {
                    if (context.Request.HasFormContentType)
                    {
                        var form = await context.Request.ReadFormAsync();
                        var methodType = form[_options.FormFieldName];
                        if (!string.IsNullOrEmpty(methodType))
                        {
                            context.Request.Method = methodType;
                        }
                    }
                }
                else
                {
                    var xHttpMethodOverrideValue = context.Request.Headers[xHttpMethodOverride];
                    if (!string.IsNullOrEmpty(xHttpMethodOverrideValue))
                    {
                        context.Request.Method = xHttpMethodOverrideValue;
                    }
                }
            }
            await _next(context);
        }
    }
}


================================================
FILE: src/Microsoft.AspNetCore.HttpOverrides/HttpMethodOverrideOptions.cs
================================================
// 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.Builder
{
    public class HttpMethodOverrideOptions
    {
        /// <summary>
        /// Denotes the form element that contains the name of the resulting method type.
        /// If not set the X-Http-Method-Override header will be used.
        /// </summary>
        public string FormFieldName { get; set; }
    }
}


================================================
FILE: src/Microsoft.AspNetCore.HttpOverrides/IPNetwork.cs
================================================
// 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.Net;

namespace Microsoft.AspNetCore.HttpOverrides
{
    public class IPNetwork
    {
        public IPNetwork(IPAddress prefix, int prefixLength)
        {
            Prefix = prefix;
            PrefixLength = prefixLength;
            PrefixBytes = Prefix.GetAddressBytes();
            Mask = CreateMask();
        }

        public IPAddress Prefix { get; }

        private byte[] PrefixBytes { get; }

        /// <summary>
        /// The CIDR notation of the subnet mask 
        /// </summary>
        public int PrefixLength { get; }

        private byte[] Mask { get; }

        public bool Contains(IPAddress address)
        {
            if (Prefix.AddressFamily != address.AddressFamily)
            {
                return false;
            }

            var addressBytes = address.GetAddressBytes();
            for (int i = 0; i < PrefixBytes.Length && Mask[i] != 0; i++)
            {
                if (PrefixBytes[i] != (addressBytes[i] & Mask[i]))
                {
                    return false;
                }
            }

            return true;
        }

        private byte[] CreateMask()
        {
            var mask = new byte[PrefixBytes.Length];
            int remainingBits = PrefixLength;
            int i = 0;
            while (remainingBits >= 8)
            {
                mask[i] = 0xFF;
                i++;
                remainingBits -= 8;
            }
            if (remainingBits > 0)
            {
                mask[i] = (byte)(0xFF << (8 - remainingBits));
            }

            return mask;
        }
    }
}


================================================
FILE: src/Microsoft.AspNetCore.HttpOverrides/Internal/IPEndPointParser.cs
================================================
// 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.Globalization;
using System.Net;

namespace Microsoft.AspNetCore.HttpOverrides.Internal
{
    public static class IPEndPointParser
    {
        public static bool TryParse(string addressWithPort, out IPEndPoint endpoint)
        {
            string addressPart = null;
            string portPart = null;
            IPAddress address;
            endpoint = null;

            if (string.IsNullOrEmpty(addressWithPort))
            {
                return false;
            }

            var lastColonIndex = addressWithPort.LastIndexOf(':');
            if (lastColonIndex > 0)
            {
                // IPv4 with port or IPv6
                var closingIndex = addressWithPort.LastIndexOf(']');
                if (closingIndex > 0)
                {
                    // IPv6 with brackets
                    addressPart = addressWithPort.Substring(1, closingIndex - 1);
                    if (closingIndex < lastColonIndex)
                    {
                        // IPv6 with port [::1]:80
                        portPart = addressWithPort.Substring(lastColonIndex + 1);
                    }
                }
                else
                {
                    // IPv6 without port or IPv4
                    var firstColonIndex = addressWithPort.IndexOf(':');
                    if (firstColonIndex != lastColonIndex)
                    {
                        // IPv6 ::1
                        addressPart = addressWithPort;
                    }
                    else
                    {
                        // IPv4 with port 127.0.0.1:123
                        addressPart = addressWithPort.Substring(0, firstColonIndex);
                        portPart = addressWithPort.Substring(firstColonIndex + 1);
                    }
                }
            }
            else
            {
                // IPv4 without port
                addressPart = addressWithPort;
            }

            if (IPAddress.TryParse(addressPart, out address))
            {
                if (portPart != null)
                {
                    int port;
                    if (int.TryParse(portPart, NumberStyles.None, CultureInfo.InvariantCulture, out port))
                    {
                        endpoint = new IPEndPoint(address, port);
                        return true;
                    }
                    return false;
                }
                endpoint = new IPEndPoint(address, 0);
                return true;
            }
            return false;
        }
    }
}

================================================
FILE: src/Microsoft.AspNetCore.HttpOverrides/Microsoft.AspNetCore.HttpOverrides.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <Description>ASP.NET Core basic middleware for supporting HTTP method overrides. Includes:
* X-Forwarded-* headers to forward headers from a proxy.
* HTTP method override header.</Description>
    <TargetFramework>netstandard2.0</TargetFramework>
    <NoWarn>$(NoWarn);CS1591</NoWarn>
    <GenerateDocumentationFile>true</GenerateDocumentationFile>
    <PackageTags>aspnetcore;proxy;headers;xforwarded</PackageTags>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Http.Extensions" Version="$(MicrosoftAspNetCoreHttpExtensionsPackageVersion)" />
    <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="$(MicrosoftExtensionsLoggingAbstractionsPackageVersion)" />
    <PackageReference Include="Microsoft.Extensions.Options" Version="$(MicrosoftExtensionsOptionsPackageVersion)" />
  </ItemGroup>

</Project>


================================================
FILE: src/Microsoft.AspNetCore.HttpOverrides/baseline.net45.json
================================================
{
  "AssemblyIdentity": "Microsoft.AspNetCore.HttpOverrides, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60",
  "Types": [
    {
      "Name": "Microsoft.AspNetCore.Builder.ForwardedHeadersExtensions",
      "Visibility": "Public",
      "Kind": "Class",
      "Abstract": true,
      "Static": true,
      "Sealed": true,
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "UseForwardedHeaders",
          "Parameters": [
            {
              "Name": "builder",
              "Type": "Microsoft.AspNetCore.Builder.IApplicationBuilder"
            }
          ],
          "ReturnType": "Microsoft.AspNetCore.Builder.IApplicationBuilder",
          "Static": true,
          "Extension": true,
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "UseForwardedHeaders",
          "Parameters": [
            {
              "Name": "builder",
              "Type": "Microsoft.AspNetCore.Builder.IApplicationBuilder"
            },
            {
              "Name": "options",
              "Type": "Microsoft.AspNetCore.Builder.ForwardedHeadersOptions"
            }
          ],
          "ReturnType": "Microsoft.AspNetCore.Builder.IApplicationBuilder",
          "Static": true,
          "Extension": true,
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.AspNetCore.Builder.ForwardedHeadersOptions",
      "Visibility": "Public",
      "Kind": "Class",
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "get_ForwardedHeaders",
          "Parameters": [],
          "ReturnType": "Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "set_ForwardedHeaders",
          "Parameters": [
            {
              "Name": "value",
              "Type": "Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders"
            }
          ],
          "ReturnType": "System.Void",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_ForwardLimit",
          "Parameters": [],
          "ReturnType": "System.Nullable<System.Int32>",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "set_ForwardLimit",
          "Parameters": [
            {
              "Name": "value",
              "Type": "System.Nullable<System.Int32>"
            }
          ],
          "ReturnType": "System.Void",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_KnownProxies",
          "Parameters": [],
          "ReturnType": "System.Collections.Generic.IList<System.Net.IPAddress>",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_KnownNetworks",
          "Parameters": [],
          "ReturnType": "System.Collections.Generic.IList<Microsoft.AspNetCore.HttpOverrides.IPNetwork>",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_RequireHeaderSymmetry",
          "Parameters": [],
          "ReturnType": "System.Boolean",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "set_RequireHeaderSymmetry",
          "Parameters": [
            {
              "Name": "value",
              "Type": "System.Boolean"
            }
          ],
          "ReturnType": "System.Void",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Constructor",
          "Name": ".ctor",
          "Parameters": [],
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.AspNetCore.Builder.HttpMethodOverrideExtensions",
      "Visibility": "Public",
      "Kind": "Class",
      "Abstract": true,
      "Static": true,
      "Sealed": true,
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "UseHttpMethodOverride",
          "Parameters": [
            {
              "Name": "builder",
              "Type": "Microsoft.AspNetCore.Builder.IApplicationBuilder"
            }
          ],
          "ReturnType": "Microsoft.AspNetCore.Builder.IApplicationBuilder",
          "Static": true,
          "Extension": true,
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "UseHttpMethodOverride",
          "Parameters": [
            {
              "Name": "builder",
              "Type": "Microsoft.AspNetCore.Builder.IApplicationBuilder"
            },
            {
              "Name": "options",
              "Type": "Microsoft.AspNetCore.Builder.HttpMethodOverrideOptions"
            }
          ],
          "ReturnType": "Microsoft.AspNetCore.Builder.IApplicationBuilder",
          "Static": true,
          "Extension": true,
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.AspNetCore.Builder.HttpMethodOverrideOptions",
      "Visibility": "Public",
      "Kind": "Class",
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "get_FormFieldName",
          "Parameters": [],
          "ReturnType": "System.String",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "set_FormFieldName",
          "Parameters": [
            {
              "Name": "value",
              "Type": "System.String"
            }
          ],
          "ReturnType": "System.Void",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Constructor",
          "Name": ".ctor",
          "Parameters": [],
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders",
      "Visibility": "Public",
      "Kind": "Enumeration",
      "Sealed": true,
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Field",
          "Name": "None",
          "Parameters": [],
          "GenericParameter": [],
          "Literal": "0"
        },
        {
          "Kind": "Field",
          "Name": "XForwardedFor",
          "Parameters": [],
          "GenericParameter": [],
          "Literal": "1"
        },
        {
          "Kind": "Field",
          "Name": "XForwardedHost",
          "Parameters": [],
          "GenericParameter": [],
          "Literal": "2"
        },
        {
          "Kind": "Field",
          "Name": "XForwardedProto",
          "Parameters": [],
          "GenericParameter": [],
          "Literal": "4"
        },
        {
          "Kind": "Field",
          "Name": "All",
          "Parameters": [],
          "GenericParameter": [],
          "Literal": "7"
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.AspNetCore.HttpOverrides.ForwardedHeadersMiddleware",
      "Visibility": "Public",
      "Kind": "Class",
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "Invoke",
          "Parameters": [
            {
              "Name": "context",
              "Type": "Microsoft.AspNetCore.Http.HttpContext"
            }
          ],
          "ReturnType": "System.Threading.Tasks.Task",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "ApplyForwarders",
          "Parameters": [
            {
              "Name": "context",
              "Type": "Microsoft.AspNetCore.Http.HttpContext"
            }
          ],
          "ReturnType": "System.Void",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Constructor",
          "Name": ".ctor",
          "Parameters": [
            {
              "Name": "next",
              "Type": "Microsoft.AspNetCore.Http.RequestDelegate"
            },
            {
              "Name": "loggerFactory",
              "Type": "Microsoft.Extensions.Logging.ILoggerFactory"
            },
            {
              "Name": "options",
              "Type": "Microsoft.Extensions.Options.IOptions<Microsoft.AspNetCore.Builder.ForwardedHeadersOptions>"
            }
          ],
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.AspNetCore.HttpOverrides.HttpMethodOverrideMiddleware",
      "Visibility": "Public",
      "Kind": "Class",
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "Invoke",
          "Parameters": [
            {
              "Name": "context",
              "Type": "Microsoft.AspNetCore.Http.HttpContext"
            }
          ],
          "ReturnType": "System.Threading.Tasks.Task",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Constructor",
          "Name": ".ctor",
          "Parameters": [
            {
              "Name": "next",
              "Type": "Microsoft.AspNetCore.Http.RequestDelegate"
            },
            {
              "Name": "options",
              "Type": "Microsoft.Extensions.Options.IOptions<Microsoft.AspNetCore.Builder.HttpMethodOverrideOptions>"
            }
          ],
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.AspNetCore.HttpOverrides.IPNetwork",
      "Visibility": "Public",
      "Kind": "Class",
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "get_Prefix",
          "Parameters": [],
          "ReturnType": "System.Net.IPAddress",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_PrefixLength",
          "Parameters": [],
          "ReturnType": "System.Int32",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "Contains",
          "Parameters": [
            {
              "Name": "address",
              "Type": "System.Net.IPAddress"
            }
          ],
          "ReturnType": "System.Boolean",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Constructor",
          "Name": ".ctor",
          "Parameters": [
            {
              "Name": "prefix",
              "Type": "System.Net.IPAddress"
            },
            {
              "Name": "prefixLength",
              "Type": "System.Int32"
            }
          ],
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.AspNetCore.HttpOverrides.Internal.IPEndPointParser",
      "Visibility": "Public",
      "Kind": "Class",
      "Abstract": true,
      "Static": true,
      "Sealed": true,
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "TryParse",
          "Parameters": [
            {
              "Name": "addressWithPort",
              "Type": "System.String"
            },
            {
              "Name": "endpoint",
              "Type": "System.Net.IPEndPoint",
              "Direction": "Out"
            }
          ],
          "ReturnType": "System.Boolean",
          "Static": true,
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    }
  ]
}

================================================
FILE: src/Microsoft.AspNetCore.HttpOverrides/baseline.netcore.json
================================================
{
  "AssemblyIdentity": "Microsoft.AspNetCore.HttpOverrides, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60",
  "Types": [
    {
      "Name": "Microsoft.AspNetCore.Builder.ForwardedHeadersExtensions",
      "Visibility": "Public",
      "Kind": "Class",
      "Abstract": true,
      "Static": true,
      "Sealed": true,
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "UseForwardedHeaders",
          "Parameters": [
            {
              "Name": "builder",
              "Type": "Microsoft.AspNetCore.Builder.IApplicationBuilder"
            }
          ],
          "ReturnType": "Microsoft.AspNetCore.Builder.IApplicationBuilder",
          "Static": true,
          "Extension": true,
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "UseForwardedHeaders",
          "Parameters": [
            {
              "Name": "builder",
              "Type": "Microsoft.AspNetCore.Builder.IApplicationBuilder"
            },
            {
              "Name": "options",
              "Type": "Microsoft.AspNetCore.Builder.ForwardedHeadersOptions"
            }
          ],
          "ReturnType": "Microsoft.AspNetCore.Builder.IApplicationBuilder",
          "Static": true,
          "Extension": true,
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.AspNetCore.Builder.ForwardedHeadersOptions",
      "Visibility": "Public",
      "Kind": "Class",
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "get_ForwardedForHeaderName",
          "Parameters": [],
          "ReturnType": "System.String",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "set_ForwardedForHeaderName",
          "Parameters": [
            {
              "Name": "value",
              "Type": "System.String"
            }
          ],
          "ReturnType": "System.Void",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_ForwardedHostHeaderName",
          "Parameters": [],
          "ReturnType": "System.String",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "set_ForwardedHostHeaderName",
          "Parameters": [
            {
              "Name": "value",
              "Type": "System.String"
            }
          ],
          "ReturnType": "System.Void",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_ForwardedProtoHeaderName",
          "Parameters": [],
          "ReturnType": "System.String",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "set_ForwardedProtoHeaderName",
          "Parameters": [
            {
              "Name": "value",
              "Type": "System.String"
            }
          ],
          "ReturnType": "System.Void",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_OriginalForHeaderName",
          "Parameters": [],
          "ReturnType": "System.String",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "set_OriginalForHeaderName",
          "Parameters": [
            {
              "Name": "value",
              "Type": "System.String"
            }
          ],
          "ReturnType": "System.Void",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_OriginalHostHeaderName",
          "Parameters": [],
          "ReturnType": "System.String",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "set_OriginalHostHeaderName",
          "Parameters": [
            {
              "Name": "value",
              "Type": "System.String"
            }
          ],
          "ReturnType": "System.Void",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_OriginalProtoHeaderName",
          "Parameters": [],
          "ReturnType": "System.String",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "set_OriginalProtoHeaderName",
          "Parameters": [
            {
              "Name": "value",
              "Type": "System.String"
            }
          ],
          "ReturnType": "System.Void",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_ForwardedHeaders",
          "Parameters": [],
          "ReturnType": "Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "set_ForwardedHeaders",
          "Parameters": [
            {
              "Name": "value",
              "Type": "Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders"
            }
          ],
          "ReturnType": "System.Void",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_ForwardLimit",
          "Parameters": [],
          "ReturnType": "System.Nullable<System.Int32>",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "set_ForwardLimit",
          "Parameters": [
            {
              "Name": "value",
              "Type": "System.Nullable<System.Int32>"
            }
          ],
          "ReturnType": "System.Void",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_KnownProxies",
          "Parameters": [],
          "ReturnType": "System.Collections.Generic.IList<System.Net.IPAddress>",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_KnownNetworks",
          "Parameters": [],
          "ReturnType": "System.Collections.Generic.IList<Microsoft.AspNetCore.HttpOverrides.IPNetwork>",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_AllowedHosts",
          "Parameters": [],
          "ReturnType": "System.Collections.Generic.IList<System.String>",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "set_AllowedHosts",
          "Parameters": [
            {
              "Name": "value",
              "Type": "System.Collections.Generic.IList<System.String>"
            }
          ],
          "ReturnType": "System.Void",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_RequireHeaderSymmetry",
          "Parameters": [],
          "ReturnType": "System.Boolean",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "set_RequireHeaderSymmetry",
          "Parameters": [
            {
              "Name": "value",
              "Type": "System.Boolean"
            }
          ],
          "ReturnType": "System.Void",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Constructor",
          "Name": ".ctor",
          "Parameters": [],
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.AspNetCore.Builder.HttpMethodOverrideExtensions",
      "Visibility": "Public",
      "Kind": "Class",
      "Abstract": true,
      "Static": true,
      "Sealed": true,
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "UseHttpMethodOverride",
          "Parameters": [
            {
              "Name": "builder",
              "Type": "Microsoft.AspNetCore.Builder.IApplicationBuilder"
            }
          ],
          "ReturnType": "Microsoft.AspNetCore.Builder.IApplicationBuilder",
          "Static": true,
          "Extension": true,
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "UseHttpMethodOverride",
          "Parameters": [
            {
              "Name": "builder",
              "Type": "Microsoft.AspNetCore.Builder.IApplicationBuilder"
            },
            {
              "Name": "options",
              "Type": "Microsoft.AspNetCore.Builder.HttpMethodOverrideOptions"
            }
          ],
          "ReturnType": "Microsoft.AspNetCore.Builder.IApplicationBuilder",
          "Static": true,
          "Extension": true,
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.AspNetCore.Builder.HttpMethodOverrideOptions",
      "Visibility": "Public",
      "Kind": "Class",
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "get_FormFieldName",
          "Parameters": [],
          "ReturnType": "System.String",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "set_FormFieldName",
          "Parameters": [
            {
              "Name": "value",
              "Type": "System.String"
            }
          ],
          "ReturnType": "System.Void",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Constructor",
          "Name": ".ctor",
          "Parameters": [],
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders",
      "Visibility": "Public",
      "Kind": "Enumeration",
      "Sealed": true,
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Field",
          "Name": "None",
          "Parameters": [],
          "GenericParameter": [],
          "Literal": "0"
        },
        {
          "Kind": "Field",
          "Name": "XForwardedFor",
          "Parameters": [],
          "GenericParameter": [],
          "Literal": "1"
        },
        {
          "Kind": "Field",
          "Name": "XForwardedHost",
          "Parameters": [],
          "GenericParameter": [],
          "Literal": "2"
        },
        {
          "Kind": "Field",
          "Name": "XForwardedProto",
          "Parameters": [],
          "GenericParameter": [],
          "Literal": "4"
        },
        {
          "Kind": "Field",
          "Name": "All",
          "Parameters": [],
          "GenericParameter": [],
          "Literal": "7"
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.AspNetCore.HttpOverrides.ForwardedHeadersDefaults",
      "Visibility": "Public",
      "Kind": "Class",
      "Abstract": true,
      "Static": true,
      "Sealed": true,
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "get_XForwardedForHeaderName",
          "Parameters": [],
          "ReturnType": "System.String",
          "Static": true,
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_XForwardedHostHeaderName",
          "Parameters": [],
          "ReturnType": "System.String",
          "Static": true,
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_XForwardedProtoHeaderName",
          "Parameters": [],
          "ReturnType": "System.String",
          "Static": true,
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_XOriginalForHeaderName",
          "Parameters": [],
          "ReturnType": "System.String",
          "Static": true,
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_XOriginalHostHeaderName",
          "Parameters": [],
          "ReturnType": "System.String",
          "Static": true,
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_XOriginalProtoHeaderName",
          "Parameters": [],
          "ReturnType": "System.String",
          "Static": true,
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.AspNetCore.HttpOverrides.ForwardedHeadersMiddleware",
      "Visibility": "Public",
      "Kind": "Class",
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "Invoke",
          "Parameters": [
            {
              "Name": "context",
              "Type": "Microsoft.AspNetCore.Http.HttpContext"
            }
          ],
          "ReturnType": "System.Threading.Tasks.Task",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "ApplyForwarders",
          "Parameters": [
            {
              "Name": "context",
              "Type": "Microsoft.AspNetCore.Http.HttpContext"
            }
          ],
          "ReturnType": "System.Void",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Constructor",
          "Name": ".ctor",
          "Parameters": [
            {
              "Name": "next",
              "Type": "Microsoft.AspNetCore.Http.RequestDelegate"
            },
            {
              "Name": "loggerFactory",
              "Type": "Microsoft.Extensions.Logging.ILoggerFactory"
            },
            {
              "Name": "options",
              "Type": "Microsoft.Extensions.Options.IOptions<Microsoft.AspNetCore.Builder.ForwardedHeadersOptions>"
            }
          ],
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.AspNetCore.HttpOverrides.HttpMethodOverrideMiddleware",
      "Visibility": "Public",
      "Kind": "Class",
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "Invoke",
          "Parameters": [
            {
              "Name": "context",
              "Type": "Microsoft.AspNetCore.Http.HttpContext"
            }
          ],
          "ReturnType": "System.Threading.Tasks.Task",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Constructor",
          "Name": ".ctor",
          "Parameters": [
            {
              "Name": "next",
              "Type": "Microsoft.AspNetCore.Http.RequestDelegate"
            },
            {
              "Name": "options",
              "Type": "Microsoft.Extensions.Options.IOptions<Microsoft.AspNetCore.Builder.HttpMethodOverrideOptions>"
            }
          ],
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.AspNetCore.HttpOverrides.IPNetwork",
      "Visibility": "Public",
      "Kind": "Class",
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "get_Prefix",
          "Parameters": [],
          "ReturnType": "System.Net.IPAddress",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_PrefixLength",
          "Parameters": [],
          "ReturnType": "System.Int32",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "Contains",
          "Parameters": [
            {
              "Name": "address",
              "Type": "System.Net.IPAddress"
            }
          ],
          "ReturnType": "System.Boolean",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Constructor",
          "Name": ".ctor",
          "Parameters": [
            {
              "Name": "prefix",
              "Type": "System.Net.IPAddress"
            },
            {
              "Name": "prefixLength",
              "Type": "System.Int32"
            }
          ],
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    }
  ]
}

================================================
FILE: src/Microsoft.AspNetCore.HttpsPolicy/HstsBuilderExtensions.cs
================================================
// 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 Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.Extensions.Options;

namespace Microsoft.AspNetCore.Builder
{
    /// <summary>
    /// Extension methods for the HSTS middleware.
    /// </summary>
    public static class HstsBuilderExtensions
    {
        /// <summary>
        /// Adds middleware for using HSTS, which adds the Strict-Transport-Security header.
        /// </summary>
        /// <param name="app">The <see cref="IApplicationBuilder"/> instance this method extends.</param>
        public static IApplicationBuilder UseHsts(this IApplicationBuilder app)
        {
            if (app == null)
            {
                throw new ArgumentNullException(nameof(app));
            }

            return app.UseMiddleware<HstsMiddleware>();
        }
    }
}


================================================
FILE: src/Microsoft.AspNetCore.HttpsPolicy/HstsMiddleware.cs
================================================
// 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.Collections.Generic;
using System.Globalization;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.HttpsPolicy.Internal;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Primitives;
using Microsoft.Net.Http.Headers;

namespace Microsoft.AspNetCore.HttpsPolicy
{
    /// <summary>
    /// Enables HTTP Strict Transport Security (HSTS)
    /// See https://tools.ietf.org/html/rfc6797.
    /// </summary>
    public class HstsMiddleware
    {
        private const string IncludeSubDomains = "; includeSubDomains";
        private const string Preload = "; preload";

        private readonly RequestDelegate _next;
        private readonly StringValues _strictTransportSecurityValue;
        private readonly IList<string> _excludedHosts;
        private readonly ILogger _logger;

        /// <summary>
        /// Initialize the HSTS middleware.
        /// </summary>
        /// <param name="next"></param>
        /// <param name="options"></param>
        /// <param name="loggerFactory"></param>
        public HstsMiddleware(RequestDelegate next, IOptions<HstsOptions> options, ILoggerFactory loggerFactory)
        {
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            _next = next ?? throw new ArgumentNullException(nameof(next));

            var hstsOptions = options.Value;
            var maxAge = Convert.ToInt64(Math.Floor(hstsOptions.MaxAge.TotalSeconds))
                            .ToString(CultureInfo.InvariantCulture);
            var includeSubdomains = hstsOptions.IncludeSubDomains ? IncludeSubDomains : StringSegment.Empty;
            var preload = hstsOptions.Preload ? Preload : StringSegment.Empty;
            _strictTransportSecurityValue = new StringValues($"max-age={maxAge}{includeSubdomains}{preload}");
            _excludedHosts = hstsOptions.ExcludedHosts;
            _logger = loggerFactory.CreateLogger<HstsMiddleware>();
        }

        /// <summary>
        /// Initialize the HSTS middleware.
        /// </summary>
        /// <param name="next"></param>
        /// <param name="options"></param>
        public HstsMiddleware(RequestDelegate next, IOptions<HstsOptions> options)
            : this(next, options, NullLoggerFactory.Instance) { }

        /// <summary>
        /// Invoke the middleware.
        /// </summary>
        /// <param name="context">The <see cref="HttpContext"/>.</param>
        /// <returns></returns>
        public Task Invoke(HttpContext context)
        {
            if (!context.Request.IsHttps)
            {
                _logger.SkippingInsecure();
                return _next(context);
            }

            if (IsHostExcluded(context.Request.Host.Host))
            {
                _logger.SkippingExcludedHost(context.Request.Host.Host);
                return _next(context);
            }

            context.Response.Headers[HeaderNames.StrictTransportSecurity] = _strictTransportSecurityValue;
            _logger.AddingHstsHeader();

            return _next(context);
        }

        private bool IsHostExcluded(string host)
        {
            if (_excludedHosts == null)
            {
                return false;
            }

            for (var i = 0; i < _excludedHosts.Count; i++)
            {
                if (string.Equals(host, _excludedHosts[i], StringComparison.OrdinalIgnoreCase))
                {
                    return true;
                }
            }
            return false;
        }
    }
}


================================================
FILE: src/Microsoft.AspNetCore.HttpsPolicy/HstsOptions.cs
================================================
// 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.Collections.Generic;

namespace Microsoft.AspNetCore.HttpsPolicy
{
    /// <summary>
    /// Options for the Hsts Middleware
    /// </summary>
    public class HstsOptions
    {
        /// <summary>
        /// Sets the max-age parameter of the Strict-Transport-Security header.
        /// </summary>
        /// <remarks>
        /// Max-age is required; defaults to 30 days.
        /// See: https://tools.ietf.org/html/rfc6797#section-6.1.1
        /// </remarks>
        public TimeSpan MaxAge { get; set; } = TimeSpan.FromDays(30);

        /// <summary>
        /// Enables includeSubDomain parameter of the Strict-Transport-Securit
Download .txt
gitextract_jlb0z59u/

├── .appveyor.yml
├── .gitattributes
├── .gitignore
├── .travis.yml
├── .vsts-pipelines/
│   └── builds/
│       ├── ci-internal.yml
│       └── ci-public.yml
├── BasicMiddleware.sln
├── CONTRIBUTING.md
├── Directory.Build.props
├── Directory.Build.targets
├── LICENSE.txt
├── NuGet.config
├── NuGetPackageVerifier.json
├── README.md
├── benchmarks/
│   └── Microsoft.AspNetCore.ResponseCompression.Benchmarks/
│       ├── AssemblyInfo.cs
│       ├── Microsoft.AspNetCore.ResponseCompression.Benchmarks.csproj
│       └── ResponseCompressionProviderBenchmark.cs
├── build/
│   ├── Key.snk
│   ├── dependencies.props
│   ├── repo.props
│   └── sources.props
├── build.cmd
├── build.sh
├── korebuild-lock.txt
├── korebuild.json
├── run.cmd
├── run.ps1
├── run.sh
├── samples/
│   ├── HostFilteringSample/
│   │   ├── HostFilteringSample.csproj
│   │   ├── Program.cs
│   │   ├── Properties/
│   │   │   └── launchSettings.json
│   │   ├── Startup.cs
│   │   ├── appsettings.Development.json
│   │   ├── appsettings.Production.json
│   │   └── appsettings.json
│   ├── HttpOverridesSample/
│   │   ├── HttpOverridesSample.csproj
│   │   ├── Properties/
│   │   │   └── launchSettings.json
│   │   └── Startup.cs
│   ├── HttpsPolicySample/
│   │   ├── HttpsPolicySample.csproj
│   │   ├── Properties/
│   │   │   └── launchSettings.json
│   │   ├── Startup.cs
│   │   └── testCert.pfx
│   ├── ResponseBufferingSample/
│   │   ├── Properties/
│   │   │   └── launchSettings.json
│   │   ├── ResponseBufferingSample.csproj
│   │   └── Startup.cs
│   ├── ResponseCompressionSample/
│   │   ├── CustomCompressionProvider.cs
│   │   ├── LoremIpsum.cs
│   │   ├── Properties/
│   │   │   └── launchSettings.json
│   │   ├── ResponseCompressionSample.csproj
│   │   ├── Startup.cs
│   │   └── testfile1kb.txt
│   └── RewriteSample/
│       ├── Properties/
│       │   └── launchSettings.json
│       ├── Rewrite.txt
│       ├── RewriteSample.csproj
│       ├── Startup.cs
│       ├── UrlRewrite.xml
│       └── testCert.pfx
├── src/
│   ├── Directory.Build.props
│   ├── Microsoft.AspNetCore.Buffering/
│   │   ├── BufferingWriteStream.cs
│   │   ├── HttpBufferingFeature.cs
│   │   ├── Microsoft.AspNetCore.Buffering.csproj
│   │   ├── ResponseBufferingMiddleware.cs
│   │   ├── ResponseBufferingMiddlewareExtensions.cs
│   │   └── SendFileFeatureWrapper.cs
│   ├── Microsoft.AspNetCore.HostFiltering/
│   │   ├── HostFilteringBuilderExtensions.cs
│   │   ├── HostFilteringMiddleware.cs
│   │   ├── HostFilteringOptions.cs
│   │   ├── HostFilteringServicesExtensions.cs
│   │   ├── Microsoft.AspNetCore.HostFiltering.csproj
│   │   └── baseline.netcore.json
│   ├── Microsoft.AspNetCore.HttpOverrides/
│   │   ├── ForwardedHeaders.cs
│   │   ├── ForwardedHeadersDefaults.cs
│   │   ├── ForwardedHeadersExtensions.cs
│   │   ├── ForwardedHeadersMiddleware.cs
│   │   ├── ForwardedHeadersOptions.cs
│   │   ├── HttpMethodOverrideExtensions.cs
│   │   ├── HttpMethodOverrideMiddleware.cs
│   │   ├── HttpMethodOverrideOptions.cs
│   │   ├── IPNetwork.cs
│   │   ├── Internal/
│   │   │   └── IPEndPointParser.cs
│   │   ├── Microsoft.AspNetCore.HttpOverrides.csproj
│   │   ├── baseline.net45.json
│   │   └── baseline.netcore.json
│   ├── Microsoft.AspNetCore.HttpsPolicy/
│   │   ├── HstsBuilderExtensions.cs
│   │   ├── HstsMiddleware.cs
│   │   ├── HstsOptions.cs
│   │   ├── HstsServicesExtensions.cs
│   │   ├── HttpsRedirectionBuilderExtensions.cs
│   │   ├── HttpsRedirectionMiddleware.cs
│   │   ├── HttpsRedirectionOptions.cs
│   │   ├── HttpsRedirectionServicesExtensions.cs
│   │   ├── Microsoft.AspNetCore.HttpsPolicy.csproj
│   │   ├── baseline.netcore.json
│   │   └── internal/
│   │       ├── HstsLoggingExtensions.cs
│   │       └── HttpsLoggingExtensions.cs
│   ├── Microsoft.AspNetCore.ResponseCompression/
│   │   ├── BodyWrapperStream.cs
│   │   ├── BrotliCompressionProvider.cs
│   │   ├── BrotliCompressionProviderOptions.cs
│   │   ├── CompressionProviderCollection.cs
│   │   ├── CompressionProviderFactory.cs
│   │   ├── GzipCompressionProvider.cs
│   │   ├── GzipCompressionProviderOptions.cs
│   │   ├── ICompressionProvider.cs
│   │   ├── IResponseCompressionProvider.cs
│   │   ├── Microsoft.AspNetCore.ResponseCompression.csproj
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── ResponseCompressionBuilderExtensions.cs
│   │   ├── ResponseCompressionDefaults.cs
│   │   ├── ResponseCompressionMiddleware.cs
│   │   ├── ResponseCompressionOptions.cs
│   │   ├── ResponseCompressionProvider.cs
│   │   ├── ResponseCompressionServicesExtensions.cs
│   │   ├── baseline.netcore.json
│   │   ├── baseline.netframework.json
│   │   └── internal/
│   │       └── ResponseCompressionLoggingExtensions.cs
│   └── Microsoft.AspNetCore.Rewrite/
│       ├── ApacheModRewriteOptionsExtensions.cs
│       ├── Extensions/
│       │   └── RewriteMiddlewareLoggingExtensions.cs
│       ├── IISUrlRewriteOptionsExtensions.cs
│       ├── IRule.cs
│       ├── Internal/
│       │   ├── ApacheModRewrite/
│       │   │   ├── ApacheModRewriteRule.cs
│       │   │   ├── Condition.cs
│       │   │   ├── ConditionEvaluator.cs
│       │   │   ├── ConditionPatternParser.cs
│       │   │   ├── ConditionType.cs
│       │   │   ├── CookieActionFactory.cs
│       │   │   ├── FileParser.cs
│       │   │   ├── FlagParser.cs
│       │   │   ├── FlagType.cs
│       │   │   ├── Flags.cs
│       │   │   ├── OperationType.cs
│       │   │   ├── ParsedModRewriteCondition.cs
│       │   │   ├── RuleBuilder.cs
│       │   │   ├── RuleRegexParser.cs
│       │   │   ├── SegmentType.cs
│       │   │   ├── ServerVariables.cs
│       │   │   ├── TestStringParser.cs
│       │   │   └── Tokenizer.cs
│       │   ├── BackReferenceCollection.cs
│       │   ├── DelegateRule.cs
│       │   ├── IISUrlRewrite/
│       │   │   ├── ActionType.cs
│       │   │   ├── Condition.cs
│       │   │   ├── ConditionCollection.cs
│       │   │   ├── ConditionEvaluator.cs
│       │   │   ├── IISRewriteMap.cs
│       │   │   ├── IISRewriteMapCollection.cs
│       │   │   ├── IISUrlRewriteRule.cs
│       │   │   ├── InputParser.cs
│       │   │   ├── InvalidUrlRewriteFormatException.cs
│       │   │   ├── LogicalGrouping.cs
│       │   │   ├── MatchType.cs
│       │   │   ├── PatternSyntax.cs
│       │   │   ├── RedirectType.cs
│       │   │   ├── RewriteMapParser.cs
│       │   │   ├── RewriteTags.cs
│       │   │   ├── ServerVariables.cs
│       │   │   ├── UriMatchCondition.cs
│       │   │   ├── UriMatchPart.cs
│       │   │   ├── UrlRewriteFileParser.cs
│       │   │   └── UrlRewriteRuleBuilder.cs
│       │   ├── MatchResults.cs
│       │   ├── ParserContext.cs
│       │   ├── Pattern.cs
│       │   ├── PatternSegment.cs
│       │   ├── PatternSegments/
│       │   │   ├── ConditionMatchSegment.cs
│       │   │   ├── DateTimeSegment.cs
│       │   │   ├── HeaderSegment.cs
│       │   │   ├── IsHttpsModSegment.cs
│       │   │   ├── IsHttpsUrlSegment.cs
│       │   │   ├── IsIPV6Segment.cs
│       │   │   ├── LiteralSegment.cs
│       │   │   ├── LocalAddressSegment.cs
│       │   │   ├── LocalPortSegment.cs
│       │   │   ├── QueryStringSegment.cs
│       │   │   ├── RemoteAddressSegment.cs
│       │   │   ├── RemotePortSegment.cs
│       │   │   ├── RequestFilenameSegment.cs
│       │   │   ├── RequestMethodSegment.cs
│       │   │   ├── RewriteMapSegment.cs
│       │   │   ├── RuleMatchSegment.cs
│       │   │   ├── SchemeSegment.cs
│       │   │   ├── ServerProtocolSegment.cs
│       │   │   ├── ToLowerSegment.cs
│       │   │   ├── UrlEncodeSegment.cs
│       │   │   └── UrlSegment.cs
│       │   ├── RedirectRule.cs
│       │   ├── RedirectToHttpsRule.cs
│       │   ├── RedirectToWwwRule.cs
│       │   ├── RewriteRule.cs
│       │   ├── UrlAction.cs
│       │   ├── UrlActions/
│       │   │   ├── AbortAction.cs
│       │   │   ├── ChangeCookieAction.cs
│       │   │   ├── CustomResponseAction.cs
│       │   │   ├── ForbiddenAction.cs
│       │   │   ├── GoneAction.cs
│       │   │   ├── NoneAction.cs
│       │   │   ├── RedirectAction.cs
│       │   │   └── RewriteAction.cs
│       │   ├── UrlMatch.cs
│       │   └── UrlMatches/
│       │       ├── ExactMatch.cs
│       │       ├── FileSizeMatch.cs
│       │       ├── IntegerMatch.cs
│       │       ├── IntegerOperation.cs
│       │       ├── IsDirectoryMatch.cs
│       │       ├── IsFileMatch.cs
│       │       ├── RegexMatch.cs
│       │       ├── StringMatch.cs
│       │       └── StringOperation.cs
│       ├── Microsoft.AspNetCore.Rewrite.csproj
│       ├── Properties/
│       │   ├── AssemblyInfo.cs
│       │   └── Resources.Designer.cs
│       ├── Resources.resx
│       ├── RewriteBuilderExtensions.cs
│       ├── RewriteContext.cs
│       ├── RewriteMiddleware.cs
│       ├── RewriteOptions.cs
│       ├── RewriteOptionsExtensions.cs
│       ├── RuleResult.cs
│       └── baseline.netcore.json
├── test/
│   ├── Directory.Build.props
│   ├── Microsoft.AspNetCore.Buffering.Tests/
│   │   ├── Microsoft.AspNetCore.Buffering.Tests.csproj
│   │   └── ResponseBufferingMiddlewareTests.cs
│   ├── Microsoft.AspNetCore.HostFiltering.Tests/
│   │   ├── HostFilteringMiddlewareTests.cs
│   │   └── Microsoft.AspNetCore.HostFiltering.Tests.csproj
│   ├── Microsoft.AspNetCore.HttpOverrides.Tests/
│   │   ├── ForwardedHeadersMiddlewareTest.cs
│   │   ├── HttpMethodOverrideMiddlewareTest.cs
│   │   ├── IPEndPointParserTest.cs
│   │   ├── IPNetworkTest.cs
│   │   └── Microsoft.AspNetCore.HttpOverrides.Tests.csproj
│   ├── Microsoft.AspNetCore.HttpsPolicy.Tests/
│   │   ├── HstsMiddlewareTests.cs
│   │   ├── HttpsPolicyTests.cs
│   │   ├── HttpsRedirectionMiddlewareTests.cs
│   │   └── Microsoft.AspNetCore.HttpsPolicy.Tests.csproj
│   ├── Microsoft.AspNetCore.ResponseCompression.Tests/
│   │   ├── BodyWrapperStreamTests.cs
│   │   ├── Microsoft.AspNetCore.ResponseCompression.Tests.csproj
│   │   ├── ResponseCompressionMiddlewareTest.cs
│   │   └── testfile1kb.txt
│   └── Microsoft.AspNetCore.Rewrite.Tests/
│       ├── ApacheModRewrite/
│       │   ├── ConditionPatternParserTest.cs
│       │   ├── CookieActionFactoryTest.cs
│       │   ├── FlagParserTest.cs
│       │   ├── FormatExceptionTests.cs
│       │   ├── ModRewriteMiddlewareTest.cs
│       │   ├── RewriteTokenizerTest.cs
│       │   ├── RuleBuilderTest.cs
│       │   ├── RuleRegexParserTest.cs
│       │   └── TestStringParserTests.cs
│       ├── IISUrlRewrite/
│       │   ├── FileParserTests.cs
│       │   ├── FormatExceptionHandlingTests.cs
│       │   ├── InputParserTests.cs
│       │   ├── InvalidUrlRewriteFormatExceptionHandlingTests.cs
│       │   ├── MiddleWareTests.cs
│       │   ├── RewriteMapParserTests.cs
│       │   ├── ServerVariableTests.cs
│       │   └── UrlRewriteApplicationTests.cs
│       ├── Microsoft.AspNetCore.Rewrite.Tests.csproj
│       ├── MiddlewareTests.cs
│       ├── PatternSegments/
│       │   ├── ConditionMatchSegmentTests.cs
│       │   ├── DateTimeSegmentTests.cs
│       │   ├── HeaderSegmentTests.cs
│       │   ├── IsHttpsModSegmentTests.cs
│       │   ├── IsHttpsSegmentTests.cs
│       │   ├── IsIPV6SegmentTests.cs
│       │   ├── LIteralSegmentTests.cs
│       │   ├── LocalAddressSegmentTests.cs
│       │   ├── LocalPortSegmentTests.cs
│       │   ├── QueryStringSegmentTests.cs
│       │   ├── RemoteAddressSegmentTests.cs
│       │   ├── RemotePortSegmentTests.cs
│       │   ├── RequestFilenameSegmentTests.cs
│       │   ├── RequestMethodSegmentTests.cs
│       │   ├── RuleMatchSegmentTests.cs
│       │   ├── SchemeSegmentTests.cs
│       │   ├── ServerProtocolSegmentTests.cs
│       │   ├── ToLowerSegmentTests.cs
│       │   ├── UrlEncodeSegmentTests.cs
│       │   └── UrlSegmentTests.cs
│       ├── UrlActions/
│       │   ├── AbortActionTests.cs
│       │   ├── ChangeCookieActionTests.cs
│       │   ├── ForbiddenActionTests.cs
│       │   └── GoneActionTests.cs
│       └── UrlMatches/
│           ├── ExactMatchTests.cs
│           ├── IntegerMatchTests.cs
│           └── StringMatchTests.cs
└── version.props
Download .txt
SYMBOL INDEX (873 symbols across 210 files)

FILE: benchmarks/Microsoft.AspNetCore.ResponseCompression.Benchmarks/ResponseCompressionProviderBenchmark.cs
  class ResponseCompressionProviderBenchmark (line 14) | public class ResponseCompressionProviderBenchmark
    method GlobalSetup (line 16) | [GlobalSetup]
    method EncodingStrings (line 32) | public static IEnumerable<string> EncodingStrings()
    method GetCompressionProvider (line 47) | [Benchmark]

FILE: samples/HostFilteringSample/Program.cs
  class Program (line 10) | public class Program
    method Main (line 12) | public static void Main(string[] args)
    method BuildWebHost (line 17) | public static IWebHost BuildWebHost(string[] args)

FILE: samples/HostFilteringSample/Startup.cs
  class Startup (line 16) | public class Startup
    method Startup (line 20) | public Startup(IConfiguration config)
    method ConfigureServices (line 25) | public void ConfigureServices(IServiceCollection services)
    method Configure (line 47) | public void Configure(IApplicationBuilder app, IHostingEnvironment env)

FILE: samples/HttpOverridesSample/Startup.cs
  class Startup (line 8) | public class Startup
    method Configure (line 11) | public void Configure(IApplicationBuilder app)
    method Main (line 33) | public static void Main(string[] args)

FILE: samples/HttpsPolicySample/Startup.cs
  class Startup (line 16) | public class Startup
    method ConfigureServices (line 20) | public void ConfigureServices(IServiceCollection services)
    method Configure (line 36) | public void Configure(IApplicationBuilder app, IHostingEnvironment env...
    method Main (line 51) | public static void Main(string[] args)

FILE: samples/ResponseBufferingSample/Startup.cs
  class Startup (line 8) | public class Startup
    method ConfigureServices (line 11) | public void ConfigureServices(IServiceCollection services)
    method Configure (line 15) | public void Configure(IApplicationBuilder app)
    method Main (line 38) | public static void Main(string[] args)

FILE: samples/ResponseCompressionSample/CustomCompressionProvider.cs
  class CustomCompressionProvider (line 6) | public class CustomCompressionProvider : ICompressionProvider
    method CreateStream (line 12) | public Stream CreateStream(Stream outputStream)

FILE: samples/ResponseCompressionSample/LoremIpsum.cs
  class LoremIpsum (line 6) | internal static class LoremIpsum

FILE: samples/ResponseCompressionSample/Startup.cs
  class Startup (line 18) | public class Startup
    method ConfigureServices (line 20) | public void ConfigureServices(IServiceCollection services)
    method Configure (line 37) | public void Configure(IApplicationBuilder app)
    method Main (line 74) | public static void Main(string[] args)

FILE: samples/RewriteSample/Startup.cs
  class Startup (line 14) | public class Startup
    method Startup (line 16) | public Startup(IHostingEnvironment environment)
    method ConfigureServices (line 23) | public void ConfigureServices(IServiceCollection services)
    method Configure (line 35) | public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    method Main (line 45) | public static void Main(string[] args)

FILE: src/Microsoft.AspNetCore.Buffering/BufferingWriteStream.cs
  class BufferingWriteStream (line 11) | internal class BufferingWriteStream : Stream
    method BufferingWriteStream (line 17) | public BufferingWriteStream(Stream innerStream)
    method SetLength (line 82) | public override void SetLength(long value)
    method Seek (line 101) | public override long Seek(long offset, SeekOrigin origin)
    method DisableBuffering (line 120) | internal void DisableBuffering()
    method DisableBufferingAsync (line 129) | internal Task DisableBufferingAsync(CancellationToken cancellationToken)
    method Write (line 139) | public override void Write(byte[] buffer, int offset, int count)
    method WriteAsync (line 151) | public override Task WriteAsync(byte[] buffer, int offset, int count, ...
    method BeginWrite (line 163) | public override IAsyncResult BeginWrite(byte[] buffer, int offset, int...
    method EndWrite (line 175) | public override void EndWrite(IAsyncResult asyncResult)
    method Flush (line 187) | public override void Flush()
    method FlushAsync (line 200) | public override async Task FlushAsync(CancellationToken cancellationTo...
    method Read (line 213) | public override int Read(byte[] buffer, int offset, int count)

FILE: src/Microsoft.AspNetCore.Buffering/HttpBufferingFeature.cs
  class HttpBufferingFeature (line 8) | internal class HttpBufferingFeature : IHttpBufferingFeature
    method HttpBufferingFeature (line 13) | internal HttpBufferingFeature(BufferingWriteStream buffer, IHttpBuffer...
    method DisableRequestBuffering (line 19) | public void DisableRequestBuffering()
    method DisableResponseBuffering (line 24) | public void DisableResponseBuffering()

FILE: src/Microsoft.AspNetCore.Buffering/ResponseBufferingMiddleware.cs
  class ResponseBufferingMiddleware (line 10) | public class ResponseBufferingMiddleware
    method ResponseBufferingMiddleware (line 14) | public ResponseBufferingMiddleware(RequestDelegate next)
    method Invoke (line 19) | public async Task Invoke(HttpContext httpContext)

FILE: src/Microsoft.AspNetCore.Buffering/ResponseBufferingMiddlewareExtensions.cs
  class ResponseBufferingMiddlewareExtensions (line 8) | public static class ResponseBufferingMiddlewareExtensions
    method UseResponseBuffering (line 15) | public static IApplicationBuilder UseResponseBuffering(this IApplicati...

FILE: src/Microsoft.AspNetCore.Buffering/SendFileFeatureWrapper.cs
  class SendFileFeatureWrapper (line 10) | internal class SendFileFeatureWrapper : IHttpSendFileFeature
    method SendFileFeatureWrapper (line 15) | public SendFileFeatureWrapper(IHttpSendFileFeature originalSendFileFea...
    method SendFileAsync (line 22) | public async Task SendFileAsync(string path, long offset, long? length...

FILE: src/Microsoft.AspNetCore.HostFiltering/HostFilteringBuilderExtensions.cs
  class HostFilteringBuilderExtensions (line 12) | public static class HostFilteringBuilderExtensions
    method UseHostFiltering (line 20) | public static IApplicationBuilder UseHostFiltering(this IApplicationBu...

FILE: src/Microsoft.AspNetCore.HostFiltering/HostFilteringMiddleware.cs
  class HostFilteringMiddleware (line 20) | public class HostFilteringMiddleware
    method HostFilteringMiddleware (line 44) | public HostFilteringMiddleware(RequestDelegate next, ILogger<HostFilte...
    method Invoke (line 65) | public Task Invoke(HttpContext context)
    method EnsureConfigured (line 84) | private IList<StringSegment> EnsureConfigured()
    method TryProcessHosts (line 115) | private bool TryProcessHosts(IEnumerable<string> incoming, IList<Strin...
    method IsTopLevelWildcard (line 137) | private bool IsTopLevelWildcard(string host)
    method CheckHost (line 145) | private bool CheckHost(HttpContext context, IList<StringSegment> allow...

FILE: src/Microsoft.AspNetCore.HostFiltering/HostFilteringOptions.cs
  class HostFilteringOptions (line 11) | public class HostFilteringOptions

FILE: src/Microsoft.AspNetCore.HostFiltering/HostFilteringServicesExtensions.cs
  class HostFilteringServicesExtensions (line 13) | public static class HostFilteringServicesExtensions
    method AddHostFiltering (line 21) | public static IServiceCollection AddHostFiltering(this IServiceCollect...

FILE: src/Microsoft.AspNetCore.HttpOverrides/ForwardedHeaders.cs
  type ForwardedHeaders (line 8) | [Flags]

FILE: src/Microsoft.AspNetCore.HttpOverrides/ForwardedHeadersDefaults.cs
  class ForwardedHeadersDefaults (line 10) | public static class ForwardedHeadersDefaults

FILE: src/Microsoft.AspNetCore.HttpOverrides/ForwardedHeadersExtensions.cs
  class ForwardedHeadersExtensions (line 10) | public static class ForwardedHeadersExtensions
    method UseForwardedHeaders (line 17) | public static IApplicationBuilder UseForwardedHeaders(this IApplicatio...
    method UseForwardedHeaders (line 33) | public static IApplicationBuilder UseForwardedHeaders(this IApplicatio...

FILE: src/Microsoft.AspNetCore.HttpOverrides/ForwardedHeadersMiddleware.cs
  class ForwardedHeadersMiddleware (line 19) | public class ForwardedHeadersMiddleware
    method ForwardedHeadersMiddleware (line 30) | static ForwardedHeadersMiddleware()
    method ForwardedHeadersMiddleware (line 66) | public ForwardedHeadersMiddleware(RequestDelegate next, ILoggerFactory...
    method EnsureOptionNotNullorWhitespace (line 96) | private static void EnsureOptionNotNullorWhitespace(string value, stri...
    method PreProcessHosts (line 104) | private void PreProcessHosts()
    method IsTopLevelWildcard (line 134) | private bool IsTopLevelWildcard(string host)
    method Invoke (line 141) | public Task Invoke(HttpContext context)
    method ApplyForwarders (line 147) | public void ApplyForwarders(HttpContext context)
    method CheckKnownAddress (line 350) | private bool CheckKnownAddress(IPAddress address)
    type SetOfForwarders (line 374) | private struct SetOfForwarders
    method TryValidateScheme (line 383) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method IsValidSchemeChar (line 396) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method TryValidateHost (line 403) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method IsValidHostChar (line 428) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method TryValidateIPv6Host (line 435) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method TryValidateHostPort (line 461) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method IsNumeric (line 487) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method IsHex (line 493) | [MethodImpl(MethodImplOptions.AggressiveInlining)]

FILE: src/Microsoft.AspNetCore.HttpOverrides/ForwardedHeadersOptions.cs
  class ForwardedHeadersOptions (line 10) | public class ForwardedHeadersOptions

FILE: src/Microsoft.AspNetCore.HttpOverrides/HttpMethodOverrideExtensions.cs
  class HttpMethodOverrideExtensions (line 10) | public static class HttpMethodOverrideExtensions
    method UseHttpMethodOverride (line 16) | public static IApplicationBuilder UseHttpMethodOverride(this IApplicat...
    method UseHttpMethodOverride (line 31) | public static IApplicationBuilder UseHttpMethodOverride(this IApplicat...

FILE: src/Microsoft.AspNetCore.HttpOverrides/HttpMethodOverrideMiddleware.cs
  class HttpMethodOverrideMiddleware (line 12) | public class HttpMethodOverrideMiddleware
    method HttpMethodOverrideMiddleware (line 18) | public HttpMethodOverrideMiddleware(RequestDelegate next, IOptions<Htt...
    method Invoke (line 32) | public async Task Invoke(HttpContext context)

FILE: src/Microsoft.AspNetCore.HttpOverrides/HttpMethodOverrideOptions.cs
  class HttpMethodOverrideOptions (line 6) | public class HttpMethodOverrideOptions

FILE: src/Microsoft.AspNetCore.HttpOverrides/IPNetwork.cs
  class IPNetwork (line 8) | public class IPNetwork
    method IPNetwork (line 10) | public IPNetwork(IPAddress prefix, int prefixLength)
    method Contains (line 29) | public bool Contains(IPAddress address)
    method CreateMask (line 48) | private byte[] CreateMask()

FILE: src/Microsoft.AspNetCore.HttpOverrides/Internal/IPEndPointParser.cs
  class IPEndPointParser (line 9) | public static class IPEndPointParser
    method TryParse (line 11) | public static bool TryParse(string addressWithPort, out IPEndPoint end...

FILE: src/Microsoft.AspNetCore.HttpsPolicy/HstsBuilderExtensions.cs
  class HstsBuilderExtensions (line 14) | public static class HstsBuilderExtensions
    method UseHsts (line 20) | public static IApplicationBuilder UseHsts(this IApplicationBuilder app)

FILE: src/Microsoft.AspNetCore.HttpsPolicy/HstsMiddleware.cs
  class HstsMiddleware (line 22) | public class HstsMiddleware
    method HstsMiddleware (line 38) | public HstsMiddleware(RequestDelegate next, IOptions<HstsOptions> opti...
    method HstsMiddleware (line 62) | public HstsMiddleware(RequestDelegate next, IOptions<HstsOptions> opti...
    method Invoke (line 70) | public Task Invoke(HttpContext context)
    method IsHostExcluded (line 90) | private bool IsHostExcluded(string host)

FILE: src/Microsoft.AspNetCore.HttpsPolicy/HstsOptions.cs
  class HstsOptions (line 12) | public class HstsOptions

FILE: src/Microsoft.AspNetCore.HttpsPolicy/HstsServicesExtensions.cs
  class HstsServicesExtensions (line 13) | public static class HstsServicesExtensions
    method AddHsts (line 21) | public static IServiceCollection AddHsts(this IServiceCollection servi...

FILE: src/Microsoft.AspNetCore.HttpsPolicy/HttpsRedirectionBuilderExtensions.cs
  class HttpsPolicyBuilderExtensions (line 14) | public static class HttpsPolicyBuilderExtensions
    method UseHttpsRedirection (line 21) | public static IApplicationBuilder UseHttpsRedirection(this IApplicatio...

FILE: src/Microsoft.AspNetCore.HttpsPolicy/HttpsRedirectionMiddleware.cs
  class HttpsRedirectionMiddleware (line 18) | public class HttpsRedirectionMiddleware
    method HttpsRedirectionMiddleware (line 36) | public HttpsRedirectionMiddleware(RequestDelegate next, IOptions<Https...
    method HttpsRedirectionMiddleware (line 61) | public HttpsRedirectionMiddleware(RequestDelegate next, IOptions<Https...
    method Invoke (line 73) | public Task Invoke(HttpContext context)
    method TryGetHttpsPort (line 106) | private bool TryGetHttpsPort(out int port)

FILE: src/Microsoft.AspNetCore.HttpsPolicy/HttpsRedirectionOptions.cs
  class HttpsRedirectionOptions (line 11) | public class HttpsRedirectionOptions

FILE: src/Microsoft.AspNetCore.HttpsPolicy/HttpsRedirectionServicesExtensions.cs
  class HttpsRedirectionServicesExtensions (line 13) | public static class HttpsRedirectionServicesExtensions
    method AddHttpsRedirection (line 21) | public static IServiceCollection AddHttpsRedirection(this IServiceColl...

FILE: src/Microsoft.AspNetCore.HttpsPolicy/internal/HstsLoggingExtensions.cs
  class HstsLoggingExtensions (line 9) | internal static class HstsLoggingExtensions
    method HstsLoggingExtensions (line 15) | static HstsLoggingExtensions()
    method SkippingInsecure (line 22) | public static void SkippingInsecure(this ILogger logger)
    method SkippingExcludedHost (line 27) | public static void SkippingExcludedHost(this ILogger logger, string host)
    method AddingHstsHeader (line 32) | public static void AddingHstsHeader(this ILogger logger)

FILE: src/Microsoft.AspNetCore.HttpsPolicy/internal/HttpsLoggingExtensions.cs
  class HttpsLoggingExtensions (line 9) | internal static class HttpsLoggingExtensions
    method HttpsLoggingExtensions (line 17) | static HttpsLoggingExtensions()
    method RedirectingToHttps (line 28) | public static void RedirectingToHttps(this ILogger logger, string redi...
    method PortLoadedFromConfig (line 33) | public static void PortLoadedFromConfig(this ILogger logger, int port)
    method FailedToDeterminePort (line 38) | public static void FailedToDeterminePort(this ILogger logger)
    method FailedMultiplePorts (line 43) | public static void FailedMultiplePorts(this ILogger logger)
    method PortFromServer (line 48) | public static void PortFromServer(this ILogger logger, int port)

FILE: src/Microsoft.AspNetCore.ResponseCompression/BodyWrapperStream.cs
  class BodyWrapperStream (line 18) | internal class BodyWrapperStream : Stream, IHttpBufferingFeature, IHttpS...
    method BodyWrapperStream (line 32) | internal BodyWrapperStream(HttpContext context, Stream bodyOriginalStr...
    method Dispose (line 42) | protected override void Dispose(bool disposing)
    method Flush (line 68) | public override void Flush()
    method FlushAsync (line 89) | public override Task FlushAsync(CancellationToken cancellationToken)
    method Read (line 107) | public override int Read(byte[] buffer, int offset, int count)
    method Seek (line 112) | public override long Seek(long offset, SeekOrigin origin)
    method SetLength (line 117) | public override void SetLength(long value)
    method Write (line 122) | public override void Write(byte[] buffer, int offset, int count)
    method BeginWrite (line 140) | public override IAsyncResult BeginWrite(byte[] buffer, int offset, int...
    method InternalWriteAsync (line 147) | private async void InternalWriteAsync(byte[] buffer, int offset, int c...
    method EndWrite (line 176) | public override void EndWrite(IAsyncResult asyncResult)
    method WriteAsync (line 187) | public override async Task WriteAsync(byte[] buffer, int offset, int c...
    method OnWrite (line 205) | private void OnWrite()
    method ResolveCompressionProvider (line 243) | private ICompressionProvider ResolveCompressionProvider()
    method DisableRequestBuffering (line 254) | public void DisableRequestBuffering()
    method DisableResponseBuffering (line 261) | public void DisableResponseBuffering()
    method SendFileAsync (line 277) | public Task SendFileAsync(string path, long offset, long? count, Cance...
    method InnerSendFileAsync (line 289) | private async Task InnerSendFileAsync(string path, long offset, long? ...

FILE: src/Microsoft.AspNetCore.ResponseCompression/BrotliCompressionProvider.cs
  class BrotliCompressionProvider (line 14) | public class BrotliCompressionProvider : ICompressionProvider
    method BrotliCompressionProvider (line 20) | public BrotliCompressionProvider(IOptions<BrotliCompressionProviderOpt...
    method CreateStream (line 39) | public Stream CreateStream(Stream outputStream)

FILE: src/Microsoft.AspNetCore.ResponseCompression/BrotliCompressionProviderOptions.cs
  class BrotliCompressionProviderOptions (line 12) | public class BrotliCompressionProviderOptions : IOptions<BrotliCompressi...

FILE: src/Microsoft.AspNetCore.ResponseCompression/CompressionProviderCollection.cs
  class CompressionProviderCollection (line 12) | public class CompressionProviderCollection : Collection<ICompressionProv...
    method Add (line 20) | public void Add<TCompressionProvider>() where TCompressionProvider : I...
    method Add (line 32) | public void Add(Type providerType)

FILE: src/Microsoft.AspNetCore.ResponseCompression/CompressionProviderFactory.cs
  class CompressionProviderFactory (line 14) | internal class CompressionProviderFactory : ICompressionProvider
    method CompressionProviderFactory (line 16) | public CompressionProviderFactory(Type providerType)
    method CreateInstance (line 23) | public ICompressionProvider CreateInstance(IServiceProvider servicePro...
    method CreateStream (line 43) | Stream ICompressionProvider.CreateStream(Stream outputStream)

FILE: src/Microsoft.AspNetCore.ResponseCompression/GzipCompressionProvider.cs
  class GzipCompressionProvider (line 14) | public class GzipCompressionProvider : ICompressionProvider
    method GzipCompressionProvider (line 20) | public GzipCompressionProvider(IOptions<GzipCompressionProviderOptions...
    method CreateStream (line 51) | public Stream CreateStream(Stream outputStream)

FILE: src/Microsoft.AspNetCore.ResponseCompression/GzipCompressionProviderOptions.cs
  class GzipCompressionProviderOptions (line 13) | public class GzipCompressionProviderOptions : IOptions<GzipCompressionPr...

FILE: src/Microsoft.AspNetCore.ResponseCompression/ICompressionProvider.cs
  type ICompressionProvider (line 11) | public interface ICompressionProvider
    method CreateStream (line 28) | Stream CreateStream(Stream outputStream);

FILE: src/Microsoft.AspNetCore.ResponseCompression/IResponseCompressionProvider.cs
  type IResponseCompressionProvider (line 11) | public interface IResponseCompressionProvider
    method GetCompressionProvider (line 18) | ICompressionProvider GetCompressionProvider(HttpContext context);
    method ShouldCompressResponse (line 25) | bool ShouldCompressResponse(HttpContext context);
    method CheckRequestAcceptsCompression (line 32) | bool CheckRequestAcceptsCompression(HttpContext context);

FILE: src/Microsoft.AspNetCore.ResponseCompression/ResponseCompressionBuilderExtensions.cs
  class ResponseCompressionBuilderExtensions (line 14) | public static class ResponseCompressionBuilderExtensions
    method UseResponseCompression (line 20) | public static IApplicationBuilder UseResponseCompression(this IApplica...

FILE: src/Microsoft.AspNetCore.ResponseCompression/ResponseCompressionDefaults.cs
  class ResponseCompressionDefaults (line 11) | public class ResponseCompressionDefaults

FILE: src/Microsoft.AspNetCore.ResponseCompression/ResponseCompressionMiddleware.cs
  class ResponseCompressionMiddleware (line 15) | public class ResponseCompressionMiddleware
    method ResponseCompressionMiddleware (line 27) | public ResponseCompressionMiddleware(RequestDelegate next, IResponseCo...
    method Invoke (line 47) | public async Task Invoke(HttpContext context)

FILE: src/Microsoft.AspNetCore.ResponseCompression/ResponseCompressionOptions.cs
  class ResponseCompressionOptions (line 11) | public class ResponseCompressionOptions

FILE: src/Microsoft.AspNetCore.ResponseCompression/ResponseCompressionProvider.cs
  class ResponseCompressionProvider (line 19) | public class ResponseCompressionProvider : IResponseCompressionProvider
    method ResponseCompressionProvider (line 32) | public ResponseCompressionProvider(IServiceProvider services, IOptions...
    method GetCompressionProvider (line 89) | public virtual ICompressionProvider GetCompressionProvider(HttpContext...
    method ShouldCompressResponse (line 177) | public virtual bool ShouldCompressResponse(HttpContext context)
    method CheckRequestAcceptsCompression (line 222) | public bool CheckRequestAcceptsCompression(HttpContext context)
    method ShouldCompressExact (line 240) | private bool? ShouldCompressExact(string mimeType)
    method ShouldCompressPartial (line 256) | private bool? ShouldCompressPartial(string mimeType)
    type ProviderCandidate (line 269) | private readonly struct ProviderCandidate : IEquatable<ProviderCandidate>
      method ProviderCandidate (line 271) | public ProviderCandidate(string encodingName, double quality, int pr...
      method Equals (line 287) | public bool Equals(ProviderCandidate other)
      method Equals (line 292) | public override bool Equals(object obj)
      method GetHashCode (line 297) | public override int GetHashCode()

FILE: src/Microsoft.AspNetCore.ResponseCompression/ResponseCompressionServicesExtensions.cs
  class ResponseCompressionServicesExtensions (line 14) | public static class ResponseCompressionServicesExtensions
    method AddResponseCompression (line 21) | public static IServiceCollection AddResponseCompression(this IServiceC...
    method AddResponseCompression (line 38) | public static IServiceCollection AddResponseCompression(this IServiceC...

FILE: src/Microsoft.AspNetCore.ResponseCompression/internal/ResponseCompressionLoggingExtensions.cs
  class ResponseCompressionLoggingExtensions (line 9) | internal static class ResponseCompressionLoggingExtensions
    method ResponseCompressionLoggingExtensions (line 20) | static ResponseCompressionLoggingExtensions()
    method NoAcceptEncoding (line 32) | public static void NoAcceptEncoding(this ILogger logger)
    method NoCompressionForHttps (line 37) | public static void NoCompressionForHttps(this ILogger logger)
    method RequestAcceptsCompression (line 42) | public static void RequestAcceptsCompression(this ILogger logger)
    method NoCompressionDueToHeader (line 47) | public static void NoCompressionDueToHeader(this ILogger logger, strin...
    method NoCompressionForContentType (line 52) | public static void NoCompressionForContentType(this ILogger logger, st...
    method ShouldCompressResponse (line 57) | public static void ShouldCompressResponse(this ILogger logger)
    method NoCompressionProvider (line 62) | public static void NoCompressionProvider(this ILogger logger)
    method CompressingWith (line 67) | public static void CompressingWith(this ILogger logger, string provider)

FILE: src/Microsoft.AspNetCore.Rewrite/ApacheModRewriteOptionsExtensions.cs
  class ApacheModRewriteOptionsExtensions (line 14) | public static class ApacheModRewriteOptionsExtensions
    method AddApacheModRewrite (line 22) | public static RewriteOptions AddApacheModRewrite(this RewriteOptions o...
    method AddApacheModRewrite (line 46) | public static RewriteOptions AddApacheModRewrite(this RewriteOptions o...

FILE: src/Microsoft.AspNetCore.Rewrite/Extensions/RewriteMiddlewareLoggingExtensions.cs
  class RewriteMiddlewareLoggingExtensions (line 9) | internal static class RewriteMiddlewareLoggingExtensions
    method RewriteMiddlewareLoggingExtensions (line 25) | static RewriteMiddlewareLoggingExtensions()
    method RewriteMiddlewareRequestContinueResults (line 93) | public static void RewriteMiddlewareRequestContinueResults(this ILogge...
    method RewriteMiddlewareRequestResponseComplete (line 98) | public static void RewriteMiddlewareRequestResponseComplete(this ILogg...
    method RewriteMiddlewareRequestStopRules (line 103) | public static void RewriteMiddlewareRequestStopRules(this ILogger logg...
    method UrlRewriteDidNotMatchRule (line 108) | public static void UrlRewriteDidNotMatchRule(this ILogger logger, stri...
    method UrlRewriteMatchedRule (line 113) | public static void UrlRewriteMatchedRule(this ILogger logger, string n...
    method ModRewriteDidNotMatchRule (line 118) | public static void ModRewriteDidNotMatchRule(this ILogger logger)
    method ModRewriteMatchedRule (line 123) | public static void ModRewriteMatchedRule(this ILogger logger)
    method RedirectedToHttps (line 128) | public static void RedirectedToHttps(this ILogger logger)
    method RedirectedToWww (line 133) | public static void RedirectedToWww(this ILogger logger)
    method RedirectedSummary (line 138) | public static void RedirectedSummary(this ILogger logger, string redir...
    method RewriteSummary (line 143) | public static void RewriteSummary(this ILogger logger, string rewritte...
    method AbortedRequest (line 148) | public static void AbortedRequest(this ILogger logger, string requeste...
    method CustomResponse (line 153) | public static void CustomResponse(this ILogger logger, string requeste...

FILE: src/Microsoft.AspNetCore.Rewrite/IISUrlRewriteOptionsExtensions.cs
  class IISUrlRewriteOptionsExtensions (line 14) | public static class IISUrlRewriteOptionsExtensions
    method AddIISUrlRewrite (line 22) | public static RewriteOptions AddIISUrlRewrite(this RewriteOptions opti...
    method AddIISUrlRewrite (line 47) | public static RewriteOptions AddIISUrlRewrite(this RewriteOptions opti...

FILE: src/Microsoft.AspNetCore.Rewrite/IRule.cs
  type IRule (line 9) | public interface IRule
    method ApplyRule (line 17) | void ApplyRule(RewriteContext context);

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/ApacheModRewriteRule.cs
  class ApacheModRewriteRule (line 9) | public class ApacheModRewriteRule : IRule
    method ApacheModRewriteRule (line 15) | public ApacheModRewriteRule(UrlMatch initialMatch, IList<Condition> co...
    method ApplyRule (line 22) | public virtual void ApplyRule(RewriteContext context)

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/Condition.cs
  class Condition (line 6) | public class Condition
    method Evaluate (line 12) | public MatchResults Evaluate(RewriteContext context, BackReferenceColl...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/ConditionEvaluator.cs
  class ConditionEvaluator (line 8) | public static class ConditionEvaluator
    method Evaluate (line 10) | public static MatchResults Evaluate(IEnumerable<Condition> conditions,...
    method Evaluate (line 15) | public static MatchResults Evaluate(IEnumerable<Condition> conditions,...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/ConditionPatternParser.cs
  class ConditionPatternParser (line 13) | public class ConditionPatternParser
    method ParseActionCondition (line 29) | public ParsedModRewriteInput ParseActionCondition(string condition)
    method ParseProperty (line 142) | private static ParsedModRewriteInput ParseProperty(ParserContext conte...
    method IsValidActionCondition (line 214) | private static bool IsValidActionCondition(ParsedModRewriteInput results)

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/ConditionType.cs
  type ConditionType (line 6) | public enum ConditionType

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/CookieActionFactory.cs
  class CookieActionFactory (line 10) | public class CookieActionFactory
    method Create (line 17) | public ChangeCookieAction Create(string flagValue)
    method SetActionOption (line 60) | private static void SetActionOption(string value, Fields tokenType, re...
    type Fields (line 109) | private enum Fields

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/FileParser.cs
  class FileParser (line 10) | public class FileParser
    method Parse (line 12) | public IList<IRule> Parse(TextReader input)

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/FlagParser.cs
  class FlagParser (line 9) | public class FlagParser
    method Parse (line 58) | public Flags Parse(string flagString)

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/FlagType.cs
  type FlagType (line 6) | public enum FlagType

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/Flags.cs
  class Flags (line 11) | public class Flags
    method Flags (line 15) | public Flags(IDictionary<FlagType, string> flags)
    method Flags (line 20) | public Flags()
    method SetFlag (line 25) | public void SetFlag(FlagType flag, string value)
    method GetValue (line 34) | public bool GetValue(FlagType flag, out string value)
    method HasFlag (line 63) | public bool HasFlag(FlagType flag)

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/OperationType.cs
  type OperationType (line 6) | public enum OperationType

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/ParsedModRewriteCondition.cs
  class ParsedModRewriteInput (line 6) | public class ParsedModRewriteInput
    method ParsedModRewriteInput (line 13) | public ParsedModRewriteInput() { }
    method ParsedModRewriteInput (line 15) | public ParsedModRewriteInput(bool invert, ConditionType conditionType,...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/RuleBuilder.cs
  class RuleBuilder (line 14) | public class RuleBuilder
    method Build (line 23) | public ApacheModRewriteRule Build()
    method AddRule (line 32) | public void AddRule(string rule)
    method AddConditionFromParts (line 51) | public void AddConditionFromParts(
    method AddMatch (line 157) | public void AddMatch(
    method AddAction (line 171) | public void AddAction(

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/RuleRegexParser.cs
  class RuleRegexParser (line 8) | public class RuleRegexParser
    method ParseRuleRegex (line 10) | public ParsedModRewriteInput ParseRuleRegex(string regex)

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/SegmentType.cs
  type SegmentType (line 6) | public enum SegmentType

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/ServerVariables.cs
  class ServerVariables (line 13) | public static class ServerVariables
    method FindServerVariable (line 22) | public static PatternSegment FindServerVariable(string serverVariable,...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/TestStringParser.cs
  class TestStringParser (line 13) | public class TestStringParser
    method Parse (line 33) | public Pattern Parse(string testString)
    method ParseConditionParameter (line 92) | private static void ParseConditionParameter(ParserContext context, ILi...
    method ParseLiteral (line 149) | private static void ParseLiteral(ParserContext context, IList<PatternS...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/Tokenizer.cs
  class Tokenizer (line 13) | public class Tokenizer
    method Tokenize (line 25) | public IList<string> Tokenize(string rule)
    method RemoveQuotesAndEscapeCharacters (line 105) | private static void RemoveQuotesAndEscapeCharacters(IList<string> tokens)

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/BackReferenceCollection.cs
  class BackReferenceCollection (line 10) | public class BackReferenceCollection
    method BackReferenceCollection (line 14) | public BackReferenceCollection(GroupCollection references)
    method BackReferenceCollection (line 25) | public BackReferenceCollection(string reference)
    method Add (line 45) | public void Add(BackReferenceCollection references)

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/DelegateRule.cs
  class DelegateRule (line 8) | public class DelegateRule : IRule
    method DelegateRule (line 12) | public DelegateRule(Action<RewriteContext> onApplyRule)
    method ApplyRule (line 16) | public void ApplyRule(RewriteContext context) => _onApplyRule(context);

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/ActionType.cs
  type ActionType (line 6) | public enum ActionType

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/Condition.cs
  class Condition (line 6) | public class Condition
    method Evaluate (line 11) | public MatchResults Evaluate(RewriteContext context, BackReferenceColl...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/ConditionCollection.cs
  class ConditionCollection (line 10) | public class ConditionCollection : IEnumerable<Condition>
    method ConditionCollection (line 17) | public ConditionCollection()
    method ConditionCollection (line 22) | public ConditionCollection(LogicalGrouping grouping, bool trackAllCapt...
    method Add (line 42) | public void Add(Condition condition)
    method AddConditions (line 50) | public void AddConditions(IEnumerable<Condition> conditions)
    method GetEnumerator (line 58) | IEnumerator IEnumerable.GetEnumerator()
    method GetEnumerator (line 63) | public IEnumerator<Condition> GetEnumerator()

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/ConditionEvaluator.cs
  class ConditionEvaluator (line 6) | public static class ConditionEvaluator
    method Evaluate (line 8) | public static MatchResults Evaluate(ConditionCollection conditions, Re...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/IISRewriteMap.cs
  class IISRewriteMap (line 9) | public class IISRewriteMap
    method IISRewriteMap (line 13) | public IISRewriteMap(string name)

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/IISRewriteMapCollection.cs
  class IISRewriteMapCollection (line 9) | public class IISRewriteMapCollection : IEnumerable<IISRewriteMap>
    method Add (line 13) | public void Add(IISRewriteMap rewriteMap)
    method GetEnumerator (line 32) | IEnumerator IEnumerable.GetEnumerator()
    method GetEnumerator (line 37) | public IEnumerator<IISRewriteMap> GetEnumerator()

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/IISUrlRewriteRule.cs
  class IISUrlRewriteRule (line 9) | public class IISUrlRewriteRule : IRule
    method IISUrlRewriteRule (line 17) | public IISUrlRewriteRule(string name,
    method IISUrlRewriteRule (line 25) | public IISUrlRewriteRule(string name,
    method ApplyRule (line 38) | public virtual void ApplyRule(RewriteContext context)

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/InputParser.cs
  class InputParser (line 11) | public class InputParser
    method InputParser (line 18) | public InputParser()
    method InputParser (line 22) | public InputParser(IISRewriteMapCollection rewriteMaps)
    method ParseInputString (line 33) | public Pattern ParseInputString(string testString)
    method ParseInputString (line 45) | public Pattern ParseInputString(string testString, UriMatchPart uriMat...
    method ParseString (line 56) | private Pattern ParseString(ParserContext context, UriMatchPart uriMat...
    method ParseParameter (line 85) | private void ParseParameter(ParserContext context, IList<PatternSegmen...
    method GetBackReferenceIndex (line 167) | private static int GetBackReferenceIndex(ParserContext context)
    method ParseLiteral (line 197) | private static void ParseLiteral(ParserContext context, IList<PatternS...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/InvalidUrlRewriteFormatException.cs
  class InvalidUrlRewriteFormatException (line 10) | public class InvalidUrlRewriteFormatException : FormatException
    method InvalidUrlRewriteFormatException (line 15) | public InvalidUrlRewriteFormatException(XElement element, string message)
    method InvalidUrlRewriteFormatException (line 20) | public InvalidUrlRewriteFormatException(XElement element, string messa...
    method FormatMessage (line 28) | private static string FormatMessage(XElement element, string message)

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/LogicalGrouping.cs
  type LogicalGrouping (line 6) | public enum LogicalGrouping

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/MatchType.cs
  type MatchType (line 6) | public enum MatchType

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/PatternSyntax.cs
  type PatternSyntax (line 6) | public enum PatternSyntax

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/RedirectType.cs
  type RedirectType (line 8) | public enum RedirectType

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/RewriteMapParser.cs
  class RewriteMapParser (line 10) | public static class RewriteMapParser
    method Parse (line 12) | public static IISRewriteMapCollection Parse(XElement xmlRoot)

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/RewriteTags.cs
  class RewriteTags (line 6) | public static class RewriteTags

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/ServerVariables.cs
  class ServerVariables (line 10) | public static class ServerVariables
    method FindServerVariable (line 20) | public static PatternSegment FindServerVariable(string serverVariable,...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/UriMatchCondition.cs
  class UriMatchCondition (line 10) | public class UriMatchCondition : Condition
    method UriMatchCondition (line 14) | public UriMatchCondition(InputParser inputParser, string input, string...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/UriMatchPart.cs
  type UriMatchPart (line 6) | public enum UriMatchPart

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/UrlRewriteFileParser.cs
  class UrlRewriteFileParser (line 15) | public class UrlRewriteFileParser
    method Parse (line 23) | public IList<IISUrlRewriteRule> Parse(TextReader reader)
    method ParseRules (line 41) | private void ParseRules(XElement rules, IList<IISUrlRewriteRule> resul...
    method ParseRuleAttributes (line 60) | private void ParseRuleAttributes(XElement rule, UrlRewriteRuleBuilder ...
    method ParseMatch (line 93) | private void ParseMatch(XElement match, UrlRewriteRuleBuilder builder,...
    method ParseConditions (line 106) | private void ParseConditions(XElement conditions, UrlRewriteRuleBuilde...
    method ParseCondition (line 123) | private void ParseCondition(XElement conditionElement, UrlRewriteRuleB...
    method ParseUrlAction (line 184) | private void ParseUrlAction(XElement urlAction, UrlRewriteRuleBuilder ...
    method ParseBool (line 249) | private bool ParseBool(XElement element, string rewriteTag, bool defau...
    method ParseEnum (line 264) | private TEnum ParseEnum<TEnum>(XElement element, string rewriteTag, TE...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/UrlRewriteRuleBuilder.cs
  class UrlRewriteRuleBuilder (line 11) | public class UrlRewriteRuleBuilder
    method Build (line 24) | public IISUrlRewriteRule Build()
    method AddUrlAction (line 34) | public void AddUrlAction(UrlAction action)
    method AddUrlMatch (line 43) | public void AddUrlMatch(string input, bool ignoreCase = true, bool neg...
    method ConfigureConditionBehavior (line 69) | public void ConfigureConditionBehavior(LogicalGrouping logicalGrouping...
    method AddUrlCondition (line 74) | public void AddUrlCondition(Condition condition)
    method AddUrlConditions (line 87) | public void AddUrlConditions(IEnumerable<Condition> conditions)

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/MatchResults.cs
  class MatchResults (line 8) | public class MatchResults

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/ParserContext.cs
  class ParserContext (line 9) | public class ParserContext
    method ParserContext (line 15) | public ParserContext(string condition)
    method Back (line 23) | public bool Back()
    method Next (line 28) | public bool Next()
    method HasNext (line 33) | public bool HasNext()
    method Mark (line 38) | public void Mark()
    method GetIndex (line 43) | public int GetIndex()
    method Capture (line 48) | public string Capture()

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/Pattern.cs
  class Pattern (line 8) | public class Pattern
    method Pattern (line 11) | public Pattern(IList<PatternSegment> patternSegments)
    method Evaluate (line 16) | public string Evaluate(RewriteContext context, BackReferenceCollection...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegment.cs
  class PatternSegment (line 6) | public abstract class PatternSegment
    method Evaluate (line 8) | public abstract string Evaluate(RewriteContext context, BackReferenceC...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/ConditionMatchSegment.cs
  class ConditionMatchSegment (line 6) | public class ConditionMatchSegment : PatternSegment
    method ConditionMatchSegment (line 10) | public ConditionMatchSegment(int index)
    method Evaluate (line 15) | public override string Evaluate(RewriteContext context, BackReferenceC...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/DateTimeSegment.cs
  class DateTimeSegment (line 9) | public class DateTimeSegment : PatternSegment
    method DateTimeSegment (line 13) | public DateTimeSegment(string segment)
    method Evaluate (line 46) | public override string Evaluate(RewriteContext context, BackReferenceC...
    type DateTimePortion (line 71) | private enum DateTimePortion

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/HeaderSegment.cs
  class HeaderSegment (line 6) | public class HeaderSegment : PatternSegment
    method HeaderSegment (line 10) | public HeaderSegment(string header)
    method Evaluate (line 15) | public override string Evaluate(RewriteContext context, BackReferenceC...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/IsHttpsModSegment.cs
  class IsHttpsModSegment (line 6) | public class IsHttpsModSegment : PatternSegment
    method Evaluate (line 10) | public override string Evaluate(RewriteContext context, BackReferenceC...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/IsHttpsUrlSegment.cs
  class IsHttpsUrlSegment (line 6) | public class IsHttpsUrlSegment : PatternSegment
    method Evaluate (line 10) | public override string Evaluate(RewriteContext context, BackReferenceC...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/IsIPV6Segment.cs
  class IsIPV6Segment (line 9) | public class IsIPV6Segment : PatternSegment
    method Evaluate (line 11) | public override string Evaluate(RewriteContext context, BackReferenceC...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/LiteralSegment.cs
  class LiteralSegment (line 6) | public class LiteralSegment : PatternSegment
    method LiteralSegment (line 10) | public LiteralSegment(string literal)
    method Evaluate (line 15) | public override string Evaluate(RewriteContext context, BackReferenceC...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/LocalAddressSegment.cs
  class LocalAddressSegment (line 6) | public class LocalAddressSegment : PatternSegment
    method Evaluate (line 8) | public override string Evaluate(RewriteContext context, BackReferenceC...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/LocalPortSegment.cs
  class LocalPortSegment (line 8) | public class LocalPortSegment : PatternSegment
    method Evaluate (line 10) | public override string Evaluate(RewriteContext context, BackReferenceC...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/QueryStringSegment.cs
  class QueryStringSegment (line 6) | public class QueryStringSegment : PatternSegment
    method Evaluate (line 8) | public override string Evaluate(RewriteContext context, BackReferenceC...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/RemoteAddressSegment.cs
  class RemoteAddressSegment (line 6) | public class RemoteAddressSegment : PatternSegment
    method Evaluate (line 8) | public override string Evaluate(RewriteContext context, BackReferenceC...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/RemotePortSegment.cs
  class RemotePortSegment (line 8) | public class RemotePortSegment : PatternSegment
    method Evaluate (line 10) | public override string Evaluate(RewriteContext context, BackReferenceC...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/RequestFilenameSegment.cs
  class RequestFileNameSegment (line 6) | public class RequestFileNameSegment : PatternSegment
    method Evaluate (line 8) | public override string Evaluate(RewriteContext context, BackReferenceC...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/RequestMethodSegment.cs
  class RequestMethodSegment (line 6) | public class RequestMethodSegment : PatternSegment
    method Evaluate (line 8) | public override string Evaluate(RewriteContext context, BackReferenceC...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/RewriteMapSegment.cs
  class RewriteMapSegment (line 8) | public class RewriteMapSegment : PatternSegment
    method RewriteMapSegment (line 13) | public RewriteMapSegment(IISRewriteMap rewriteMap, Pattern pattern)
    method Evaluate (line 19) | public override string Evaluate(RewriteContext context, BackReferenceC...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/RuleMatchSegment.cs
  class RuleMatchSegment (line 6) | public class RuleMatchSegment : PatternSegment
    method RuleMatchSegment (line 10) | public RuleMatchSegment(int index)
    method Evaluate (line 15) | public override string Evaluate(RewriteContext context, BackReferenceC...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/SchemeSegment.cs
  class SchemeSegment (line 6) | public class SchemeSegment : PatternSegment
    method Evaluate (line 8) | public override string Evaluate(RewriteContext context, BackReferenceC...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/ServerProtocolSegment.cs
  class ServerProtocolSegment (line 8) | public class ServerProtocolSegment : PatternSegment
    method Evaluate (line 10) | public override string Evaluate(RewriteContext context, BackReferenceC...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/ToLowerSegment.cs
  class ToLowerSegment (line 8) | public class ToLowerSegment : PatternSegment
    method ToLowerSegment (line 12) | public ToLowerSegment(Pattern pattern)
    method Evaluate (line 17) | public override string Evaluate(RewriteContext context, BackReferenceC...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/UrlEncodeSegment.cs
  class UrlEncodeSegment (line 9) | public class UrlEncodeSegment : PatternSegment
    method UrlEncodeSegment (line 13) | public UrlEncodeSegment(Pattern pattern)
    method Evaluate (line 18) | public override string Evaluate(RewriteContext context, BackReferenceC...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/UrlSegment.cs
  class UrlSegment (line 9) | public class UrlSegment : PatternSegment
    method UrlSegment (line 13) | public UrlSegment()
    method UrlSegment (line 18) | public UrlSegment(UriMatchPart uriMatchPart)
    method Evaluate (line 23) | public override string Evaluate(RewriteContext context, BackReferenceC...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/RedirectRule.cs
  class RedirectRule (line 12) | public class RedirectRule : IRule
    method RedirectRule (line 18) | public RedirectRule(string regex, string replacement, int statusCode)
    method ApplyRule (line 35) | public virtual void ApplyRule(RewriteContext context)

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/RedirectToHttpsRule.cs
  class RedirectToHttpsRule (line 11) | public class RedirectToHttpsRule : IRule
    method ApplyRule (line 16) | public virtual void ApplyRule(RewriteContext context)

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/RedirectToWwwRule.cs
  class RedirectToWwwRule (line 12) | public class RedirectToWwwRule : IRule
    method RedirectToWwwRule (line 16) | public RedirectToWwwRule(int statusCode)
    method ApplyRule (line 21) | public virtual void ApplyRule(RewriteContext context)

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/RewriteRule.cs
  class RewriteRule (line 12) | public class RewriteRule : IRule
    method RewriteRule (line 18) | public RewriteRule(string regex, string replacement, bool stopProcessing)
    method ApplyRule (line 35) | public virtual void ApplyRule(RewriteContext context)

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/UrlAction.cs
  class UrlAction (line 6) | public abstract class UrlAction
    method ApplyAction (line 9) | public abstract void ApplyAction(RewriteContext context, BackReference...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/UrlActions/AbortAction.cs
  class AbortAction (line 8) | public class AbortAction : UrlAction
    method ApplyAction (line 10) | public override void ApplyAction(RewriteContext context, BackReference...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/UrlActions/ChangeCookieAction.cs
  class ChangeCookieAction (line 9) | public class ChangeCookieAction : UrlAction
    method ChangeCookieAction (line 14) | public ChangeCookieAction(string name)
    method ChangeCookieAction (line 20) | internal ChangeCookieAction(string name, Func<DateTimeOffset> timeSource)
    method ApplyAction (line 40) | public override void ApplyAction(RewriteContext context, BackReference...
    method GetOrCreateOptions (line 46) | private CookieOptions GetOrCreateOptions()

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/UrlActions/CustomResponseAction.cs
  class CustomResponseAction (line 11) | public class CustomResponseAction : UrlAction
    method CustomResponseAction (line 17) | public CustomResponseAction(int statusCode)
    method ApplyAction (line 22) | public override void ApplyAction(RewriteContext context, BackReference...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/UrlActions/ForbiddenAction.cs
  class ForbiddenAction (line 8) | public class ForbiddenAction : UrlAction
    method ApplyAction (line 10) | public override void ApplyAction(RewriteContext context, BackReference...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/UrlActions/GoneAction.cs
  class GoneAction (line 8) | public class GoneAction : UrlAction
    method ApplyAction (line 10) | public override void ApplyAction(RewriteContext context, BackReference...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/UrlActions/NoneAction.cs
  class NoneAction (line 6) | public class NoneAction : UrlAction
    method NoneAction (line 10) | public NoneAction(RuleResult result)
    method ApplyAction (line 15) | public override void ApplyAction(RewriteContext context, BackReference...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/UrlActions/RedirectAction.cs
  class RedirectAction (line 10) | public class RedirectAction : UrlAction
    method RedirectAction (line 17) | public RedirectAction(
    method RedirectAction (line 31) | public RedirectAction(
    method ApplyAction (line 44) | public override void ApplyAction(RewriteContext context, BackReference...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/UrlActions/RewriteAction.cs
  class RewriteAction (line 10) | public class RewriteAction : UrlAction
    method RewriteAction (line 17) | public RewriteAction(
    method RewriteAction (line 33) | public RewriteAction(
    method ApplyAction (line 46) | public override void ApplyAction(RewriteContext context, BackReference...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/UrlMatch.cs
  class UrlMatch (line 6) | public abstract class UrlMatch
    method Evaluate (line 9) | public abstract MatchResults Evaluate(string input, RewriteContext con...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/UrlMatches/ExactMatch.cs
  class ExactMatch (line 6) | public class ExactMatch : UrlMatch
    method ExactMatch (line 11) | public ExactMatch(bool ignoreCase, string input, bool negate)
    method Evaluate (line 18) | public override MatchResults Evaluate(string pattern, RewriteContext c...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/UrlMatches/FileSizeMatch.cs
  class FileSizeMatch (line 6) | public class FileSizeMatch : UrlMatch
    method FileSizeMatch (line 8) | public FileSizeMatch(bool negate)
    method Evaluate (line 13) | public override MatchResults Evaluate(string input, RewriteContext con...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/UrlMatches/IntegerMatch.cs
  class IntegerMatch (line 10) | public class IntegerMatch : UrlMatch
    method IntegerMatch (line 14) | public IntegerMatch(int value, IntegerOperationType operation)
    method IntegerMatch (line 20) | public IntegerMatch(string value, IntegerOperationType operation)
    method Evaluate (line 31) | public override MatchResults Evaluate(string input, RewriteContext con...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/UrlMatches/IntegerOperation.cs
  type IntegerOperationType (line 6) | public enum IntegerOperationType

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/UrlMatches/IsDirectoryMatch.cs
  class IsDirectoryMatch (line 6) | public class IsDirectoryMatch : UrlMatch
    method IsDirectoryMatch (line 8) | public IsDirectoryMatch(bool negate)
    method Evaluate (line 13) | public override MatchResults Evaluate(string pattern, RewriteContext c...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/UrlMatches/IsFileMatch.cs
  class IsFileMatch (line 6) | public class IsFileMatch : UrlMatch
    method IsFileMatch (line 8) | public IsFileMatch(bool negate)
    method Evaluate (line 13) | public override MatchResults Evaluate(string pattern, RewriteContext c...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/UrlMatches/RegexMatch.cs
  class RegexMatch (line 8) | public class RegexMatch : UrlMatch
    method RegexMatch (line 12) | public RegexMatch(Regex match, bool negate)
    method Evaluate (line 18) | public override MatchResults Evaluate(string pattern, RewriteContext c...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/UrlMatches/StringMatch.cs
  class StringMatch (line 6) | public class StringMatch : UrlMatch
    method StringMatch (line 12) | public StringMatch(string value, StringOperationType operation, bool i...
    method Evaluate (line 19) | public override MatchResults Evaluate(string input, RewriteContext con...

FILE: src/Microsoft.AspNetCore.Rewrite/Internal/UrlMatches/StringOperation.cs
  type StringOperationType (line 6) | public enum StringOperationType

FILE: src/Microsoft.AspNetCore.Rewrite/Properties/Resources.Designer.cs
  class Resources (line 8) | internal static class Resources
    method FormatError_ChangeEnvironmentNotSupported (line 24) | internal static string FormatError_ChangeEnvironmentNotSupported()
    method FormatError_CouldNotParseInteger (line 40) | internal static string FormatError_CouldNotParseInteger(object p0)
    method FormatError_InputParserIndexOutOfRange (line 56) | internal static string FormatError_InputParserIndexOutOfRange(object p...
    method FormatError_InputParserInvalidInteger (line 72) | internal static string FormatError_InputParserInvalidInteger(object p0...
    method FormatError_InputParserMissingCloseBrace (line 88) | internal static string FormatError_InputParserMissingCloseBrace(object...
    method FormatError_InputParserNoBackreference (line 104) | internal static string FormatError_InputParserNoBackreference(object p0)
    method FormatError_InputParserUnrecognizedParameter (line 120) | internal static string FormatError_InputParserUnrecognizedParameter(ob...
    method FormatError_IntegerMatch_FormatExceptionMessage (line 136) | internal static string FormatError_IntegerMatch_FormatExceptionMessage()
    method FormatError_InvalidChangeCookieFlag (line 152) | internal static string FormatError_InvalidChangeCookieFlag(object p0)
    method FormatError_ModRewriteParseError (line 168) | internal static string FormatError_ModRewriteParseError(object p0, obj...
    method FormatError_ModRewriteGeneralParseError (line 184) | internal static string FormatError_ModRewriteGeneralParseError(object p0)
    method FormatError_UrlRewriteParseError (line 200) | internal static string FormatError_UrlRewriteParseError(object p0, obj...
    method FormatError_UnsupportedServerVariable (line 216) | internal static string FormatError_UnsupportedServerVariable(object p0)
    method GetString (line 221) | private static string GetString(string name, params string[] formatter...

FILE: src/Microsoft.AspNetCore.Rewrite/RewriteBuilderExtensions.cs
  class RewriteBuilderExtensions (line 13) | public static class RewriteBuilderExtensions
    method UseRewriter (line 20) | public static IApplicationBuilder UseRewriter(this IApplicationBuilder...
    method UseRewriter (line 36) | public static IApplicationBuilder UseRewriter(this IApplicationBuilder...

FILE: src/Microsoft.AspNetCore.Rewrite/RewriteContext.cs
  class RewriteContext (line 14) | public class RewriteContext

FILE: src/Microsoft.AspNetCore.Rewrite/RewriteMiddleware.cs
  class RewriteMiddleware (line 21) | public class RewriteMiddleware
    method RewriteMiddleware (line 35) | public RewriteMiddleware(
    method Invoke (line 62) | public Task Invoke(HttpContext context)

FILE: src/Microsoft.AspNetCore.Rewrite/RewriteOptions.cs
  class RewriteOptions (line 13) | public class RewriteOptions

FILE: src/Microsoft.AspNetCore.Rewrite/RewriteOptionsExtensions.cs
  class RewriteOptionsExtensions (line 13) | public static class RewriteOptionsExtensions
    method Add (line 21) | public static RewriteOptions Add(this RewriteOptions options, IRule rule)
    method Add (line 33) | public static RewriteOptions Add(this RewriteOptions options, Action<R...
    method AddRewrite (line 47) | public static RewriteOptions AddRewrite(this RewriteOptions options, s...
    method AddRedirect (line 60) | public static RewriteOptions AddRedirect(this RewriteOptions options, ...
    method AddRedirect (line 73) | public static RewriteOptions AddRedirect(this RewriteOptions options, ...
    method AddRedirectToHttpsPermanent (line 85) | public static RewriteOptions AddRedirectToHttpsPermanent(this RewriteO...
    method AddRedirectToHttps (line 94) | public static RewriteOptions AddRedirectToHttps(this RewriteOptions op...
    method AddRedirectToHttps (line 104) | public static RewriteOptions AddRedirectToHttps(this RewriteOptions op...
    method AddRedirectToHttps (line 115) | public static RewriteOptions AddRedirectToHttps(this RewriteOptions op...
    method AddRedirectToWwwPermanent (line 126) | public static RewriteOptions AddRedirectToWwwPermanent(this RewriteOpt...
    method AddRedirectToWww (line 135) | public static RewriteOptions AddRedirectToWww(this RewriteOptions opti...
    method AddRedirectToWww (line 145) | public static RewriteOptions AddRedirectToWww(this RewriteOptions opti...

FILE: src/Microsoft.AspNetCore.Rewrite/RuleResult.cs
  type RuleResult (line 9) | public enum RuleResult

FILE: test/Microsoft.AspNetCore.Buffering.Tests/ResponseBufferingMiddlewareTests.cs
  class ResponseBufferingMiddlewareTests (line 18) | public class ResponseBufferingMiddlewareTests
    method BufferResponse_SetsContentLength (line 20) | [Fact]
    method BufferResponseWithManualContentLength_NotReplaced (line 48) | [Fact]
    method Seek_AllowsResttingBuffer (line 76) | [Fact]
    method SetPosition_AllowsResttingBuffer (line 122) | [Fact]
    method SetLength_AllowsResttingBuffer (line 166) | [Fact]
    method DisableBufferingViaFeature (line 210) | [Fact]
    method DisableBufferingViaFeatureAfterFirstWrite_Flushes (line 244) | [Fact]
    method FlushDisablesBuffering (line 283) | [Fact]

FILE: test/Microsoft.AspNetCore.HostFiltering.Tests/HostFilteringMiddlewareTests.cs
  class HostFilteringMiddlewareTests (line 19) | public class HostFilteringMiddlewareTests
    method MissingConfigThrows (line 21) | [Fact]
    method AllowsMissingHost (line 32) | [Theory]
    method AllowsEmptyHost (line 65) | [Theory]
    method AllowsSpecifiedHost (line 100) | [Theory]
    method RejectsMismatchedHosts (line 143) | [Theory]
    method SupportsDynamicOptionsReload (line 187) | [Fact]
    class ReloadableMemorySource (line 223) | private class ReloadableMemorySource : IConfigurationSource
      method Build (line 225) | public IConfigurationProvider Build(IConfigurationBuilder builder)
    class ReloadableMemoryProvider (line 231) | internal class ReloadableMemoryProvider : ConfigurationProvider
      method Set (line 233) | public override void Set(string key, string value)

FILE: test/Microsoft.AspNetCore.HttpOverrides.Tests/ForwardedHeadersMiddlewareTest.cs
  class ForwardedHeadersMiddlewareTests (line 16) | public class ForwardedHeadersMiddlewareTests
    method XForwardedForDefaultSettingsChangeRemoteIpAndPort (line 18) | [Fact]
    method XForwardedForFirstValueIsInvalid (line 44) | [Theory]
    method XForwardedForForwardLimit (line 73) | [Theory]
    method XForwardedForLoopback (line 121) | [Theory]
    method XForwardedForForwardKnownIps (line 162) | [Theory]
    method XForwardedForOverrideBadIpDoesntChangeRemoteIp (line 215) | [Fact]
    method XForwardedHostOverrideChangesRequestHost (line 236) | [Fact]
    method XForwardedHostAllowsValidCharacters (line 291) | [Theory]
    method XForwardedHostFailsForInvalidCharacters (line 368) | [Theory]
    method XForwardedHostAllowsSpecifiedHost (line 397) | [Theory]
    method XForwardedHostFailsMismatchedHosts (line 439) | [Theory]
    method XForwardedHostStopsAtFirstUnspecifiedHost (line 482) | [Fact]
    method XForwardedProtoOverrideChangesRequestProtocol (line 510) | [Theory]
    method XForwardedProtoAcceptsValidProtocols (line 555) | [Theory]
    method XForwardedProtoRejectsInvalidProtocols (line 604) | [Theory]
    method XForwardedProtoOverrideLimitedByXForwardedForCount (line 633) | [Theory]
    method XForwardedProtoOverrideCanBeIndependentOfXForwardedForCount (line 665) | [Theory]
    method XForwardedProtoOverrideLimitedByLoopback (line 699) | [Theory]
    method AllForwardsDisabledByDefault (line 742) | [Fact]
    method AllForwardsEnabledChangeRequestRemoteIpHostandProtocol (line 752) | [Fact]
    method AllOptionsDisabledRequestDoesntChange (line 777) | [Fact]
    method PartiallyEnabledForwardsPartiallyChangesRequest (line 802) | [Fact]
    method XForwardForIPv4ToIPv6Mapping (line 826) | [Theory]

FILE: test/Microsoft.AspNetCore.HttpOverrides.Tests/HttpMethodOverrideMiddlewareTest.cs
  class HttpMethodOverrideMiddlewareTest (line 14) | public class HttpMethodOverrideMiddlewareTest
    method XHttpMethodOverrideHeaderAvaiableChangesRequestMethod (line 16) | [Fact]
    method XHttpMethodOverrideHeaderUnavaiableDoesntChangeRequestMethod (line 39) | [Fact]
    method XHttpMethodOverrideFromGetRequestDoesntChangeMethodType (line 61) | [Fact]
    method FormFieldAvailableChangesRequestMethod (line 84) | [Fact]
    method FormFieldUnavailableDoesNotChangeRequestMethod (line 115) | [Fact]
    method FormFieldEmptyDoesNotChangeRequestMethod (line 145) | [Fact]

FILE: test/Microsoft.AspNetCore.HttpOverrides.Tests/IPEndPointParserTest.cs
  class IPEndPointParserTests (line 9) | public class IPEndPointParserTests
    method ParsesCorrectly (line 11) | [Theory]
    method ShouldNotParse (line 28) | [Theory]

FILE: test/Microsoft.AspNetCore.HttpOverrides.Tests/IPNetworkTest.cs
  class IPNetworkTest (line 8) | public class IPNetworkTest
    method Contains_Positive (line 10) | [Theory]
    method Contains_Negative (line 21) | [Theory]

FILE: test/Microsoft.AspNetCore.HttpsPolicy.Tests/HstsMiddlewareTests.cs
  class HstsMiddlewareTests (line 22) | public class HstsMiddlewareTests
    method SetOptionsWithDefault_SetsMaxAgeToCorrectValue (line 24) | [Fact]
    method SetOptionsThroughConfigure_SetsHeaderCorrectly (line 52) | [Theory]
    method SetOptionsThroughHelper_SetsHeaderCorrectly (line 90) | [Theory]
    method DefaultExcludesCommonLocalhostDomains_DoesNotSetHstsHeader (line 128) | [Theory]
    method AllowLocalhostDomainsIfListIsReset_SetHstsHeader (line 172) | [Theory]
    method AddExcludedDomains_DoesNotAddHstsHeader (line 219) | [Theory]
    method WhenRequestIsInsecure_DoesNotAddHstsHeader (line 265) | [Fact]
    method WhenRequestIsSecure_AddsHstsHeader (line 304) | [Fact]

FILE: test/Microsoft.AspNetCore.HttpsPolicy.Tests/HttpsPolicyTests.cs
  class HttpsPolicyTests (line 21) | public class HttpsPolicyTests
    method SetsBothHstsAndHttpsRedirection_RedirectOnFirstRequest_HstsOnSecondRequest (line 23) | [Theory]

FILE: test/Microsoft.AspNetCore.HttpsPolicy.Tests/HttpsRedirectionMiddlewareTests.cs
  class HttpsRedirectionMiddlewareTests (line 22) | public class HttpsRedirectionMiddlewareTests
    method SetOptions_NotEnabledByDefault (line 24) | [Fact]
    method SetOptions_SetStatusCodeHttpsPort (line 62) | [Theory]
    method SetOptionsThroughHelperMethod_SetStatusCodeAndHttpsPort (line 111) | [Theory]
    method SetHttpsPortEnvironmentVariableAndServerFeature_ReturnsCorrectStatusCodeOnResponse (line 160) | [Theory]
    method SetServerAddressesFeature_SingleHttpsAddress_Success (line 209) | [Fact]
    method SetServerAddressesFeature_MultipleHttpsAddresses_LogsAndFailsToRedirect (line 255) | [Fact]
    method SetServerAddressesFeature_MultipleHttpsAddressesWithSamePort_Success (line 299) | [Fact]
    method NoServerAddressFeature_DoesNotThrow_DoesNotRedirect (line 347) | [Fact]
    method SetNullAddressFeature_DoesNotThrow (line 382) | [Fact]

FILE: test/Microsoft.AspNetCore.ResponseCompression.Tests/BodyWrapperStreamTests.cs
  class BodyWrapperStreamTests (line 16) | public class BodyWrapperStreamTests
    method OnWrite_AppendsAcceptEncodingToVaryHeader_IfNotPresent (line 18) | [Theory]
    method Write_IsPassedToUnderlyingStream_WhenDisableResponseBuffering (line 37) | [Theory]
    method WriteAsync_IsPassedToUnderlyingStream_WhenDisableResponseBuffering (line 62) | [Theory]
    method SendFileAsync_IsPassedToUnderlyingStream_WhenDisableResponseBuffering (line 78) | [Fact]
    method BeginWrite_IsPassedToUnderlyingStream_WhenDisableResponseBuffering (line 93) | [Theory]
    class MockResponseCompressionProvider (line 110) | private class MockResponseCompressionProvider: IResponseCompressionPro...
      method MockResponseCompressionProvider (line 114) | public MockResponseCompressionProvider(bool flushable)
      method GetCompressionProvider (line 119) | public ICompressionProvider GetCompressionProvider(HttpContext context)
      method ShouldCompressResponse (line 124) | public bool ShouldCompressResponse(HttpContext context)
      method CheckRequestAcceptsCompression (line 129) | public bool CheckRequestAcceptsCompression(HttpContext context)
    class MockCompressionProvider (line 136) | private class MockCompressionProvider : ICompressionProvider
      method MockCompressionProvider (line 138) | public MockCompressionProvider(bool flushable)
      method CreateStream (line 147) | public Stream CreateStream(Stream outputStream)
    class NoFlushBufferedStream (line 161) | private class NoFlushBufferedStream : Stream
      method NoFlushBufferedStream (line 165) | public NoFlushBufferedStream(Stream outputStream)
      method Flush (line 170) | public override void Flush()
      method Read (line 174) | public override int Read(byte[] buffer, int offset, int count) => _b...
      method Seek (line 176) | public override long Seek(long offset, SeekOrigin origin) => _buffer...
      method SetLength (line 178) | public override void SetLength(long value) => _bufferedStream.SetLen...
      method Write (line 180) | public override void Write(byte[] buffer, int offset, int count) => ...
      method Dispose (line 196) | protected override void Dispose(bool disposing)

FILE: test/Microsoft.AspNetCore.ResponseCompression.Tests/ResponseCompressionMiddlewareTest.cs
  class ResponseCompressionMiddlewareTest (line 25) | public class ResponseCompressionMiddlewareTest
    method Options_HttpsDisabledByDefault (line 49) | [Fact]
    method Request_NoAcceptEncoding_Uncompressed (line 57) | [Fact]
    method Request_AcceptGzipDeflate_CompressedGzip (line 66) | [Fact]
    method Request_AcceptBrotli_CompressedBrotli (line 75) | [Fact]
    method Request_AcceptMixed_CompressedBrotli (line 90) | [Theory]
    method Request_AcceptMixed_ConfiguredOrder_CompressedGzip (line 109) | [Theory]
    method Request_AcceptUnknown_NotCompressed (line 130) | [Fact]
    method ContentType_WithCharset_Compress (line 142) | [Theory]
    method GZipCompressionProvider_OptionsSetInDI_Compress (line 155) | [Fact]
    method MimeTypes_OtherContentTypes_NoMatch (line 186) | [Theory]
    method MimeTypes_IncludedAndExcluded (line 200) | [Theory]
    method NoIncludedMimeTypes_UseDefaults (line 288) | [Fact]
    method NoBody_NotCompressed (line 301) | [Theory]
    method Request_AcceptStar_Compressed (line 337) | [Fact]
    method Request_AcceptIdentity_NotCompressed (line 353) | [Fact]
    method Request_AcceptWithHigherCompressionQuality_Compressed (line 365) | [Theory]
    method Request_AcceptWithhigherIdentityQuality_NotCompressed (line 377) | [Theory]
    method Response_UnknownMimeType_NotCompressed (line 390) | [Fact]
    method Response_WithContentRange_NotCompressed (line 401) | [Fact]
    method Response_WithContentEncodingAlreadySet_NotReCompressed (line 416) | [Fact]
    method Request_Https_CompressedIfEnabled (line 434) | [Theory]
    method FlushHeaders_SendsHeaders_Compresses (line 489) | [Theory]
    method FlushAsyncHeaders_SendsHeaders_Compresses (line 527) | [Theory]
    method FlushBody_CompressesAndFlushes (line 565) | [Theory]
    method FlushAsyncBody_CompressesAndFlushes (line 612) | [Theory]
    method TrickleWriteAndFlush_FlushesEachWrite (line 658) | [Theory]
    method TrickleWriteAndFlushAsync_FlushesEachWrite (line 724) | [Theory]
    method SendFileAsync_OnlySetIfFeatureAlreadyExists (line 789) | [Fact]
    method SendFileAsync_DifferentContentType_NotBypassed (line 821) | [Fact]
    method SendFileAsync_FirstWrite_CompressesAndFlushes (line 864) | [Fact]
    method SendFileAsync_AfterFirstWrite_CompressesAndFlushes (line 907) | [Fact]
    method InvokeMiddleware (line 951) | private async Task<(HttpResponseMessage, List<WriteContext>)> InvokeMi...
    method CheckResponseCompressed (line 994) | private void CheckResponseCompressed(HttpResponseMessage response, int...
    method CheckResponseNotCompressed (line 1011) | private void CheckResponseNotCompressed(HttpResponseMessage response, ...
    method AssertLog (line 1035) | private void AssertLog(WriteContext log, LogLevel level, string message)
    method AssertCompressedWithLog (line 1041) | private void AssertCompressedWithLog(List<WriteContext> logMessages, s...
    class FakeSendFileFeature (line 1049) | private class FakeSendFileFeature : IHttpSendFileFeature
      method FakeSendFileFeature (line 1053) | public FakeSendFileFeature(Stream innerBody)
      method SendFileAsync (line 1060) | public async Task SendFileAsync(string path, long offset, long? coun...
    type EncodingTestData (line 1076) | private readonly struct EncodingTestData
      method EncodingTestData (line 1078) | public EncodingTestData(string encodingName, int expectedBodyLength)

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/ApacheModRewrite/ConditionPatternParserTest.cs
  class ConditionPatternParserTest (line 10) | public class ConditionPatternParserTest
    method ConditionPatternParser_CheckStringComp (line 12) | [Theory]
    method ConditionPatternParser_CheckRegexEqual (line 26) | [Fact]
    method ConditionPatternParser_CheckFileOperations (line 36) | [Theory]
    method ConditionPatternParser_CheckFileOperationsInverted (line 54) | [Theory]
    method ConditionPatternParser_CheckIntComp (line 72) | [Theory]
    method ConditionPatternParser_AssertBadInputThrowsFormatException (line 87) | [Theory]
    method CompareConditions (line 103) | private bool CompareConditions(ParsedModRewriteInput i1, ParsedModRewr...

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/ApacheModRewrite/CookieActionFactoryTest.cs
  class CookieActionFactoryTest (line 10) | public class CookieActionFactoryTest
    method Creates_OneCookie (line 12) | [Fact]
    method Creates_OneCookie_AltSeparator (line 26) | [Fact]
    method Creates_HttpOnly (line 40) | [Fact]
    method TrimsValues (line 54) | [Theory]
    method ThrowsForInvalidFormat (line 70) | [Theory]
    method ThrowsForInvalidIntFormat (line 82) | [Theory]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/ApacheModRewrite/FlagParserTest.cs
  class FlagParserTest (line 12) | public class FlagParserTest
    method FlagParser_CheckSingleTerm (line 14) | [Fact]
    method FlagParser_CheckManyTerms (line 25) | [Fact]
    method FlagParser_CheckManyTermsWithEquals (line 38) | [Fact]
    method FlagParser_AssertFormatErrorWhenFlagsArePoorlyConstructed (line 51) | [Theory]
    method FlagParser_AssertArgumentExceptionWhenFlagsAreNullOrEmpty (line 62) | [Fact]
    method Flag_ParserHandlesComplexFlags (line 69) | [Theory]
    method DictionaryContentsEqual (line 81) | public bool DictionaryContentsEqual<TKey, TValue>(IDictionary<TKey, TV...

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/ApacheModRewrite/FormatExceptionTests.cs
  class FormatExceptionTests (line 11) | public class FormatExceptionTests
    method ThrowFormatExceptionWithCorrectMessage (line 13) | [Theory]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/ApacheModRewrite/ModRewriteMiddlewareTest.cs
  class ModRewriteMiddlewareTest (line 16) | public class ModRewriteMiddlewareTest
    method Invoke_RewritePathWhenMatching (line 18) | [Fact]
    method Invoke_RewritePathTerminatesOnFirstSuccessOfRule (line 35) | [Fact]
    method Invoke_RewritePathDoesNotTerminateOnFirstSuccessOfRule (line 53) | [Fact]
    method Invoke_ShouldIgnoreComments (line 71) | [Fact]
    method Invoke_ShouldRewriteHomepage (line 88) | [Fact]
    method Invoke_ShouldIgnorePorts (line 105) | [Fact]
    method Invoke_HandleNegatedRewriteRules (line 122) | [Fact]
    method Invoke_BackReferencesShouldBeApplied (line 139) | [Theory]
    method Invoke_ShouldHandleFlagNoCase (line 158) | [Theory]
    method Invoke_CheckFullUrlWithOnlyPath (line 181) | [Fact]
    method Invoke_CheckFullUrlWithUFlag (line 199) | [Fact]
    method Invoke_CheckModFileConditions (line 217) | [Fact]
    method Invoke_EnsureHttps (line 235) | [Theory]
    method Invoke_CaptureEmptyStringInRegexAssertRedirectLocationHasForwardSlash (line 255) | [Theory]
    method Invoke_CaptureEmptyStringInRegexAssertRewriteHasForwardSlash (line 275) | [Theory]
    method Invoke_CaptureEmptyStringInRegexAssertLocationHeaderContainsPathBase (line 293) | [Fact]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/ApacheModRewrite/RewriteTokenizerTest.cs
  class RewriteTokenizerTest (line 11) | public class RewriteTokenizerTest
    method Tokenize_RewriteCondtion (line 13) | [Fact]
    method Tokenize_CheckEscapedSpaceIgnored (line 26) | [Fact]
    method Tokenize_CheckWhiteSpaceDirectlyFollowedByEscapeCharacter_CorrectSplit (line 39) | [Fact]
    method Tokenize_CheckWhiteSpaceAtEndOfString_CorrectSplit (line 53) | [Fact]
    method Tokenize_CheckQuotesAreProperlyRemovedFromString (line 67) | [Fact]
    method Tokenize_AssertFormatExceptionWhenEscapeCharacterIsAtEndOfString (line 81) | [Fact]
    method Tokenize_AssertFormatExceptionWhenUnevenNumberOfQuotes (line 88) | [Fact]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/ApacheModRewrite/RuleBuilderTest.cs
  class RuleBuilderTest (line 14) | public class RuleBuilderTest
    method AddAction_Throws_ChangeEnvNotSupported (line 16) | [Fact]
    method AddAction_DefaultRedirectStatusCode (line 28) | [Fact]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/ApacheModRewrite/RuleRegexParserTest.cs
  class RuleRegexParserTest (line 10) | public class RuleRegexParserTest
    method RuleRegexParser_ShouldThrowOnNull (line 12) | [Fact]
    method RuleRegexParser_ShouldThrowOnEmpty (line 18) | [Fact]
    method RuleRegexParser_RegularRegexExpression (line 24) | [Fact]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/ApacheModRewrite/TestStringParserTests.cs
  class TestStringParserTests (line 13) | public class TestStringParserTests
    method ConditionParser_SingleServerVariable (line 15) | [Fact]
    method ConditionParser_MultipleServerVariables (line 28) | [Fact]
    method ConditionParser_ParseLiteral (line 41) | [Fact]
    method ConditionParser_ParseConditionParameters (line 53) | [Fact]
    method ConditionParser_ParseMultipleConditionParameters (line 65) | [Fact]
    method ConditionParser_ParseRuleVariable (line 78) | [Fact]
    method ConditionParser_ParseMultipleRuleVariables (line 89) | [Fact]
    method ConditionParser_ParserComplexRequest (line 102) | [Fact]
    method ConditionParser_InvalidInput (line 116) | [Theory]
    method AssertPatternsEqual (line 128) | private void AssertPatternsEqual(Pattern p1, Pattern p2)

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/IISUrlRewrite/FileParserTests.cs
  class FileParserTests (line 15) | public class FileParserTests
    method RuleParse_ParseTypicalRule (line 17) | [Fact]
    method RuleParse_ParseSingleRuleWithSingleCondition (line 44) | [Fact]
    method RuleParse_ParseMultipleRules (line 81) | [Fact]
    method Should_parse_global_rules (line 130) | [Fact]
    method CreateTestRule (line 162) | private IISUrlRewriteRule CreateTestRule(ConditionCollection conditions,
    method AssertUrlRewriteRuleEquality (line 188) | private void AssertUrlRewriteRuleEquality(IList<IISUrlRewriteRule> act...

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/IISUrlRewrite/FormatExceptionHandlingTests.cs
  class FormatExceptionHandlingTests (line 11) | public class FormatExceptionHandlingTests
    method ThrowFormatExceptionWithCorrectMessage (line 13) | [Theory]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/IISUrlRewrite/InputParserTests.cs
  class InputParserTests (line 16) | public class InputParserTests
    method InputParser_ParseLiteralString (line 18) | [Fact]
    method InputParser_ParseStringWithBackReference (line 26) | [Theory]
    method EvaluateBackReferenceRule (line 39) | [Theory]
    method EvaluatToLowerRule (line 55) | [Theory]
    method EvaluatUriEncodeRule (line 68) | [Theory]
    method FormatExceptionsOnBadSyntax (line 77) | [Theory]
    method Should_throw_FormatException_if_no_rewrite_maps_are_defined (line 94) | [Fact]
    method Should_throw_FormatException_if_rewrite_map_not_found (line 100) | [Fact]
    method Should_parse_RewriteMapSegment_and_successfully_evaluate_result (line 110) | [Fact]
    method CreateTestRewriteContext (line 132) | private RewriteContext CreateTestRewriteContext()
    method CreateTestRuleBackReferences (line 138) | private BackReferenceCollection CreateTestRuleBackReferences()
    method CreateTestCondBackReferences (line 144) | private BackReferenceCollection CreateTestCondBackReferences()
    method CreateRewriteMapRuleMatch (line 150) | private MatchResults CreateRewriteMapRuleMatch(string input)
    method CreateRewriteMapConditionMatch (line 156) | private MatchResults CreateRewriteMapConditionMatch(string input)

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/IISUrlRewrite/InvalidUrlRewriteFormatExceptionHandlingTests.cs
  class InvalidUrlRewriteFormatExceptionHandlingTests (line 10) | public class InvalidUrlRewriteFormatExceptionHandlingTests
    method ThrowInvalidUrlRewriteFormatExceptionWithCorrectMessage (line 12) | [Theory]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/IISUrlRewrite/MiddleWareTests.cs
  class MiddlewareTests (line 24) | public class MiddlewareTests
    method Invoke_RedirectPathToPathAndQuery (line 26) | [Fact]
    method Invoke_RewritePathToPathAndQuery (line 50) | [Fact]
    method Invoke_RewriteBasedOnQueryStringParameters (line 74) | [Fact]
    method Invoke_RedirectToLowerCase (line 102) | [Fact]
    method Invoke_RedirectRemoveTrailingSlash (line 126) | [Fact]
    method Invoke_RedirectAddTrailingSlash (line 153) | [Fact]
    method Invoke_RedirectToHttps (line 180) | [Fact]
    method Invoke_RewriteToHttps (line 206) | [Fact]
    method Invoke_ReverseProxyToAnotherSite (line 238) | [Fact]
    method Invoke_CaptureEmptyStringInRegexAssertRedirectLocationHasForwardSlash (line 267) | [Fact]
    method Invoke_CaptureEmptyStringInRegexAssertRewriteLocationHasForwardSlash (line 296) | [Fact]
    method Invoke_CaptureEmptyStringInRegexAssertLocationHeaderContainsPathBase (line 322) | [Fact]
    method VerifyIsFileAndIsDirectoryParsing (line 348) | [Theory]
    method VerifyTrackAllCaptures (line 378) | [Fact]
    method VerifyTrackAllCapturesRuleAndConditionCapture (line 406) | [Fact]
    method ThrowIndexOutOfRangeExceptionWithCorrectMessage (line 434) | [Fact]
    method Invoke_GlobalRuleConditionMatchesAgainstFullUri_ParsedRule (line 463) | [Fact]
    method Invoke_ReverseProxyToAnotherSiteUsingXmlConfiguredRewriteMap (line 494) | [Theory]
    method Invoke_CustomResponse (line 529) | [Fact]
    method Invoke_GlobalRuleConditionMatchesAgainstFullUri_CodedRule (line 555) | [Theory]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/IISUrlRewrite/RewriteMapParserTests.cs
  class RewriteMapParserTests (line 12) | public class RewriteMapParserTests
    method Should_parse_rewrite_map (line 14) | [Fact]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/IISUrlRewrite/ServerVariableTests.cs
  class ServerVariableTests (line 13) | public class ServerVariableTests
    method CheckServerVariableParsingAndApplication (line 15) | [Theory]
    method CreateTestHttpContext (line 41) | private RewriteContext CreateTestHttpContext()
    method CreateTestRuleMatch (line 59) | private MatchResults CreateTestRuleMatch()
    method CreateTestCondMatch (line 65) | private MatchResults CreateTestCondMatch()
    method EmptyQueryStringCheck (line 71) | [Fact]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/IISUrlRewrite/UrlRewriteApplicationTests.cs
  class UrlRewriteApplicationTests (line 13) | public class UrlRewriteApplicationTests
    method ApplyRule_AssertStopProcessingFlagWillTerminateOnNoAction (line 15) | [Fact]
    method ApplyRule_AssertNoTerminateFlagWillNotTerminateOnNoAction (line 34) | [Fact]
    method ApplyRule_TrackAllCaptures (line 53) | [Fact]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/MiddlewareTests.cs
  class MiddlewareTests (line 15) | public class MiddlewareTests
    method CheckRewritePath (line 17) | [Fact]
    method CheckRedirectPath (line 39) | [Fact]
    method RewriteRulesCanComeFromConfigureOptions (line 55) | [Fact]
    method CheckRedirectPathWithQueryString (line 77) | [Fact]
    method CheckRedirectToHttps (line 93) | [Theory]
    method CheckPermanentRedirectToHttps (line 114) | [Fact]
    method CheckRedirectToHttpsWithSslPort (line 131) | [Theory]
    method CheckRedirectToWwwWithStatusCode (line 150) | [Theory]
    method CheckRedirectToWww (line 171) | [Theory]
    method CheckPermanentRedirectToWww (line 192) | [Fact]
    method CheckNoRedirectToWww (line 209) | [Theory]
    method CheckIfEmptyStringRedirectCorrectly (line 235) | [Fact]
    method CheckIfEmptyStringRewriteCorrectly (line 250) | [Fact]
    method SettingPathBase (line 269) | [Fact]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/PatternSegments/ConditionMatchSegmentTests.cs
  class ConditionMatchSegmentTests (line 11) | public class ConditionMatchSegmentTests
    method ConditionMatch_AssertBackreferencesObtainsCorrectValue (line 14) | [Theory]
    method CreateTestMatch (line 31) | private static MatchResults CreateTestMatch()

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/PatternSegments/DateTimeSegmentTests.cs
  class DateTimeSegmentTests (line 10) | public class DateTimeSegmentTests
    method DateTime_AssertDoesntThrowOnCheckOfSegment (line 12) | [Theory]
    method DateTime_AssertThrowsOnInvalidInput (line 33) | [Theory]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/PatternSegments/HeaderSegmentTests.cs
  class HeaderSegmentTests (line 11) | public class HeaderSegmentTests
    method HeaderSegment_AssertGettingWithHeaderReturnsCorrectValue (line 13) | [Fact]
    method HeaderSegment_AssertGettingANonExistantHeaderReturnsNull (line 29) | [Fact]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/PatternSegments/IsHttpsModSegmentTests.cs
  class IsHttpsModSegmentTests (line 11) | public class IsHttpsModSegmentTests
    method IsHttps_AssertCorrectBehaviorWhenProvidedHttpContext (line 13) | [Theory]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/PatternSegments/IsHttpsSegmentTests.cs
  class IsHttpsSegmentTests (line 11) | public class IsHttpsSegmentTests
    method IsHttps_AssertCorrectBehaviorWhenProvidedHttpContext (line 13) | [Theory]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/PatternSegments/IsIPV6SegmentTests.cs
  class IsIPV6SegmentTests (line 12) | public class IsIPV6SegmentTests
    method IsIPv6_AssertNullRemoteIpAddressReportsCorrectValue (line 14) | [Fact]
    method IsIPv6_AssertCorrectBehaviorWhenIPv6IsUsed (line 29) | [Fact]
    method IsIPv6_AssertCorrectBehaviorWhenIPv4IsUsed (line 44) | [Fact]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/PatternSegments/LIteralSegmentTests.cs
  class LiteralSegmentTests (line 9) | public class LiteralSegmentTests
    method LiteralSegment_AssertSegmentIsCorrect (line 11) | [Fact]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/PatternSegments/LocalAddressSegmentTests.cs
  class LocalAddressSegmentTests (line 12) | public class LocalAddressSegmentTests
    method LocalAddress_AssertSegmentIsCorrect (line 14) | [Fact]
    method LocalAddress_AssertNullLocalIpAddressReturnsNull (line 28) | [Fact]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/PatternSegments/LocalPortSegmentTests.cs
  class LocalPortSegmentTests (line 12) | public class LocalPortSegmentTests
    method LocalPortSegment_AssertSegmentIsCorrect (line 14) | [Fact]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/PatternSegments/QueryStringSegmentTests.cs
  class QueryStringSegmentTests (line 10) | public class QueryStringSegmentTests
    method QueryString_AssertSegmentIsCorrect (line 12) | [Fact]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/PatternSegments/RemoteAddressSegmentTests.cs
  class RemoteAddressSegmentTests (line 11) | public class RemoteAddressSegmentTests
    method RemoteAddress_AssertSegmentIsCorrect (line 13) | [Fact]
    method RemoteAddress_AssertNullLocalIpAddressReturnsNull (line 27) | [Fact]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/PatternSegments/RemotePortSegmentTests.cs
  class RemotePortSegmentTests (line 10) | public class RemotePortSegmentTests
    method RemotePort_AssertSegmentIsCorrect (line 12) | [Fact]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/PatternSegments/RequestFilenameSegmentTests.cs
  class RequestFilenameSegmentTests (line 10) | public class RequestFilenameSegmentTests
    method RequestFilename_AssertSegmentIsCorrect (line 12) | [Fact]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/PatternSegments/RequestMethodSegmentTests.cs
  class RequestMethodSegmentTests (line 10) | public class RequestMethodSegmentTests
    method RequestMethod_AssertSegmentIsCorrect (line 12) | [Fact]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/PatternSegments/RuleMatchSegmentTests.cs
  class RuleMatchSegmentTests (line 11) | public class RuleMatchSegmentTests
    method RuleMatch_AssertBackreferencesObtainsCorrectValue (line 13) | [Theory]
    method CreateTestMatch (line 30) | private static MatchResults CreateTestMatch()

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/PatternSegments/SchemeSegmentTests.cs
  class SchemeSegmentTests (line 10) | public class SchemeSegmentTests
    method SchemeSegment_AssertSegmentIsCorrect (line 12) | [Fact]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/PatternSegments/ServerProtocolSegmentTests.cs
  class ServerProtocolSegmentTests (line 11) | public class ServerProtocolSegmentTests
    method ServerProtocol_AssertSegmentIsCorrect (line 13) | [Fact]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/PatternSegments/ToLowerSegmentTests.cs
  class ToLowerSegmentTests (line 11) | public class ToLowerSegmentTests
    method ToLower_AssertLowerCaseWorksAppropriately (line 13) | [Theory]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/PatternSegments/UrlEncodeSegmentTests.cs
  class UrlEncodeSegmentTests (line 11) | public class UrlEncodeSegmentTests
    method ToLower_AssertLowerCaseWorksAppropriately (line 13) | [Theory]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/PatternSegments/UrlSegmentTests.cs
  class UrlSegmentTests (line 11) | public class UrlSegmentTests
    method AssertSegmentIsCorrect (line 13) | [Theory]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/UrlActions/AbortActionTests.cs
  class AbortActionTests (line 10) | public class AbortActionTests
    method AbortAction_VerifyEndResponseResult (line 12) | public void AbortAction_VerifyEndResponseResult()

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/UrlActions/ChangeCookieActionTests.cs
  class ChangeCookieActionTests (line 12) | public class ChangeCookieActionTests
    method SetsCookie (line 14) | [Fact]
    method ZeroLifetime (line 36) | [Fact]
    method UnsetCookie (line 53) | [Fact]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/UrlActions/ForbiddenActionTests.cs
  class ForbiddenActionTests (line 10) | public class ForbiddenActionTests
    method Forbidden_Verify403IsInStatusCode (line 12) | [Fact]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/UrlActions/GoneActionTests.cs
  class GoneActionTests (line 10) | public class GoneActionTests
    method Gone_Verify410IsInStatusCode (line 12) | [Fact]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/UrlMatches/ExactMatchTests.cs
  class ExactMatchTests (line 12) | public class ExactMatchTests
    method ExactMatch_Case_Sensitivity_Negate_Tests (line 14) | [Theory]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/UrlMatches/IntegerMatchTests.cs
  class IntegerMatchTests (line 14) | public class IntegerMatchTests
    method IntegerMatch_Constructor_Integer_Parse_Excetion (line 16) | [Fact]
    method IntegerMatch_Evaluation_Cases_Tests (line 23) | [Theory]

FILE: test/Microsoft.AspNetCore.Rewrite.Tests/UrlMatches/StringMatchTests.cs
  class StringMatchTests (line 11) | public class StringMatchTests
    method StringMatch_Evaluation_Check_Cases (line 13) | [Theory]
Condensed preview — 283 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (898K chars).
[
  {
    "path": ".appveyor.yml",
    "chars": 327,
    "preview": "init:\n- git config --global core.autocrlf true\nbranches:\n  only:\n  - master\n  - /^release\\/.*$/\n  - /^(.*\\/)?ci-.*$/\nbui"
  },
  {
    "path": ".gitattributes",
    "chars": 862,
    "preview": "*.doc  diff=astextplain\n*.DOC\tdiff=astextplain\n*.docx\tdiff=astextplain\n*.DOCX\tdiff=astextplain\n*.dot\tdiff=astextplain\n*."
  },
  {
    "path": ".gitignore",
    "chars": 375,
    "preview": "[Oo]bj/\n[Bb]in/\nTestResults/\n.nuget/\n*.sln.ide/\n_ReSharper.*/\npackages/\nartifacts/\nPublishProfiles/\n*.user\n*.suo\n*.cache"
  },
  {
    "path": ".travis.yml",
    "chars": 564,
    "preview": "language: csharp\nsudo: false\ndist: trusty\nenv:\n  global:\n  - DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true\n  - DOTNET_CLI_TELE"
  },
  {
    "path": ".vsts-pipelines/builds/ci-internal.yml",
    "chars": 227,
    "preview": "trigger:\n- master\n- release/*\n\nresources:\n  repositories:\n  - repository: buildtools\n    type: git\n    name: aspnet-Buil"
  },
  {
    "path": ".vsts-pipelines/builds/ci-public.yml",
    "chars": 316,
    "preview": "trigger:\n- master\n- release/*\n\n# See https://github.com/aspnet/BuildTools\nresources:\n  repositories:\n  - repository: bui"
  },
  {
    "path": "BasicMiddleware.sln",
    "chars": 14694,
    "preview": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 15\r\nVisualStudioVersion = 15.0.27130.2027\r\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 171,
    "preview": "Contributing\n======\n\nInformation on contributing to this repo is in the [Contributing Guide](https://github.com/aspnet/H"
  },
  {
    "path": "Directory.Build.props",
    "chars": 907,
    "preview": "<Project>\n  <Import\n    Project=\"$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), AspNetCoreSettin"
  },
  {
    "path": "Directory.Build.targets",
    "chars": 666,
    "preview": "<Project>\n  <PropertyGroup>\n    <RuntimeFrameworkVersion Condition=\" '$(TargetFramework)' == 'netcoreapp2.1' \">$(Microso"
  },
  {
    "path": "LICENSE.txt",
    "chars": 11361,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "NuGet.config",
    "chars": 197,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <packageSources>\n    <clear />\n    <!-- Restore sources should"
  },
  {
    "path": "NuGetPackageVerifier.json",
    "chars": 90,
    "preview": "{\n    \"Default\": {\n        \"rules\": [\n            \"DefaultCompositeRule\"\n        ]\n    }\n}"
  },
  {
    "path": "README.md",
    "chars": 679,
    "preview": "ASP.NET Core Basic Middleware Components [Archived]\n===================================================\n\n**This GitHub p"
  },
  {
    "path": "benchmarks/Microsoft.AspNetCore.ResponseCompression.Benchmarks/AssemblyInfo.cs",
    "chars": 228,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "benchmarks/Microsoft.AspNetCore.ResponseCompression.Benchmarks/Microsoft.AspNetCore.ResponseCompression.Benchmarks.csproj",
    "chars": 862,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>netcoreapp2."
  },
  {
    "path": "benchmarks/Microsoft.AspNetCore.ResponseCompression.Benchmarks/ResponseCompressionProviderBenchmark.cs",
    "chars": 1764,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "build/dependencies.props",
    "chars": 3755,
    "preview": "<Project>\n  <PropertyGroup>\n    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProject"
  },
  {
    "path": "build/repo.props",
    "chars": 490,
    "preview": "<Project>\n  <Import Project=\"dependencies.props\" />\n\n  <PropertyGroup>\n    <!-- These properties are use by the automati"
  },
  {
    "path": "build/sources.props",
    "chars": 767,
    "preview": "<Project>\n  <Import Project=\"$(DotNetRestoreSourcePropsPath)\" Condition=\"'$(DotNetRestoreSourcePropsPath)' != ''\"/>\n\n  <"
  },
  {
    "path": "build.cmd",
    "chars": 260,
    "preview": "@ECHO OFF\nPowerShell -NoProfile -NoLogo -ExecutionPolicy unrestricted -Command \"[System.Threading.Thread]::CurrentThread"
  },
  {
    "path": "build.sh",
    "chars": 253,
    "preview": "#!/usr/bin/env bash\n\nset -euo pipefail\nDIR=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && pwd )\"\n\n# Call \"sync\" between \"c"
  },
  {
    "path": "korebuild-lock.txt",
    "chars": 84,
    "preview": "version:3.0.0-alpha1-20181011.3\ncommithash:e7569d931e994629267ab2646e9926140962b4ac\n"
  },
  {
    "path": "korebuild.json",
    "chars": 129,
    "preview": "{\n  \"$schema\": \"https://raw.githubusercontent.com/aspnet/BuildTools/master/tools/korebuild.schema.json\",\n  \"channel\": \"m"
  },
  {
    "path": "run.cmd",
    "chars": 246,
    "preview": "@ECHO OFF\nPowerShell -NoProfile -NoLogo -ExecutionPolicy unrestricted -Command \"[System.Threading.Thread]::CurrentThread"
  },
  {
    "path": "run.ps1",
    "chars": 6617,
    "preview": "#!/usr/bin/env powershell\n#requires -version 4\n\n<#\n.SYNOPSIS\nExecutes KoreBuild commands.\n\n.DESCRIPTION\nDownloads korebu"
  },
  {
    "path": "run.sh",
    "chars": 8950,
    "preview": "#!/usr/bin/env bash\n\nset -euo pipefail\n\n#\n# variables\n#\n\nRESET=\"\\033[0m\"\nRED=\"\\033[0;31m\"\nYELLOW=\"\\033[0;33m\"\nMAGENTA=\"\\"
  },
  {
    "path": "samples/HostFilteringSample/HostFilteringSample.csproj",
    "chars": 1157,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <TargetFrameworks>netcoreapp2.2;net461</TargetFrameworks>\n "
  },
  {
    "path": "samples/HostFilteringSample/Program.cs",
    "chars": 1283,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "samples/HostFilteringSample/Properties/launchSettings.json",
    "chars": 631,
    "preview": "{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      "
  },
  {
    "path": "samples/HostFilteringSample/Startup.cs",
    "chars": 1916,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "samples/HostFilteringSample/appsettings.Development.json",
    "chars": 51,
    "preview": "{\n  \"AllowedHosts\": \"localhost;127.0.0.1;[::1]\"\n}\n"
  },
  {
    "path": "samples/HostFilteringSample/appsettings.Production.json",
    "chars": 47,
    "preview": "{\n  \"AllowedHosts\": \"example.com;localhost\"\n}\n"
  },
  {
    "path": "samples/HostFilteringSample/appsettings.json",
    "chars": 5,
    "preview": "{\n\n}"
  },
  {
    "path": "samples/HttpOverridesSample/HttpOverridesSample.csproj",
    "chars": 464,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <TargetFrameworks>netcoreapp2.2;net461</TargetFrameworks>\n"
  },
  {
    "path": "samples/HttpOverridesSample/Properties/launchSettings.json",
    "chars": 530,
    "preview": "{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      "
  },
  {
    "path": "samples/HttpOverridesSample/Startup.cs",
    "chars": 1677,
    "preview": "using Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft"
  },
  {
    "path": "samples/HttpsPolicySample/HttpsPolicySample.csproj",
    "chars": 828,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <TargetFrameworks>net461;netcoreapp2.2</TargetFrameworks>\n"
  },
  {
    "path": "samples/HttpsPolicySample/Properties/launchSettings.json",
    "chars": 622,
    "preview": "{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      "
  },
  {
    "path": "samples/HttpsPolicySample/Startup.cs",
    "chars": 2520,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Net;\nusing System.Thre"
  },
  {
    "path": "samples/ResponseBufferingSample/Properties/launchSettings.json",
    "chars": 516,
    "preview": "{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      "
  },
  {
    "path": "samples/ResponseBufferingSample/ResponseBufferingSample.csproj",
    "chars": 456,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <TargetFrameworks>netcoreapp2.2;net461</TargetFrameworks>\n"
  },
  {
    "path": "samples/ResponseBufferingSample/Startup.cs",
    "chars": 1593,
    "preview": "using Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft"
  },
  {
    "path": "samples/ResponseCompressionSample/CustomCompressionProvider.cs",
    "chars": 450,
    "preview": "using System.IO;\nusing Microsoft.AspNetCore.ResponseCompression;\n\nnamespace ResponseCompressionSample\n{\n    public clas"
  },
  {
    "path": "samples/ResponseCompressionSample/LoremIpsum.cs",
    "chars": 2365,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "samples/ResponseCompressionSample/Properties/launchSettings.json",
    "chars": 630,
    "preview": "{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      "
  },
  {
    "path": "samples/ResponseCompressionSample/ResponseCompressionSample.csproj",
    "chars": 719,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <TargetFrameworks>netcoreapp2.2;net461</TargetFrameworks>\n"
  },
  {
    "path": "samples/ResponseCompressionSample/Startup.cs",
    "chars": 3293,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "samples/ResponseCompressionSample/testfile1kb.txt",
    "chars": 1022,
    "preview": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
  },
  {
    "path": "samples/RewriteSample/Properties/launchSettings.json",
    "chars": 455,
    "preview": "{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      "
  },
  {
    "path": "samples/RewriteSample/Rewrite.txt",
    "chars": 198,
    "preview": "# Rewrite path with additional sub directory\nRewriteCond %{HTTP_HOST}   !^www\\.example\\.com [NC,OR]\nRewriteCond %{SERVE"
  },
  {
    "path": "samples/RewriteSample/RewriteSample.csproj",
    "chars": 594,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <TargetFrameworks>netcoreapp2.2;net461</TargetFrameworks>\n"
  },
  {
    "path": "samples/RewriteSample/Startup.cs",
    "chars": 2176,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "samples/RewriteSample/UrlRewrite.xml",
    "chars": 306,
    "preview": "<rewrite>\n  <rules>\n    <rule name=\"Rewrite 20 to 10\" stopProcessing=\"true\">\n      <match url=\"^app$\" />\n      <conditi"
  },
  {
    "path": "src/Directory.Build.props",
    "chars": 227,
    "preview": "<Project>\n  <Import Project=\"..\\Directory.Build.props\" />\n\n  <ItemGroup>\n    <PackageReference Include=\"Internal.AspNetC"
  },
  {
    "path": "src/Microsoft.AspNetCore.Buffering/BufferingWriteStream.cs",
    "chars": 6674,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Microsoft.AspNetCore.Buffering/HttpBufferingFeature.cs",
    "chars": 929,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Microsoft.AspNetCore.Buffering/Microsoft.AspNetCore.Buffering.csproj",
    "chars": 986,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <VersionPrefix Condition=\"'$(ExperimentalVersionPrefix)' != ''"
  },
  {
    "path": "src/Microsoft.AspNetCore.Buffering/ResponseBufferingMiddleware.cs",
    "chars": 2567,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Microsoft.AspNetCore.Buffering/ResponseBufferingMiddlewareExtensions.cs",
    "chars": 762,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Microsoft.AspNetCore.Buffering/SendFileFeatureWrapper.cs",
    "chars": 1147,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Microsoft.AspNetCore.HostFiltering/HostFilteringBuilderExtensions.cs",
    "chars": 1121,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.HostFiltering/HostFilteringMiddleware.cs",
    "chars": 7091,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.HostFiltering/HostFilteringOptions.cs",
    "chars": 2168,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.HostFiltering/HostFilteringServicesExtensions.cs",
    "chars": 1362,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.HostFiltering/Microsoft.AspNetCore.HostFiltering.csproj",
    "chars": 918,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Description>\n      ASP.NET Core middleware for filtering out r"
  },
  {
    "path": "src/Microsoft.AspNetCore.HostFiltering/baseline.netcore.json",
    "chars": 5296,
    "preview": "{\n  \"AssemblyIdentity\": \"Microsoft.AspNetCore.HostFiltering, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829"
  },
  {
    "path": "src/Microsoft.AspNetCore.HttpOverrides/ForwardedHeaders.cs",
    "chars": 469,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Microsoft.AspNetCore.HttpOverrides/ForwardedHeadersDefaults.cs",
    "chars": 1431,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.HttpOverrides/ForwardedHeadersExtensions.cs",
    "chars": 1624,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.HttpOverrides/ForwardedHeadersMiddleware.cs",
    "chars": 19723,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Microsoft.AspNetCore.HttpOverrides/ForwardedHeadersOptions.cs",
    "chars": 4621,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.HttpOverrides/HttpMethodOverrideExtensions.cs",
    "chars": 1782,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Microsoft.AspNetCore.HttpOverrides/HttpMethodOverrideMiddleware.cs",
    "chars": 2154,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Microsoft.AspNetCore.HttpOverrides/HttpMethodOverrideOptions.cs",
    "chars": 522,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Microsoft.AspNetCore.HttpOverrides/IPNetwork.cs",
    "chars": 1774,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.HttpOverrides/Internal/IPEndPointParser.cs",
    "chars": 2739,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Microsoft.AspNetCore.HttpOverrides/Microsoft.AspNetCore.HttpOverrides.csproj",
    "chars": 929,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Description>ASP.NET Core basic middleware for supporting HTTP"
  },
  {
    "path": "src/Microsoft.AspNetCore.HttpOverrides/baseline.net45.json",
    "chars": 12542,
    "preview": "{\n  \"AssemblyIdentity\": \"Microsoft.AspNetCore.HttpOverrides, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829"
  },
  {
    "path": "src/Microsoft.AspNetCore.HttpOverrides/baseline.netcore.json",
    "chars": 17659,
    "preview": "{\n  \"AssemblyIdentity\": \"Microsoft.AspNetCore.HttpOverrides, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829"
  },
  {
    "path": "src/Microsoft.AspNetCore.HttpsPolicy/HstsBuilderExtensions.cs",
    "chars": 1005,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.HttpsPolicy/HstsMiddleware.cs",
    "chars": 3864,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.HttpsPolicy/HstsOptions.cs",
    "chars": 1720,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.HttpsPolicy/HstsServicesExtensions.cs",
    "chars": 1273,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.HttpsPolicy/HttpsRedirectionBuilderExtensions.cs",
    "chars": 1443,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.HttpsPolicy/HttpsRedirectionMiddleware.cs",
    "chars": 6008,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.HttpsPolicy/HttpsRedirectionOptions.cs",
    "chars": 1067,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.HttpsPolicy/HttpsRedirectionServicesExtensions.cs",
    "chars": 1345,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.HttpsPolicy/Microsoft.AspNetCore.HttpsPolicy.csproj",
    "chars": 1126,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Description>\n      ASP.NET Core basic middleware for supportin"
  },
  {
    "path": "src/Microsoft.AspNetCore.HttpsPolicy/baseline.netcore.json",
    "chars": 10734,
    "preview": "{\n  \"AssemblyIdentity\": \"Microsoft.AspNetCore.HttpsPolicy, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829dd"
  },
  {
    "path": "src/Microsoft.AspNetCore.HttpsPolicy/internal/HstsLoggingExtensions.cs",
    "chars": 1388,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Microsoft.AspNetCore.HttpsPolicy/internal/HttpsLoggingExtensions.cs",
    "chars": 2358,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.ResponseCompression/BodyWrapperStream.cs",
    "chars": 11350,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.ResponseCompression/BrotliCompressionProvider.cs",
    "chars": 1548,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.ResponseCompression/BrotliCompressionProviderOptions.cs",
    "chars": 866,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.ResponseCompression/CompressionProviderCollection.cs",
    "chars": 1853,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Microsoft.AspNetCore.ResponseCompression/CompressionProviderFactory.cs",
    "chars": 1500,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.ResponseCompression/GzipCompressionProvider.cs",
    "chars": 1522,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.ResponseCompression/GzipCompressionProviderOptions.cs",
    "chars": 825,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.ResponseCompression/ICompressionProvider.cs",
    "chars": 1125,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.ResponseCompression/IResponseCompressionProvider.cs",
    "chars": 1330,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.ResponseCompression/Microsoft.AspNetCore.ResponseCompression.csproj",
    "chars": 778,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Description>ASP.NET Core middleware for HTTP Response compres"
  },
  {
    "path": "src/Microsoft.AspNetCore.ResponseCompression/Properties/AssemblyInfo.cs",
    "chars": 622,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.ResponseCompression/ResponseCompressionBuilderExtensions.cs",
    "chars": 1107,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.ResponseCompression/ResponseCompressionDefaults.cs",
    "chars": 1044,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.ResponseCompression/ResponseCompressionMiddleware.cs",
    "chars": 2962,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.ResponseCompression/ResponseCompressionOptions.cs",
    "chars": 1344,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.ResponseCompression/ResponseCompressionProvider.cs",
    "chars": 10832,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.ResponseCompression/ResponseCompressionServicesExtensions.cs",
    "chars": 2165,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.ResponseCompression/baseline.netcore.json",
    "chars": 15170,
    "preview": "{\n  \"AssemblyIdentity\": \"Microsoft.AspNetCore.ResponseCompression, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9"
  },
  {
    "path": "src/Microsoft.AspNetCore.ResponseCompression/baseline.netframework.json",
    "chars": 15170,
    "preview": "{\n  \"AssemblyIdentity\": \"Microsoft.AspNetCore.ResponseCompression, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9"
  },
  {
    "path": "src/Microsoft.AspNetCore.ResponseCompression/internal/ResponseCompressionLoggingExtensions.cs",
    "chars": 3501,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/ApacheModRewriteOptionsExtensions.cs",
    "chars": 2357,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Extensions/RewriteMiddlewareLoggingExtensions.cs",
    "chars": 6522,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/IISUrlRewriteOptionsExtensions.cs",
    "chars": 2371,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/IRule.cs",
    "chars": 635,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/ApacheModRewriteRule.cs",
    "chars": 1996,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/Condition.cs",
    "chars": 728,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/ConditionEvaluator.cs",
    "chars": 2096,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/ConditionPatternParser.cs",
    "chars": 10883,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/ConditionType.cs",
    "chars": 353,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/CookieActionFactory.cs",
    "chars": 4228,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/FileParser.cs",
    "chars": 4499,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/FlagParser.cs",
    "chars": 3738,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/FlagType.cs",
    "chars": 674,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/Flags.cs",
    "chars": 1868,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/OperationType.cs",
    "chars": 537,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/ParsedModRewriteCondition.cs",
    "chars": 823,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/RuleBuilder.cs",
    "chars": 10287,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/RuleRegexParser.cs",
    "chars": 818,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/SegmentType.cs",
    "chars": 370,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/ServerVariables.cs",
    "chars": 6617,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/TestStringParser.cs",
    "chars": 7403,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/Tokenizer.cs",
    "chars": 4455,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/BackReferenceCollection.cs",
    "chars": 1539,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/DelegateRule.cs",
    "chars": 552,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/ActionType.cs",
    "chars": 368,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/Condition.cs",
    "chars": 685,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/ConditionCollection.cs",
    "chars": 1921,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/ConditionEvaluator.cs",
    "chars": 1845,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/IISRewriteMap.cs",
    "chars": 1254,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/IISRewriteMapCollection.cs",
    "chars": 1224,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/IISUrlRewriteRule.cs",
    "chars": 2593,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/InputParser.cs",
    "chars": 9133,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/InvalidUrlRewriteFormatException.cs",
    "chars": 1231,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/LogicalGrouping.cs",
    "chars": 314,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/MatchType.cs",
    "chars": 326,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/PatternSyntax.cs",
    "chars": 334,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/RedirectType.cs",
    "chars": 522,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/RewriteMapParser.cs",
    "chars": 1341,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/RewriteTags.cs",
    "chars": 2040,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/ServerVariables.cs",
    "chars": 3738,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/UriMatchCondition.cs",
    "chars": 1072,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/UriMatchPart.cs",
    "chars": 302,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/UrlRewriteFileParser.cs",
    "chars": 12339,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/UrlRewriteRuleBuilder.cs",
    "chars": 3732,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/MatchResults.cs",
    "chars": 606,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/ParserContext.cs",
    "chars": 1513,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/Pattern.cs",
    "chars": 963,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegment.cs",
    "chars": 432,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/ConditionMatchSegment.cs",
    "chars": 670,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/DateTimeSegment.cs",
    "chars": 3166,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/HeaderSegment.cs",
    "chars": 676,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/IsHttpsModSegment.cs",
    "chars": 681,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/IsHttpsUrlSegment.cs",
    "chars": 681,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/IsIPV6Segment.cs",
    "chars": 760,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/LiteralSegment.cs",
    "chars": 646,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/LocalAddressSegment.cs",
    "chars": 558,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/LocalPortSegment.cs",
    "chars": 606,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/QueryStringSegment.cs",
    "chars": 723,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/RemoteAddressSegment.cs",
    "chars": 559,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/RemotePortSegment.cs",
    "chars": 608,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/RequestFilenameSegment.cs",
    "chars": 536,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/RequestMethodSegment.cs",
    "chars": 536,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/RewriteMapSegment.cs",
    "chars": 951,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/RuleMatchSegment.cs",
    "chars": 654,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/SchemeSegment.cs",
    "chars": 529,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/ServerProtocolSegment.cs",
    "chars": 611,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/ToLowerSegment.cs",
    "chars": 1077,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/UrlEncodeSegment.cs",
    "chars": 1198,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/PatternSegments/UrlSegment.cs",
    "chars": 975,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/RedirectRule.cs",
    "chars": 3200,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/RedirectToHttpsRule.cs",
    "chars": 1586,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/RedirectToWwwRule.cs",
    "chars": 1570,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/RewriteRule.cs",
    "chars": 4033,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/UrlAction.cs",
    "chars": 472,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/UrlActions/AbortAction.cs",
    "chars": 722,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/UrlActions/ChangeCookieAction.cs",
    "chars": 2306,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/UrlActions/CustomResponseAction.cs",
    "chars": 1655,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/UrlActions/ForbiddenAction.cs",
    "chars": 640,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/UrlActions/GoneAction.cs",
    "chars": 630,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/UrlActions/NoneAction.cs",
    "chars": 683,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/UrlActions/RedirectAction.cs",
    "chars": 3615,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/UrlActions/RewriteAction.cs",
    "chars": 4739,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/UrlMatch.cs",
    "chars": 397,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/UrlMatches/ExactMatch.cs",
    "chars": 1073,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/UrlMatches/FileSizeMatch.cs",
    "chars": 671,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/UrlMatches/IntegerMatch.cs",
    "chars": 2392,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/UrlMatches/IntegerOperation.cs",
    "chars": 385,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Microsoft.AspNetCore.Rewrite/Internal/UrlMatches/IsDirectoryMatch.cs",
    "chars": 640,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  }
]

// ... and 83 more files (download for full content)

About this extraction

This page contains the full source code of the aspnet/BasicMiddleware GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 283 files (814.0 KB), approximately 179.1k tokens, and a symbol index with 873 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!