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
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
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.