diff --git a/.azure/pipelines/signalr-daily-tests.yml b/.azure/pipelines/signalr-daily-tests.yml index a60958a0ac..a53c08e9f9 100644 --- a/.azure/pipelines/signalr-daily-tests.yml +++ b/.azure/pipelines/signalr-daily-tests.yml @@ -4,6 +4,11 @@ # Daily Tests for ASP.NET Core SignalR # These use Sauce Labs resources, hence they run daily rather than per-commit. +variables: + - ${{ if ne(variables['System.TeamProject'], 'public') }}: + - group: DotNet-MSRC-Storage + - group: AzureDevOps-Artifact-Feeds-Pats + # The only Daily Tests we have run in Sauce Labs and only need to run on one machine (because they just trigger SauceLabs) # Hence we use the 'default-build.yml' template because it represents a single phase jobs: diff --git a/.github/ISSUE_TEMPLATE/razor_tooling.md b/.github/ISSUE_TEMPLATE/razor_tooling.md new file mode 100644 index 0000000000..2341e230bd --- /dev/null +++ b/.github/ISSUE_TEMPLATE/razor_tooling.md @@ -0,0 +1,66 @@ +--- +name: 🐞 Razor Tooling Bug report +about: Report an issue about something that is not working in the new Razor tooling +labels: area-razor.tooling, feature-razor.vs +--- + + + + + +### Describe the bug +A clear and concise description of what the bug is. + +### To Reproduce + + +### Logs & Exceptions + +Please collect the data below before reporting your issue to aid us in diagnosing the root cause. + +#### Activity log +[Here](https://docs.microsoft.com/en-us/visualstudio/extensibility/how-to-use-the-activity-log?view=vs-2019#to-examine-the-activity-log) are the instructions on how to generate/acquire one. + +#### Razor Language Server Client log + +
+Razor Language Server Client Log Output + +Paste log output here + +
+ +#### HTML Language Server Client log + +
+HTML Language Server Client Log Output + +Paste log output here + +
+ +### Further technical details +- VS version (Help => About Microsoft Visual Studio, i.e. 16.8.0 Preview 1 30313.27...). If in Codespaces there will be two versions (server and client), please provide both. +- Scenario (Local, LiveShare, Codespaces) + +### Pre-requisite checklist +- [ ] Steps to reproduce the issue +- [ ] Visual Studio Activity Log attached. +- [ ] Razor Language Server client logs included. +- [ ] HTML Language Server client logs included diff --git a/AspNetCore.sln b/AspNetCore.sln index bd7fc769c8..9f1fe33e99 100644 --- a/AspNetCore.sln +++ b/AspNetCore.sln @@ -7,9 +7,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "eng", "eng", "{C28A32F6-831 EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{0F84F170-57D0-496B-8E2C-7984178EF69F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BaselineGenerator", "eng\tools\BaselineGenerator\BaselineGenerator.csproj", "{03C2290A-1C48-489A-81DB-F3447B0DA595}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BaselineGenerator", "eng\tools\BaselineGenerator\BaselineGenerator.csproj", "{03C2290A-1C48-489A-81DB-F3447B0DA595}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RepoTasks", "eng\tools\RepoTasks\RepoTasks.csproj", "{2B94628A-CFFB-447E-8026-A126C33B0917}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RepoTasks", "eng\tools\RepoTasks\RepoTasks.csproj", "{2B94628A-CFFB-447E-8026-A126C33B0917}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{017429CC-C5FB-48B4-9C46-034E29EE2F06}" EndProject @@ -165,7 +165,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Da EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc.Formatters.Json", "Mvc.Formatters.Json", "{644AAC18-8E13-4392-8891-3814E355C819}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.Formatters.Json", "src\Mvc\Mvc.Formatters.Json\src\Microsoft.AspNetCore.Mvc.Formatters.Json.csproj", "{928C9877-6BF3-447D-9E33-ACF833151D77}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Formatters.Json", "src\Mvc\Mvc.Formatters.Json\src\Microsoft.AspNetCore.Mvc.Formatters.Json.csproj", "{928C9877-6BF3-447D-9E33-ACF833151D77}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc.Localization", "Mvc.Localization", "{70AD2DB0-47D7-492F-817A-34BCAFD861C4}" EndProject @@ -241,11 +241,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Analyzers", "Analyzers", "{ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Analyzers", "Analyzers", "{021E9BF3-2D3D-4169-834E-718ABE0E5B68}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Analyzers", "src\Analyzers\Analyzers\src\Microsoft.AspNetCore.Analyzers.csproj", "{E5CA56AF-64B6-47B4-BCB7-EF95B53D14E1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Analyzers", "src\Analyzers\Analyzers\src\Microsoft.AspNetCore.Analyzers.csproj", "{E5CA56AF-64B6-47B4-BCB7-EF95B53D14E1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Analyzers.Test", "src\Analyzers\Analyzers\test\Microsoft.AspNetCore.Analyzers.Test.csproj", "{C73F3203-4E8C-46BC-A299-1A5BB81DA2C3}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Analyzers.Test", "src\Analyzers\Analyzers\test\Microsoft.AspNetCore.Analyzers.Test.csproj", "{C73F3203-4E8C-46BC-A299-1A5BB81DA2C3}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Antiforgery.Test", "src\Antiforgery\test\Microsoft.AspNetCore.Antiforgery.Test.csproj", "{78C5ACC3-6718-4682-B350-737EDA1E4F35}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Antiforgery.Test", "src\Antiforgery\test\Microsoft.AspNetCore.Antiforgery.Test.csproj", "{78C5ACC3-6718-4682-B350-737EDA1E4F35}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Azure", "Azure", "{DFDEED51-6B9B-41B9-A684-9F3FFC07C9B4}" EndProject @@ -253,19 +253,19 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AzureAD", "AzureAD", "{2757 EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Authentication.AzureAD.UI", "Authentication.AzureAD.UI", "{CE6853C2-73AE-42EB-AD8C-2A094B2A4A36}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Authentication.AzureAD.UI", "src\Azure\AzureAD\Authentication.AzureAD.UI\src\Microsoft.AspNetCore.Authentication.AzureAD.UI.csproj", "{42E30C98-1358-497F-960B-E1AA17F46704}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.AzureAD.UI", "src\Azure\AzureAD\Authentication.AzureAD.UI\src\Microsoft.AspNetCore.Authentication.AzureAD.UI.csproj", "{42E30C98-1358-497F-960B-E1AA17F46704}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Authentication.AzureAD.UI.Test", "src\Azure\AzureAD\Authentication.AzureAD.UI\test\Microsoft.AspNetCore.Authentication.AzureAD.UI.Test.csproj", "{4870B11E-7F67-4757-BC9A-45E5895AC712}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.AzureAD.UI.Test", "src\Azure\AzureAD\Authentication.AzureAD.UI\test\Microsoft.AspNetCore.Authentication.AzureAD.UI.Test.csproj", "{4870B11E-7F67-4757-BC9A-45E5895AC712}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Authentication.AzureADB2C.UI", "Authentication.AzureADB2C.UI", "{B95A22C8-71B7-49DE-94B2-16402A36B914}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Authentication.AzureADB2C.UI", "src\Azure\AzureAD\Authentication.AzureADB2C.UI\src\Microsoft.AspNetCore.Authentication.AzureADB2C.UI.csproj", "{600BF48B-F5DF-4C9D-A5A7-635A8DD6C32A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.AzureADB2C.UI", "src\Azure\AzureAD\Authentication.AzureADB2C.UI\src\Microsoft.AspNetCore.Authentication.AzureADB2C.UI.csproj", "{600BF48B-F5DF-4C9D-A5A7-635A8DD6C32A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Test", "src\Azure\AzureAD\Authentication.AzureADB2C.UI\test\Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Test.csproj", "{27DF3ACF-F3ED-4D76-BFCB-57251892ABC0}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Test", "src\Azure\AzureAD\Authentication.AzureADB2C.UI\test\Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Test.csproj", "{27DF3ACF-F3ED-4D76-BFCB-57251892ABC0}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{16653D2A-AC79-44ED-B908-2EEB58684C50}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Authentication.AzureAD.FunctionalTests", "src\Azure\AzureAD\test\FunctionalTests\Microsoft.AspNetCore.Authentication.AzureAD.FunctionalTests.csproj", "{B70B1843-4360-4731-9D5C-599189CC1198}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.AzureAD.FunctionalTests", "src\Azure\AzureAD\test\FunctionalTests\Microsoft.AspNetCore.Authentication.AzureAD.FunctionalTests.csproj", "{B70B1843-4360-4731-9D5C-599189CC1198}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Kestrel", "Kestrel", "{4FDDC525-4E60-4CAF-83A3-261C5B43721F}" EndProject @@ -289,27 +289,27 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions", "Extensions", "{7004082D-53E9-45C2-B2DE-EB3CE448B64F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.DataProtection.Extensions", "src\DataProtection\Extensions\src\Microsoft.AspNetCore.DataProtection.Extensions.csproj", "{478D4BE2-F4AC-45EF-BEE4-35399DECCABF}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DataProtection.Extensions", "src\DataProtection\Extensions\src\Microsoft.AspNetCore.DataProtection.Extensions.csproj", "{478D4BE2-F4AC-45EF-BEE4-35399DECCABF}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc.Testing", "Mvc.Testing", "{ADAC3089-7247-4137-A8CB-8114D58C9B93}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.Testing", "src\Mvc\Mvc.Testing\src\Microsoft.AspNetCore.Mvc.Testing.csproj", "{183F99F9-0C0B-4790-8152-637B4AE68622}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Testing", "src\Mvc\Mvc.Testing\src\Microsoft.AspNetCore.Mvc.Testing.csproj", "{183F99F9-0C0B-4790-8152-637B4AE68622}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AzureAppServices.HostingStartup", "AzureAppServices.HostingStartup", "{EA2941E6-5868-47CD-97AB-2DB1D5F18D97}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.AzureAppServices.HostingStartup", "src\Azure\AzureAppServices.HostingStartup\src\Microsoft.AspNetCore.AzureAppServices.HostingStartup.csproj", "{F8C6AE5D-ED8B-4CCD-9E4C-28AD16EF075B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.AzureAppServices.HostingStartup", "src\Azure\AzureAppServices.HostingStartup\src\Microsoft.AspNetCore.AzureAppServices.HostingStartup.csproj", "{F8C6AE5D-ED8B-4CCD-9E4C-28AD16EF075B}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AzureAppServicesIntegration", "AzureAppServicesIntegration", "{AE3F1191-648A-4813-81C5-E8527E716BB7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.AzureAppServicesIntegration", "src\Azure\AzureAppServicesIntegration\src\Microsoft.AspNetCore.AzureAppServicesIntegration.csproj", "{32FE10AE-CC85-407A-8720-624CDD3EB890}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.AzureAppServicesIntegration", "src\Azure\AzureAppServicesIntegration\src\Microsoft.AspNetCore.AzureAppServicesIntegration.csproj", "{32FE10AE-CC85-407A-8720-624CDD3EB890}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.AzureAppServicesIntegration.Tests", "src\Azure\AzureAppServicesIntegration\test\Microsoft.AspNetCore.AzureAppServicesIntegration.Tests.csproj", "{425D32AE-C933-4E4B-AC96-B2DCD9FA2B24}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.AzureAppServicesIntegration.Tests", "src\Azure\AzureAppServicesIntegration\test\Microsoft.AspNetCore.AzureAppServicesIntegration.Tests.csproj", "{425D32AE-C933-4E4B-AC96-B2DCD9FA2B24}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{2E944A89-5614-425E-A87A-5F455EDB78D7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AzureAppServicesHostingStartupSample", "src\Azure\samples\AzureAppServicesHostingStartupSample\AzureAppServicesHostingStartupSample.csproj", "{FE930950-64DC-45A3-8128-2D68F97EBB19}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AzureAppServicesHostingStartupSample", "src\Azure\samples\AzureAppServicesHostingStartupSample\AzureAppServicesHostingStartupSample.csproj", "{FE930950-64DC-45A3-8128-2D68F97EBB19}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AzureAppServicesSample", "src\Azure\samples\AzureAppServicesSample\AzureAppServicesSample.csproj", "{81410464-9C9E-4DDE-824C-BCD0DA8E6523}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AzureAppServicesSample", "src\Azure\samples\AzureAppServicesSample\AzureAppServicesSample.csproj", "{81410464-9C9E-4DDE-824C-BCD0DA8E6523}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Hosting", "Hosting", "{68C2D913-06D4-4EAC-9283-78465BF214E1}" EndProject @@ -317,33 +317,33 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Hostin EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Server.IntegrationTesting", "Server.IntegrationTesting", "{F4B3C10B-F713-45D1-84EF-DD503BA09D20}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Server.IntegrationTesting", "src\Hosting\Server.IntegrationTesting\src\Microsoft.AspNetCore.Server.IntegrationTesting.csproj", "{7AA8771B-F1F3-409E-960A-EEF00B94135A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IntegrationTesting", "src\Hosting\Server.IntegrationTesting\src\Microsoft.AspNetCore.Server.IntegrationTesting.csproj", "{7AA8771B-F1F3-409E-960A-EEF00B94135A}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestHost", "TestHost", "{E6639EAB-40B0-4BB6-A56B-25ECC4B6D3D9}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.TestHost", "src\Hosting\TestHost\src\Microsoft.AspNetCore.TestHost.csproj", "{0B490CDE-C350-41A0-9DEA-CDA5FB72205D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.TestHost", "src\Hosting\TestHost\src\Microsoft.AspNetCore.TestHost.csproj", "{0B490CDE-C350-41A0-9DEA-CDA5FB72205D}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Authentication", "Authentication", "{822D1519-77F0-484A-B9AB-F694C2CC25F1}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OpenIdConnect", "OpenIdConnect", "{99F9BBC5-46AE-40DC-A675-5E56ACA3C5C8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Authentication.OpenIdConnect", "src\Security\Authentication\OpenIdConnect\src\Microsoft.AspNetCore.Authentication.OpenIdConnect.csproj", "{AB39F04A-A96E-4BE1-99F2-54B804104BA1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.OpenIdConnect", "src\Security\Authentication\OpenIdConnect\src\Microsoft.AspNetCore.Authentication.OpenIdConnect.csproj", "{AB39F04A-A96E-4BE1-99F2-54B804104BA1}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OAuth", "OAuth", "{9121A7EA-5751-4811-9FE3-E183BB8709FB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Authentication.OAuth", "src\Security\Authentication\OAuth\src\Microsoft.AspNetCore.Authentication.OAuth.csproj", "{EE23169F-C3A7-4A03-8FB7-C1F1B76301A9}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.OAuth", "src\Security\Authentication\OAuth\src\Microsoft.AspNetCore.Authentication.OAuth.csproj", "{EE23169F-C3A7-4A03-8FB7-C1F1B76301A9}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{03CD847C-2230-4092-BF1C-DE54634805AD}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Authentication", "src\Security\Authentication\Core\src\Microsoft.AspNetCore.Authentication.csproj", "{D47B73A3-740E-4B9A-B123-A42299F1F266}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication", "src\Security\Authentication\Core\src\Microsoft.AspNetCore.Authentication.csproj", "{D47B73A3-740E-4B9A-B123-A42299F1F266}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Cookies", "Cookies", "{14A4E3F5-04BB-4062-84AE-1A887C307B17}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Authentication.Cookies", "src\Security\Authentication\Cookies\src\Microsoft.AspNetCore.Authentication.Cookies.csproj", "{6906D7DE-CE06-4A6A-81BB-D783C605A184}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Cookies", "src\Security\Authentication\Cookies\src\Microsoft.AspNetCore.Authentication.Cookies.csproj", "{6906D7DE-CE06-4A6A-81BB-D783C605A184}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "JwtBearer", "JwtBearer", "{2AB4FE8F-94FF-4C6E-B12F-9E40A9FAF9AB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Authentication.JwtBearer", "src\Security\Authentication\JwtBearer\src\Microsoft.AspNetCore.Authentication.JwtBearer.csproj", "{F90D4383-89FC-4215-B2AB-BBB242CC5E45}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.JwtBearer", "src\Security\Authentication\JwtBearer\src\Microsoft.AspNetCore.Authentication.JwtBearer.csproj", "{F90D4383-89FC-4215-B2AB-BBB242CC5E45}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Analyzers", "Analyzers", "{A274799D-3D1F-4AE5-A154-4BF6C80A8D94}" EndProject @@ -513,127 +513,127 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.JSInterop", "Micr EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.JSInterop", "src\JSInterop\Microsoft.JSInterop\src\Microsoft.JSInterop.csproj", "{70B719CD-C70E-4417-B1EE-FD24B5AFB0B7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.DataProtection.Abstractions.Tests", "src\DataProtection\Abstractions\test\Microsoft.AspNetCore.DataProtection.Abstractions.Tests.csproj", "{552EB148-0518-41A6-905D-4696A6438E80}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DataProtection.Abstractions.Tests", "src\DataProtection\Abstractions\test\Microsoft.AspNetCore.DataProtection.Abstractions.Tests.csproj", "{552EB148-0518-41A6-905D-4696A6438E80}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Cryptography.Internal.Tests", "src\DataProtection\Cryptography.Internal\test\Microsoft.AspNetCore.Cryptography.Internal.Tests.csproj", "{789E23FE-E8F4-4935-AF43-4A84D25AD130}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Cryptography.Internal.Tests", "src\DataProtection\Cryptography.Internal\test\Microsoft.AspNetCore.Cryptography.Internal.Tests.csproj", "{789E23FE-E8F4-4935-AF43-4A84D25AD130}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Cryptography.KeyDerivation", "Cryptography.KeyDerivation", "{9546F4D5-9625-480F-B5BB-5D6FF9369885}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Cryptography.KeyDerivation", "src\DataProtection\Cryptography.KeyDerivation\src\Microsoft.AspNetCore.Cryptography.KeyDerivation.csproj", "{DA626A01-8198-4E1A-A1EE-0EA4AB0B02C1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Cryptography.KeyDerivation", "src\DataProtection\Cryptography.KeyDerivation\src\Microsoft.AspNetCore.Cryptography.KeyDerivation.csproj", "{DA626A01-8198-4E1A-A1EE-0EA4AB0B02C1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Cryptography.KeyDerivation.Tests", "src\DataProtection\Cryptography.KeyDerivation\test\Microsoft.AspNetCore.Cryptography.KeyDerivation.Tests.csproj", "{F421D0C4-6EF7-48B7-9213-AFD21322E08B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Cryptography.KeyDerivation.Tests", "src\DataProtection\Cryptography.KeyDerivation\test\Microsoft.AspNetCore.Cryptography.KeyDerivation.Tests.csproj", "{F421D0C4-6EF7-48B7-9213-AFD21322E08B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.DataProtection.Tests", "src\DataProtection\DataProtection\test\Microsoft.AspNetCore.DataProtection.Tests.csproj", "{696BE515-B3AB-4925-969C-350F1BDA5C30}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DataProtection.Tests", "src\DataProtection\DataProtection\test\Microsoft.AspNetCore.DataProtection.Tests.csproj", "{696BE515-B3AB-4925-969C-350F1BDA5C30}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.DataProtection.Extensions.Tests", "src\DataProtection\Extensions\test\Microsoft.AspNetCore.DataProtection.Extensions.Tests.csproj", "{3CB3CA43-6D65-4DDE-B5E3-A9E0DF957E38}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DataProtection.Extensions.Tests", "src\DataProtection\Extensions\test\Microsoft.AspNetCore.DataProtection.Extensions.Tests.csproj", "{3CB3CA43-6D65-4DDE-B5E3-A9E0DF957E38}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StackExchangeRedis", "StackExchangeRedis", "{FE22EB98-C12E-4FAE-A7C2-DF65890F3084}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.DataProtection.StackExchangeRedis", "src\DataProtection\StackExchangeRedis\src\Microsoft.AspNetCore.DataProtection.StackExchangeRedis.csproj", "{87181A18-6A53-43E6-A6B1-1F867C9D3E45}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DataProtection.StackExchangeRedis", "src\DataProtection\StackExchangeRedis\src\Microsoft.AspNetCore.DataProtection.StackExchangeRedis.csproj", "{87181A18-6A53-43E6-A6B1-1F867C9D3E45}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.DataProtection.StackExchangeRedis.Tests", "src\DataProtection\StackExchangeRedis\test\Microsoft.AspNetCore.DataProtection.StackExchangeRedis.Tests.csproj", "{3B85171E-9A55-4605-B9B1-56F77E47137B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DataProtection.StackExchangeRedis.Tests", "src\DataProtection\StackExchangeRedis\test\Microsoft.AspNetCore.DataProtection.StackExchangeRedis.Tests.csproj", "{3B85171E-9A55-4605-B9B1-56F77E47137B}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{8275510E-0E6C-45A8-99DF-4F106BC7F075}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CustomEncryptorSample", "src\DataProtection\samples\CustomEncryptorSample\CustomEncryptorSample.csproj", "{DF5EDCB1-139C-4804-9D00-C5E7DCEC104F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CustomEncryptorSample", "src\DataProtection\samples\CustomEncryptorSample\CustomEncryptorSample.csproj", "{DF5EDCB1-139C-4804-9D00-C5E7DCEC104F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KeyManagementSample", "src\DataProtection\samples\KeyManagementSample\KeyManagementSample.csproj", "{58C5FE49-3060-4D9E-B76C-352790FCD1D8}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KeyManagementSample", "src\DataProtection\samples\KeyManagementSample\KeyManagementSample.csproj", "{58C5FE49-3060-4D9E-B76C-352790FCD1D8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NonDISample", "src\DataProtection\samples\NonDISample\NonDISample.csproj", "{4F39F27E-0E21-4093-8818-D974D4716C14}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NonDISample", "src\DataProtection\samples\NonDISample\NonDISample.csproj", "{4F39F27E-0E21-4093-8818-D974D4716C14}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Redis", "src\DataProtection\samples\Redis\Redis.csproj", "{BC0CC534-0285-4471-B99E-584BEFEC94DB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Redis", "src\DataProtection\samples\Redis\Redis.csproj", "{BC0CC534-0285-4471-B99E-584BEFEC94DB}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "EntityFrameworkCore", "EntityFrameworkCore", "{97F5B320-B18E-4275-B0E9-BB5FABDA952F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.DataProtection.EntityFrameworkCore", "src\DataProtection\EntityFrameworkCore\src\Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.csproj", "{E9216C2B-A12B-48C3-8F5D-C67C5D75EF02}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DataProtection.EntityFrameworkCore", "src\DataProtection\EntityFrameworkCore\src\Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.csproj", "{E9216C2B-A12B-48C3-8F5D-C67C5D75EF02}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.Test", "src\DataProtection\EntityFrameworkCore\test\Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.Test.csproj", "{28B6FDEF-3DC0-42E0-8913-C7D33CE93368}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.Test", "src\DataProtection\EntityFrameworkCore\test\Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.Test.csproj", "{28B6FDEF-3DC0-42E0-8913-C7D33CE93368}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EntityFrameworkCoreSample", "src\DataProtection\samples\EntityFrameworkCoreSample\EntityFrameworkCoreSample.csproj", "{22F70908-5E62-4185-B76B-F0C5B952F8AE}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EntityFrameworkCoreSample", "src\DataProtection\samples\EntityFrameworkCoreSample\EntityFrameworkCoreSample.csproj", "{22F70908-5E62-4185-B76B-F0C5B952F8AE}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{2F08930D-5646-4D74-AAA2-9E51C93D1192}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DefaultBuilder.SampleApp", "src\DefaultBuilder\samples\SampleApp\DefaultBuilder.SampleApp.csproj", "{0CD27C71-4A3C-4AA0-8258-F7430F875984}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DefaultBuilder.SampleApp", "src\DefaultBuilder\samples\SampleApp\DefaultBuilder.SampleApp.csproj", "{0CD27C71-4A3C-4AA0-8258-F7430F875984}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{BCD032DD-D088-4F72-B80F-48D0EA845F87}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Tests", "src\DefaultBuilder\test\Microsoft.AspNetCore.Tests\Microsoft.AspNetCore.Tests.csproj", "{58955E85-0D55-45FF-97EE-BDD096522954}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Tests", "src\DefaultBuilder\test\Microsoft.AspNetCore.Tests\Microsoft.AspNetCore.Tests.csproj", "{58955E85-0D55-45FF-97EE-BDD096522954}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.FunctionalTests", "src\DefaultBuilder\test\Microsoft.AspNetCore.FunctionalTests\Microsoft.AspNetCore.FunctionalTests.csproj", "{D708256C-4A68-4B15-AAE5-6EFA41223A70}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.FunctionalTests", "src\DefaultBuilder\test\Microsoft.AspNetCore.FunctionalTests\Microsoft.AspNetCore.FunctionalTests.csproj", "{D708256C-4A68-4B15-AAE5-6EFA41223A70}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Grpc", "Grpc", "{8DAC59BE-CB96-4F04-909C-56C22E7665EB}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{E763DA15-8F4E-446C-99B8-309053C75598}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InteropTests", "src\Grpc\test\InteropTests\InteropTests.csproj", "{3ADC50B9-2EBB-422A-8424-F9FC67841CA1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InteropTests", "src\Grpc\test\InteropTests\InteropTests.csproj", "{3ADC50B9-2EBB-422A-8424-F9FC67841CA1}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Testing", "Testing", "{05A169C7-4F20-4516-B10A-B13C5649D346}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Testing", "src\Testing\src\Microsoft.AspNetCore.Testing.csproj", "{3D06E2C9-44F7-408D-802C-42D7E55F08E7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Testing", "src\Testing\src\Microsoft.AspNetCore.Testing.csproj", "{3D06E2C9-44F7-408D-802C-42D7E55F08E7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Hosting.Tests", "src\Hosting\Hosting\test\Microsoft.AspNetCore.Hosting.Tests.csproj", "{ECAA6AB0-CFF3-4D1B-AA25-2A0F72730987}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Hosting.Tests", "src\Hosting\Hosting\test\Microsoft.AspNetCore.Hosting.Tests.csproj", "{ECAA6AB0-CFF3-4D1B-AA25-2A0F72730987}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{C8415333-2A64-4FF0-8FC9-652694A11A77}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GenericWebHost", "src\Hosting\samples\GenericWebHost\GenericWebHost.csproj", "{9EF96554-7BDB-4679-B08E-7D98FAE6A2AA}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GenericWebHost", "src\Hosting\samples\GenericWebHost\GenericWebHost.csproj", "{9EF96554-7BDB-4679-B08E-7D98FAE6A2AA}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SampleStartups", "src\Hosting\samples\SampleStartups\SampleStartups.csproj", "{7391E144-5087-4E64-94D8-E0700D57739C}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SampleStartups", "src\Hosting\samples\SampleStartups\SampleStartups.csproj", "{7391E144-5087-4E64-94D8-E0700D57739C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.TestHost.Tests", "src\Hosting\TestHost\test\Microsoft.AspNetCore.TestHost.Tests.csproj", "{ED6E6F06-D620-41BC-8F12-01480BF49381}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.TestHost.Tests", "src\Hosting\TestHost\test\Microsoft.AspNetCore.TestHost.Tests.csproj", "{ED6E6F06-D620-41BC-8F12-01480BF49381}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WindowsServices", "WindowsServices", "{3DC5D8DB-5DA3-4793-B090-9CB89A158B51}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Hosting.WindowsServices", "src\Hosting\WindowsServices\src\Microsoft.AspNetCore.Hosting.WindowsServices.csproj", "{F80F007A-AEE5-478A-8A5E-2A4EEDA9FD42}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Hosting.WindowsServices", "src\Hosting\WindowsServices\src\Microsoft.AspNetCore.Hosting.WindowsServices.csproj", "{F80F007A-AEE5-478A-8A5E-2A4EEDA9FD42}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Hosting.WindowsServices.Tests", "src\Hosting\WindowsServices\test\Microsoft.AspNetCore.Hosting.WindowsServices.Tests.csproj", "{31B7F6ED-C7B6-4FDB-ADA9-4E5B6B8FCAB6}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Hosting.WindowsServices.Tests", "src\Hosting\WindowsServices\test\Microsoft.AspNetCore.Hosting.WindowsServices.Tests.csproj", "{31B7F6ED-C7B6-4FDB-ADA9-4E5B6B8FCAB6}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{C1409A8F-555A-4A88-B803-C6D3E8B6C3B0}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Hosting.FunctionalTests", "src\Hosting\test\FunctionalTests\Microsoft.AspNetCore.Hosting.FunctionalTests.csproj", "{72AA2B1F-1FE7-48B5-968D-89E492F2139D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Hosting.FunctionalTests", "src\Hosting\test\FunctionalTests\Microsoft.AspNetCore.Hosting.FunctionalTests.csproj", "{72AA2B1F-1FE7-48B5-968D-89E492F2139D}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Owin", "Owin", "{AA465A56-D9D0-4684-95B0-192F4436C582}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Owin", "src\Http\Owin\src\Microsoft.AspNetCore.Owin.csproj", "{670B30E8-4E6F-453F-A5B7-B6DB3D83FE42}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Owin", "src\Http\Owin\src\Microsoft.AspNetCore.Owin.csproj", "{670B30E8-4E6F-453F-A5B7-B6DB3D83FE42}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Authentication.Core.Test", "src\Http\Authentication.Core\test\Microsoft.AspNetCore.Authentication.Core.Test.csproj", "{F0540D2E-1A56-4AFE-9DC4-EA7E5CB8E10B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Core.Test", "src\Http\Authentication.Core\test\Microsoft.AspNetCore.Authentication.Core.Test.csproj", "{F0540D2E-1A56-4AFE-9DC4-EA7E5CB8E10B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Net.Http.Headers.Tests", "src\Http\Headers\test\Microsoft.Net.Http.Headers.Tests.csproj", "{8CB43443-E02C-4D04-9E96-A4916E5C83C2}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Net.Http.Headers.Tests", "src\Http\Headers\test\Microsoft.Net.Http.Headers.Tests.csproj", "{8CB43443-E02C-4D04-9E96-A4916E5C83C2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Http.Tests", "src\Http\Http\test\Microsoft.AspNetCore.Http.Tests.csproj", "{3957A90B-1DB9-4AA0-A8B8-E7B0B42B0101}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Tests", "src\Http\Http\test\Microsoft.AspNetCore.Http.Tests.csproj", "{3957A90B-1DB9-4AA0-A8B8-E7B0B42B0101}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Http.Abstractions.Tests", "src\Http\Http.Abstractions\test\Microsoft.AspNetCore.Http.Abstractions.Tests.csproj", "{529AB96D-853D-41B4-ABE6-D0DED4A50DFD}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Abstractions.Tests", "src\Http\Http.Abstractions\test\Microsoft.AspNetCore.Http.Abstractions.Tests.csproj", "{529AB96D-853D-41B4-ABE6-D0DED4A50DFD}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Http.Extensions.Tests", "src\Http\Http.Extensions\test\Microsoft.AspNetCore.Http.Extensions.Tests.csproj", "{402C3AC9-1B1D-4523-AB80-A992CEA85F57}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Extensions.Tests", "src\Http\Http.Extensions\test\Microsoft.AspNetCore.Http.Extensions.Tests.csproj", "{402C3AC9-1B1D-4523-AB80-A992CEA85F57}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Http.Features.Tests", "src\Http\Http.Features\test\Microsoft.AspNetCore.Http.Features.Tests.csproj", "{C86D97EF-301F-464B-A6B8-DA75BB0DBECE}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Features.Tests", "src\Http\Http.Features\test\Microsoft.AspNetCore.Http.Features.Tests.csproj", "{C86D97EF-301F-464B-A6B8-DA75BB0DBECE}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Owin.Tests", "src\Http\Owin\test\Microsoft.AspNetCore.Owin.Tests.csproj", "{66ADF274-B5C4-4D0A-91D9-F7FB76ADBF85}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Owin.Tests", "src\Http\Owin\test\Microsoft.AspNetCore.Owin.Tests.csproj", "{66ADF274-B5C4-4D0A-91D9-F7FB76ADBF85}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{EB5E294B-9ED5-43BF-AFA9-1CD2327F3DC1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HttpAbstractions.SampleApp", "src\Http\samples\SampleApp\HttpAbstractions.SampleApp.csproj", "{4DDE5F1F-B014-4096-9F8B-E5F2C96DF997}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HttpAbstractions.SampleApp", "src\Http\samples\SampleApp\HttpAbstractions.SampleApp.csproj", "{4DDE5F1F-B014-4096-9F8B-E5F2C96DF997}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.WebUtilities.Tests", "src\Http\WebUtilities\test\Microsoft.AspNetCore.WebUtilities.Tests.csproj", "{F6BE35A7-1D5C-416B-8B32-61CAA2A95FF0}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.WebUtilities.Tests", "src\Http\WebUtilities\test\Microsoft.AspNetCore.WebUtilities.Tests.csproj", "{F6BE35A7-1D5C-416B-8B32-61CAA2A95FF0}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Http.Performance", "src\Http\Http\perf\Microsoft.AspNetCore.Http.Performance.csproj", "{C713DCA1-B36D-44BD-ACFA-F562782AD40E}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Performance", "src\Http\Http\perf\Microsoft.AspNetCore.Http.Performance.csproj", "{C713DCA1-B36D-44BD-ACFA-F562782AD40E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Routing.Performance", "src\Http\Routing\perf\Microsoft.AspNetCore.Routing.Performance.csproj", "{A2701184-BD48-4B72-AA6E-8DD1DE2F217F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Routing.Performance", "src\Http\Routing\perf\Microsoft.AspNetCore.Routing.Performance.csproj", "{A2701184-BD48-4B72-AA6E-8DD1DE2F217F}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{17DD5861-0635-46D0-84BA-6B163150AA4F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Routing.FunctionalTests", "src\Http\Routing\test\FunctionalTests\Microsoft.AspNetCore.Routing.FunctionalTests.csproj", "{2DF639CC-DFF2-44D2-9585-D1E925B5A117}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Routing.FunctionalTests", "src\Http\Routing\test\FunctionalTests\Microsoft.AspNetCore.Routing.FunctionalTests.csproj", "{2DF639CC-DFF2-44D2-9585-D1E925B5A117}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Routing.Tests", "src\Http\Routing\test\UnitTests\Microsoft.AspNetCore.Routing.Tests.csproj", "{C71CF302-0FFA-4610-9197-033B277F3065}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Routing.Tests", "src\Http\Routing\test\UnitTests\Microsoft.AspNetCore.Routing.Tests.csproj", "{C71CF302-0FFA-4610-9197-033B277F3065}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.Routing.Abstractions.Tests", "src\Http\Routing.Abstractions\test\Microsoft.AspNetCore.Mvc.Routing.Abstractions.Tests.csproj", "{09D2D765-A792-415E-B19A-18948A1C8969}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Routing.Abstractions.Tests", "src\Http\Routing.Abstractions\test\Microsoft.AspNetCore.Mvc.Routing.Abstractions.Tests.csproj", "{09D2D765-A792-415E-B19A-18948A1C8969}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "perf", "perf", "{E7CADFE4-CDD0-4DE3-90ED-7184A969F47B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.WebUtilities.Performance", "src\Http\WebUtilities\perf\Microsoft.AspNetCore.WebUtilities.Performance\Microsoft.AspNetCore.WebUtilities.Performance.csproj", "{822FF16C-A4E0-40A0-AE65-530752575261}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.WebUtilities.Performance", "src\Http\WebUtilities\perf\Microsoft.AspNetCore.WebUtilities.Performance\Microsoft.AspNetCore.WebUtilities.Performance.csproj", "{822FF16C-A4E0-40A0-AE65-530752575261}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Metadata", "Metadata", "{71DE18B5-87F9-4D03-89BB-C3E243576F92}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Metadata", "src\Http\Metadata\src\Microsoft.AspNetCore.Metadata.csproj", "{3A554C0B-2956-4152-BF31-2C8CAE5D2717}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Metadata", "src\Http\Metadata\src\Microsoft.AspNetCore.Metadata.csproj", "{3A554C0B-2956-4152-BF31-2C8CAE5D2717}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Identity", "Identity", "{9F21A235-436E-4020-A076-1DF4F89D0CA0}" EndProject @@ -641,779 +641,779 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ApiAuthorization.IdentitySe EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{10F429CC-6470-40AF-81FA-6F17895E4058}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ApiAuthSample", "src\Identity\ApiAuthorization.IdentityServer\samples\ApiAuthSample\ApiAuthSample.csproj", "{1A99E178-8480-47C0-B7F0-A1240297F2FB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ApiAuthSample", "src\Identity\ApiAuthorization.IdentityServer\samples\ApiAuthSample\ApiAuthSample.csproj", "{1A99E178-8480-47C0-B7F0-A1240297F2FB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.ApiAuthorization.IdentityServer", "src\Identity\ApiAuthorization.IdentityServer\src\Microsoft.AspNetCore.ApiAuthorization.IdentityServer.csproj", "{7AC2504B-A351-40D1-92BC-CABEFFBB14DC}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ApiAuthorization.IdentityServer", "src\Identity\ApiAuthorization.IdentityServer\src\Microsoft.AspNetCore.ApiAuthorization.IdentityServer.csproj", "{7AC2504B-A351-40D1-92BC-CABEFFBB14DC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.ApiAuthorization.IdentityServer.Tests", "src\Identity\ApiAuthorization.IdentityServer\test\Microsoft.AspNetCore.ApiAuthorization.IdentityServer.Tests.csproj", "{BDB91F2F-2CD5-4675-BC7F-C94F117784DF}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ApiAuthorization.IdentityServer.Tests", "src\Identity\ApiAuthorization.IdentityServer\test\Microsoft.AspNetCore.ApiAuthorization.IdentityServer.Tests.csproj", "{BDB91F2F-2CD5-4675-BC7F-C94F117784DF}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{9E0B9A09-167E-4DF7-8AA4-F9323A306F90}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Identity", "src\Identity\Core\src\Microsoft.AspNetCore.Identity.csproj", "{F1B75625-567A-4AF3-BB68-75A4CF93F2B8}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Identity", "src\Identity\Core\src\Microsoft.AspNetCore.Identity.csproj", "{F1B75625-567A-4AF3-BB68-75A4CF93F2B8}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "EntityFrameworkCore", "EntityFrameworkCore", "{0F5F1299-7303-49B8-BEBF-9FF3B522CE0F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Identity.EntityFrameworkCore", "src\Identity\EntityFrameworkCore\src\Microsoft.AspNetCore.Identity.EntityFrameworkCore.csproj", "{473C0171-0AD1-473B-B1A0-93636FD77BA6}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Identity.EntityFrameworkCore", "src\Identity\EntityFrameworkCore\src\Microsoft.AspNetCore.Identity.EntityFrameworkCore.csproj", "{473C0171-0AD1-473B-B1A0-93636FD77BA6}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{F910B1B0-3641-4F3B-8336-5230FAB8FAD5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Identity.EntityFrameworkCore.InMemory.Test", "src\Identity\EntityFrameworkCore\test\EF.InMemory.Test\Microsoft.AspNetCore.Identity.EntityFrameworkCore.InMemory.Test.csproj", "{D15A9C48-00F1-423B-B14D-6EACE976E2F0}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Identity.EntityFrameworkCore.InMemory.Test", "src\Identity\EntityFrameworkCore\test\EF.InMemory.Test\Microsoft.AspNetCore.Identity.EntityFrameworkCore.InMemory.Test.csproj", "{D15A9C48-00F1-423B-B14D-6EACE976E2F0}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test", "src\Identity\EntityFrameworkCore\test\EF.Test\Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test.csproj", "{39B8B1ED-790E-4FF5-8D68-B1153655F87B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test", "src\Identity\EntityFrameworkCore\test\EF.Test\Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test.csproj", "{39B8B1ED-790E-4FF5-8D68-B1153655F87B}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions.Core", "Extensions.Core", "{7A3BDEED-70A7-4F2A-82D8-6A8752CE2859}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Extensions.Identity.Core", "src\Identity\Extensions.Core\src\Microsoft.Extensions.Identity.Core.csproj", "{886DDAF8-052A-4AC5-87FD-96EBCBAC2B7C}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Identity.Core", "src\Identity\Extensions.Core\src\Microsoft.Extensions.Identity.Core.csproj", "{886DDAF8-052A-4AC5-87FD-96EBCBAC2B7C}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions.Stores", "Extensions.Stores", "{83E043A0-50FF-48AB-AA1D-EE88B64A1E4F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Extensions.Identity.Stores", "src\Identity\Extensions.Stores\src\Microsoft.Extensions.Identity.Stores.csproj", "{30BB8038-D162-4171-9404-4041FC7A5BA7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Identity.Stores", "src\Identity\Extensions.Stores\src\Microsoft.Extensions.Identity.Stores.csproj", "{30BB8038-D162-4171-9404-4041FC7A5BA7}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{64B2A28F-6D82-4F2B-B0BB-88DE5216DD2C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IdentitySample.DefaultUI", "src\Identity\samples\IdentitySample.DefaultUI\IdentitySample.DefaultUI.csproj", "{5750A285-B528-4A6C-953F-7838824E5F81}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IdentitySample.DefaultUI", "src\Identity\samples\IdentitySample.DefaultUI\IdentitySample.DefaultUI.csproj", "{5750A285-B528-4A6C-953F-7838824E5F81}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IdentitySample.Mvc", "src\Identity\samples\IdentitySample.Mvc\IdentitySample.Mvc.csproj", "{C4C7C4FC-F83C-4DFA-803A-6E88001DF0F2}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IdentitySample.Mvc", "src\Identity\samples\IdentitySample.Mvc\IdentitySample.Mvc.csproj", "{C4C7C4FC-F83C-4DFA-803A-6E88001DF0F2}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Specification.Tests", "Specification.Tests", "{85179BD4-F1B1-4FDB-ABA9-3FDB0F5FF1B3}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Identity.Specification.Tests", "src\Identity\Specification.Tests\src\Microsoft.AspNetCore.Identity.Specification.Tests.csproj", "{5D91E19A-E6EB-4ED7-BAC8-B41DEB9F4704}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Identity.Specification.Tests", "src\Identity\Specification.Tests\src\Microsoft.AspNetCore.Identity.Specification.Tests.csproj", "{5D91E19A-E6EB-4ED7-BAC8-B41DEB9F4704}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{BCF3D807-5368-4201-8313-34493E60020B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Identity.FunctionalTests", "src\Identity\test\Identity.FunctionalTests\Microsoft.AspNetCore.Identity.FunctionalTests.csproj", "{5EBE548A-E450-466B-B448-D6662E659E58}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Identity.FunctionalTests", "src\Identity\test\Identity.FunctionalTests\Microsoft.AspNetCore.Identity.FunctionalTests.csproj", "{5EBE548A-E450-466B-B448-D6662E659E58}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Identity.Test", "src\Identity\test\Identity.Test\Microsoft.AspNetCore.Identity.Test.csproj", "{58C3FE63-C364-4AF8-B575-2F65A7565B1F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Identity.Test", "src\Identity\test\Identity.Test\Microsoft.AspNetCore.Identity.Test.csproj", "{58C3FE63-C364-4AF8-B575-2F65A7565B1F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Identity.InMemory.Test", "src\Identity\test\InMemory.Test\Microsoft.AspNetCore.Identity.InMemory.Test.csproj", "{8B6F219F-CE89-4704-8586-F9953F5FF4AB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Identity.InMemory.Test", "src\Identity\test\InMemory.Test\Microsoft.AspNetCore.Identity.InMemory.Test.csproj", "{8B6F219F-CE89-4704-8586-F9953F5FF4AB}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UI", "UI", "{2AFCDBA1-0697-4134-BF22-17C145EB2710}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Identity.UI", "src\Identity\UI\src\Microsoft.AspNetCore.Identity.UI.csproj", "{8A2FFCF4-548A-4527-AB0A-CE2F3402FB0D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Identity.UI", "src\Identity\UI\src\Microsoft.AspNetCore.Identity.UI.csproj", "{8A2FFCF4-548A-4527-AB0A-CE2F3402FB0D}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CookiePolicy", "CookiePolicy", "{62F3EF13-4A89-4912-A22C-31981278B074}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.CookiePolicy", "src\Security\CookiePolicy\src\Microsoft.AspNetCore.CookiePolicy.csproj", "{CE8BC4CA-0068-439A-A012-6B1E764CD5D7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.CookiePolicy", "src\Security\CookiePolicy\src\Microsoft.AspNetCore.CookiePolicy.csproj", "{CE8BC4CA-0068-439A-A012-6B1E764CD5D7}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Diagnostics.EntityFrameworkCore", "Diagnostics.EntityFrameworkCore", "{3D551023-1D98-479D-A41E-EBD0C05A06FF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore", "src\Middleware\Diagnostics.EntityFrameworkCore\src\Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.csproj", "{861CA437-6402-4E45-9E1F-35A509E61568}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore", "src\Middleware\Diagnostics.EntityFrameworkCore\src\Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.csproj", "{861CA437-6402-4E45-9E1F-35A509E61568}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Rewrite", "Rewrite", "{049030CA-4D78-4B24-A112-28C61AB2509C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Rewrite", "src\Middleware\Rewrite\src\Microsoft.AspNetCore.Rewrite.csproj", "{5EE9EEE3-C472-4A6D-8DB8-C82998584E2C}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Rewrite", "src\Middleware\Rewrite\src\Microsoft.AspNetCore.Rewrite.csproj", "{5EE9EEE3-C472-4A6D-8DB8-C82998584E2C}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Facebook", "Facebook", "{B714B9AB-0A8F-4FB0-902E-6B73CA60DAB8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Authentication.Facebook", "src\Security\Authentication\Facebook\src\Microsoft.AspNetCore.Authentication.Facebook.csproj", "{805264B9-36C9-49D6-BA34-63D0050C9D6E}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Facebook", "src\Security\Authentication\Facebook\src\Microsoft.AspNetCore.Authentication.Facebook.csproj", "{805264B9-36C9-49D6-BA34-63D0050C9D6E}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Google", "Google", "{2654DB24-E7E6-45B0-B350-3226D2D0FDC7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Authentication.Google", "src\Security\Authentication\Google\src\Microsoft.AspNetCore.Authentication.Google.csproj", "{C2645178-0B55-47D4-B9CA-A6FFA14E616E}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Google", "src\Security\Authentication\Google\src\Microsoft.AspNetCore.Authentication.Google.csproj", "{C2645178-0B55-47D4-B9CA-A6FFA14E616E}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Twitter", "Twitter", "{D38C4227-7692-4C66-B8C2-8A411B46DCE3}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Authentication.Twitter", "src\Security\Authentication\Twitter\src\Microsoft.AspNetCore.Authentication.Twitter.csproj", "{8192DC13-6878-43C1-B657-96420C3BA9F8}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Twitter", "src\Security\Authentication\Twitter\src\Microsoft.AspNetCore.Authentication.Twitter.csproj", "{8192DC13-6878-43C1-B657-96420C3BA9F8}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{A127217D-26AF-43C4-96A0-7080EB6F1D65}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EchoApp", "src\Middleware\WebSockets\samples\EchoApp\EchoApp.csproj", "{19BE6DF6-24F5-4F58-86C8-A9D8368427A7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EchoApp", "src\Middleware\WebSockets\samples\EchoApp\EchoApp.csproj", "{19BE6DF6-24F5-4F58-86C8-A9D8368427A7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebSockets.TestServer", "src\Middleware\WebSockets\samples\TestServer\WebSockets.TestServer.csproj", "{68E93233-6FF3-41FE-8161-3B7F457473C8}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebSockets.TestServer", "src\Middleware\WebSockets\samples\TestServer\WebSockets.TestServer.csproj", "{68E93233-6FF3-41FE-8161-3B7F457473C8}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{8AAFAD2A-B273-4DB5-8DC9-3CA832248A82}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.WebSockets.ConformanceTests", "src\Middleware\WebSockets\test\ConformanceTests\Microsoft.AspNetCore.WebSockets.ConformanceTests.csproj", "{897EECDD-628F-4233-B1BF-A13F687057BC}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.WebSockets.ConformanceTests", "src\Middleware\WebSockets\test\ConformanceTests\Microsoft.AspNetCore.WebSockets.ConformanceTests.csproj", "{897EECDD-628F-4233-B1BF-A13F687057BC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.WebSockets.Tests", "src\Middleware\WebSockets\test\UnitTests\Microsoft.AspNetCore.WebSockets.Tests.csproj", "{E7F7B6E9-3374-4C37-8FDA-CB3682442D51}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.WebSockets.Tests", "src\Middleware\WebSockets\test\UnitTests\Microsoft.AspNetCore.WebSockets.Tests.csproj", "{E7F7B6E9-3374-4C37-8FDA-CB3682442D51}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{41B519F7-CF19-4FB4-B96C-E38A7EF45F70}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Diagnostics.FunctionalTests", "src\Middleware\Diagnostics\test\FunctionalTests\Diagnostics.FunctionalTests.csproj", "{122907A1-AD5F-40B3-9D61-05A3F8CF859D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Diagnostics.FunctionalTests", "src\Middleware\Diagnostics\test\FunctionalTests\Diagnostics.FunctionalTests.csproj", "{122907A1-AD5F-40B3-9D61-05A3F8CF859D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Diagnostics.Tests", "src\Middleware\Diagnostics\test\UnitTests\Microsoft.AspNetCore.Diagnostics.Tests.csproj", "{5A3DF44F-53B3-4EC0-A0EF-EFE78190C48D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Diagnostics.Tests", "src\Middleware\Diagnostics\test\UnitTests\Microsoft.AspNetCore.Diagnostics.Tests.csproj", "{5A3DF44F-53B3-4EC0-A0EF-EFE78190C48D}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{364376C6-E886-482E-B79C-366E5DAB8A5B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Diagnostics.EFCore.FunctionalTests", "src\Middleware\Diagnostics.EntityFrameworkCore\test\FunctionalTests\Diagnostics.EFCore.FunctionalTests.csproj", "{BDC1141A-DA5D-48D4-B0A7-61612D4F8024}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Diagnostics.EFCore.FunctionalTests", "src\Middleware\Diagnostics.EntityFrameworkCore\test\FunctionalTests\Diagnostics.EFCore.FunctionalTests.csproj", "{BDC1141A-DA5D-48D4-B0A7-61612D4F8024}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests", "src\Middleware\Diagnostics.EntityFrameworkCore\test\UnitTests\Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests.csproj", "{4D08EC2C-A488-414E-8739-341E197773DB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests", "src\Middleware\Diagnostics.EntityFrameworkCore\test\UnitTests\Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests.csproj", "{4D08EC2C-A488-414E-8739-341E197773DB}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MiddlewareAnalysis", "MiddlewareAnalysis", "{07AAFECB-4C42-4533-80D5-0452989FA0F7}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{81143573-811E-4F61-9331-6B7173DBA67C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MiddlewareAnalysisSample", "src\Middleware\MiddlewareAnalysis\samples\MiddlewareAnalysisSample\MiddlewareAnalysisSample.csproj", "{F4160B93-03F2-4C0F-BEBA-C89F02CACD17}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MiddlewareAnalysisSample", "src\Middleware\MiddlewareAnalysis\samples\MiddlewareAnalysisSample\MiddlewareAnalysisSample.csproj", "{F4160B93-03F2-4C0F-BEBA-C89F02CACD17}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.MiddlewareAnalysis", "src\Middleware\MiddlewareAnalysis\src\Microsoft.AspNetCore.MiddlewareAnalysis.csproj", "{35AA4E31-D157-4AD2-B04F-EE3956795420}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.MiddlewareAnalysis", "src\Middleware\MiddlewareAnalysis\src\Microsoft.AspNetCore.MiddlewareAnalysis.csproj", "{35AA4E31-D157-4AD2-B04F-EE3956795420}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.MiddlewareAnalysis.Tests", "src\Middleware\MiddlewareAnalysis\test\Microsoft.AspNetCore.MiddlewareAnalysis.Tests.csproj", "{21F89E50-DF06-435E-872B-7639BCE695DF}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.MiddlewareAnalysis.Tests", "src\Middleware\MiddlewareAnalysis\test\Microsoft.AspNetCore.MiddlewareAnalysis.Tests.csproj", "{21F89E50-DF06-435E-872B-7639BCE695DF}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HealthChecks", "HealthChecks", "{DF86A07D-A370-4CBD-97DD-DCB09466545F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Diagnostics.HealthChecks", "src\Middleware\HealthChecks\src\Microsoft.AspNetCore.Diagnostics.HealthChecks.csproj", "{8C828211-F2EC-4BFD-B922-98F73D9DAB5E}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Diagnostics.HealthChecks", "src\Middleware\HealthChecks\src\Microsoft.AspNetCore.Diagnostics.HealthChecks.csproj", "{8C828211-F2EC-4BFD-B922-98F73D9DAB5E}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{8EFA9CC7-D03D-4535-898C-F3B80BB19F21}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Diagnostics.HealthChecks.Tests", "src\Middleware\HealthChecks\test\UnitTests\Microsoft.AspNetCore.Diagnostics.HealthChecks.Tests.csproj", "{2E690E42-B20F-4702-9478-1707EEC7C02F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Diagnostics.HealthChecks.Tests", "src\Middleware\HealthChecks\test\UnitTests\Microsoft.AspNetCore.Diagnostics.HealthChecks.Tests.csproj", "{2E690E42-B20F-4702-9478-1707EEC7C02F}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HealthChecks.EntityFrameworkCore", "HealthChecks.EntityFrameworkCore", "{9C7F31F8-B782-4016-9B0E-72C8CB42334C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore", "src\Middleware\HealthChecks.EntityFrameworkCore\src\Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore.csproj", "{6DEB6C24-3A35-4E72-BCA8-33344EEE0119}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore", "src\Middleware\HealthChecks.EntityFrameworkCore\src\Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore.csproj", "{6DEB6C24-3A35-4E72-BCA8-33344EEE0119}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore.Tests", "src\Middleware\HealthChecks.EntityFrameworkCore\test\Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore.Tests.csproj", "{922869D9-B9FF-4828-8C6F-FCA7963DB011}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore.Tests", "src\Middleware\HealthChecks.EntityFrameworkCore\test\Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore.Tests.csproj", "{922869D9-B9FF-4828-8C6F-FCA7963DB011}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HostFilteringSample", "src\Middleware\HostFiltering\sample\HostFilteringSample.csproj", "{ECF7A440-D5FC-473F-958C-FE27643844D8}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HostFilteringSample", "src\Middleware\HostFiltering\sample\HostFilteringSample.csproj", "{ECF7A440-D5FC-473F-958C-FE27643844D8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.HostFiltering.Tests", "src\Middleware\HostFiltering\test\Microsoft.AspNetCore.HostFiltering.Tests.csproj", "{92820F5C-4018-4F10-A14B-0AEE619202EE}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.HostFiltering.Tests", "src\Middleware\HostFiltering\test\Microsoft.AspNetCore.HostFiltering.Tests.csproj", "{92820F5C-4018-4F10-A14B-0AEE619202EE}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HttpOverridesSample", "src\Middleware\HttpOverrides\sample\HttpOverridesSample.csproj", "{2C76F024-8C85-4672-AC23-ACEA0FA5E9B5}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HttpOverridesSample", "src\Middleware\HttpOverrides\sample\HttpOverridesSample.csproj", "{2C76F024-8C85-4672-AC23-ACEA0FA5E9B5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.HttpOverrides.Tests", "src\Middleware\HttpOverrides\test\Microsoft.AspNetCore.HttpOverrides.Tests.csproj", "{C520CDA2-BA0C-4427-8B26-F6B3C2FEB5A5}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.HttpOverrides.Tests", "src\Middleware\HttpOverrides\test\Microsoft.AspNetCore.HttpOverrides.Tests.csproj", "{C520CDA2-BA0C-4427-8B26-F6B3C2FEB5A5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HttpsPolicySample", "src\Middleware\HttpsPolicy\sample\HttpsPolicySample.csproj", "{91DD8440-7A66-4880-A0CE-BC6009D2DCFF}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HttpsPolicySample", "src\Middleware\HttpsPolicy\sample\HttpsPolicySample.csproj", "{91DD8440-7A66-4880-A0CE-BC6009D2DCFF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.HttpsPolicy.Tests", "src\Middleware\HttpsPolicy\test\Microsoft.AspNetCore.HttpsPolicy.Tests.csproj", "{A837D64D-435A-473F-8828-8E1DD95D8E4B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.HttpsPolicy.Tests", "src\Middleware\HttpsPolicy\test\Microsoft.AspNetCore.HttpsPolicy.Tests.csproj", "{A837D64D-435A-473F-8828-8E1DD95D8E4B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResponseCompressionSample", "src\Middleware\ResponseCompression\sample\ResponseCompressionSample.csproj", "{4BA8A846-5B24-4F46-90B9-FFEFB889C028}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ResponseCompressionSample", "src\Middleware\ResponseCompression\sample\ResponseCompressionSample.csproj", "{4BA8A846-5B24-4F46-90B9-FFEFB889C028}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.ResponseCompression.Tests", "src\Middleware\ResponseCompression\test\Microsoft.AspNetCore.ResponseCompression.Tests.csproj", "{3CCE49CA-4145-401F-8963-AC28F0908678}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ResponseCompression.Tests", "src\Middleware\ResponseCompression\test\Microsoft.AspNetCore.ResponseCompression.Tests.csproj", "{3CCE49CA-4145-401F-8963-AC28F0908678}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RewriteSample", "src\Middleware\Rewrite\sample\RewriteSample.csproj", "{A1628BC4-134A-4854-9F98-B841520F1497}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RewriteSample", "src\Middleware\Rewrite\sample\RewriteSample.csproj", "{A1628BC4-134A-4854-9F98-B841520F1497}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Rewrite.Tests", "src\Middleware\Rewrite\test\Microsoft.AspNetCore.Rewrite.Tests.csproj", "{C69E36EC-3972-4CDF-A467-94CBD7C691A1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Rewrite.Tests", "src\Middleware\Rewrite\test\Microsoft.AspNetCore.Rewrite.Tests.csproj", "{C69E36EC-3972-4CDF-A467-94CBD7C691A1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LocalizationSample", "src\Middleware\Localization\sample\LocalizationSample.csproj", "{B4FCACA3-FD16-4B89-9D3D-E19C141CE926}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LocalizationSample", "src\Middleware\Localization\sample\LocalizationSample.csproj", "{B4FCACA3-FD16-4B89-9D3D-E19C141CE926}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{C9E481E5-F77D-4462-8E85-1F7FF2DCAA97}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Localization.FunctionalTests", "src\Middleware\Localization\test\FunctionalTests\Microsoft.AspNetCore.Localization.FunctionalTests.csproj", "{5930AA76-C824-45F0-9D30-7EE4CB231E7A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Localization.FunctionalTests", "src\Middleware\Localization\test\FunctionalTests\Microsoft.AspNetCore.Localization.FunctionalTests.csproj", "{5930AA76-C824-45F0-9D30-7EE4CB231E7A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Localization.Tests", "src\Middleware\Localization\test\UnitTests\Microsoft.AspNetCore.Localization.Tests.csproj", "{5BE39E84-020F-405D-99AF-5D46928785AF}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Localization.Tests", "src\Middleware\Localization\test\UnitTests\Microsoft.AspNetCore.Localization.Tests.csproj", "{5BE39E84-020F-405D-99AF-5D46928785AF}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Localization.Routing", "Localization.Routing", "{8C289D6B-712F-442F-A010-218784BFA4D4}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Localization.Routing", "src\Middleware\Localization.Routing\src\Microsoft.AspNetCore.Localization.Routing.csproj", "{D8DE9D37-4733-45F0-9F9D-B5A184CA1ED8}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Localization.Routing", "src\Middleware\Localization.Routing\src\Microsoft.AspNetCore.Localization.Routing.csproj", "{D8DE9D37-4733-45F0-9F9D-B5A184CA1ED8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Localization.Routing.Tests", "src\Middleware\Localization.Routing\test\Microsoft.AspNetCore.Localization.Routing.Tests.csproj", "{99CB7560-3B6F-447B-880A-C5A53F1E56F9}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Localization.Routing.Tests", "src\Middleware\Localization.Routing\test\Microsoft.AspNetCore.Localization.Routing.Tests.csproj", "{99CB7560-3B6F-447B-880A-C5A53F1E56F9}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.ResponseCompression.Performance", "src\Middleware\ResponseCompression\perf\Microsoft.AspNetCore.ResponseCompression.Performance.csproj", "{605D0C19-6E99-4A73-B336-1AD700AE93C0}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ResponseCompression.Performance", "src\Middleware\ResponseCompression\perf\Microsoft.AspNetCore.ResponseCompression.Performance.csproj", "{605D0C19-6E99-4A73-B336-1AD700AE93C0}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ConformanceTests", "ConformanceTests", "{73BC406B-4D98-4BE0-A756-19F0F3D2B587}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AutobahnTestApp", "src\Middleware\WebSockets\test\ConformanceTests\AutobahnTestApp\AutobahnTestApp.csproj", "{2292C14D-151C-4AB7-AA91-7F0165E2073E}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AutobahnTestApp", "src\Middleware\WebSockets\test\ConformanceTests\AutobahnTestApp\AutobahnTestApp.csproj", "{2292C14D-151C-4AB7-AA91-7F0165E2073E}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{45211BB8-4F51-427D-ADA2-7478E3398A60}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Cors.Test", "src\Middleware\CORS\test\UnitTests\Microsoft.AspNetCore.Cors.Test.csproj", "{F8410622-2764-4B05-BEC4-8D25CABBC45A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Cors.Test", "src\Middleware\CORS\test\UnitTests\Microsoft.AspNetCore.Cors.Test.csproj", "{F8410622-2764-4B05-BEC4-8D25CABBC45A}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{2E4D61F1-F504-450E-B4C2-11C5214E7200}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StaticFileSample", "src\Middleware\StaticFiles\samples\StaticFileSample\StaticFileSample.csproj", "{5EC5F788-458B-4957-8E33-ADD82DB6E420}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StaticFileSample", "src\Middleware\StaticFiles\samples\StaticFileSample\StaticFileSample.csproj", "{5EC5F788-458B-4957-8E33-ADD82DB6E420}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{491D5D41-4424-4642-AF7C-A7DD186CD282}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.StaticFiles.FunctionalTests", "src\Middleware\StaticFiles\test\FunctionalTests\Microsoft.AspNetCore.StaticFiles.FunctionalTests.csproj", "{7135BA54-DE2E-42CD-8261-1A88907843FC}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.StaticFiles.FunctionalTests", "src\Middleware\StaticFiles\test\FunctionalTests\Microsoft.AspNetCore.StaticFiles.FunctionalTests.csproj", "{7135BA54-DE2E-42CD-8261-1A88907843FC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.StaticFiles.Tests", "src\Middleware\StaticFiles\test\UnitTests\Microsoft.AspNetCore.StaticFiles.Tests.csproj", "{A72BB350-8903-4914-9583-A156B66419EB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.StaticFiles.Tests", "src\Middleware\StaticFiles\test\UnitTests\Microsoft.AspNetCore.StaticFiles.Tests.csproj", "{A72BB350-8903-4914-9583-A156B66419EB}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ResponseCaching", "ResponseCaching", "{7CBB1320-BF86-4B32-9D2B-273A45057727}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.ResponseCaching", "src\Middleware\ResponseCaching\src\Microsoft.AspNetCore.ResponseCaching.csproj", "{186AF4F9-9AFF-4395-9340-006F78D85DFB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ResponseCaching", "src\Middleware\ResponseCaching\src\Microsoft.AspNetCore.ResponseCaching.csproj", "{186AF4F9-9AFF-4395-9340-006F78D85DFB}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{F6BC5402-310D-4B1F-A018-99FD1D6C183A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResponseCachingSample", "src\Middleware\ResponseCaching\samples\ResponseCachingSample\ResponseCachingSample.csproj", "{6BB8474D-B8E1-4B77-AA44-253ACA5E686D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ResponseCachingSample", "src\Middleware\ResponseCaching\samples\ResponseCachingSample\ResponseCachingSample.csproj", "{6BB8474D-B8E1-4B77-AA44-253ACA5E686D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.ResponseCaching.Tests", "src\Middleware\ResponseCaching\test\Microsoft.AspNetCore.ResponseCaching.Tests.csproj", "{8E5588B6-0557-41CF-9A0B-1A0B412754E1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ResponseCaching.Tests", "src\Middleware\ResponseCaching\test\Microsoft.AspNetCore.ResponseCaching.Tests.csproj", "{8E5588B6-0557-41CF-9A0B-1A0B412754E1}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Session", "Session", "{48BEABD3-2446-466C-8694-D34EF0949369}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SessionSample", "src\Middleware\Session\samples\SessionSample.csproj", "{F0F3E6B1-5BB5-444E-B965-F2A9FFAB26CF}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SessionSample", "src\Middleware\Session\samples\SessionSample.csproj", "{F0F3E6B1-5BB5-444E-B965-F2A9FFAB26CF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Session", "src\Middleware\Session\src\Microsoft.AspNetCore.Session.csproj", "{609FEA30-36D6-4FEB-AF07-7BE2BCD4D00B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Session", "src\Middleware\Session\src\Microsoft.AspNetCore.Session.csproj", "{609FEA30-36D6-4FEB-AF07-7BE2BCD4D00B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Session.Tests", "src\Middleware\Session\test\Microsoft.AspNetCore.Session.Tests.csproj", "{A01B523B-35CA-4C14-B792-3887F8741E99}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Session.Tests", "src\Middleware\Session\test\Microsoft.AspNetCore.Session.Tests.csproj", "{A01B523B-35CA-4C14-B792-3887F8741E99}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HttpSys", "HttpSys", "{166E48ED-9738-4E13-8618-0D805F6F0F65}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Server.HttpSys", "src\Servers\HttpSys\src\Microsoft.AspNetCore.Server.HttpSys.csproj", "{AC0CBDEB-B750-4B81-AEC3-F218A384FB16}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.HttpSys", "src\Servers\HttpSys\src\Microsoft.AspNetCore.Server.HttpSys.csproj", "{AC0CBDEB-B750-4B81-AEC3-F218A384FB16}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{81AF139E-F3BB-46FD-B8DB-93A645E5222C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NodeServicesExamples", "src\Middleware\NodeServices\samples\NodeServicesExamples\NodeServicesExamples.csproj", "{49EAD781-92BF-4863-9159-08674548D1BE}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NodeServicesExamples", "src\Middleware\NodeServices\samples\NodeServicesExamples\NodeServicesExamples.csproj", "{49EAD781-92BF-4863-9159-08674548D1BE}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.NodeServices.Tests", "src\Middleware\NodeServices\test\Microsoft.AspNetCore.NodeServices.Tests.csproj", "{F7E4CC45-B553-4D58-8B3E-B9F426FAF67F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.NodeServices.Tests", "src\Middleware\NodeServices\test\Microsoft.AspNetCore.NodeServices.Tests.csproj", "{F7E4CC45-B553-4D58-8B3E-B9F426FAF67F}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HeaderPropagation", "HeaderPropagation", "{5527E368-FD50-4E8C-B8D8-C3D1374BE4F1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.HeaderPropagation", "src\Middleware\HeaderPropagation\src\Microsoft.AspNetCore.HeaderPropagation.csproj", "{EC7CA990-BB0E-44AF-81B6-44E0E27FDE9B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.HeaderPropagation", "src\Middleware\HeaderPropagation\src\Microsoft.AspNetCore.HeaderPropagation.csproj", "{EC7CA990-BB0E-44AF-81B6-44E0E27FDE9B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.HeaderPropagation.Tests", "src\Middleware\HeaderPropagation\test\Microsoft.AspNetCore.HeaderPropagation.Tests.csproj", "{399AC9FB-7DCA-4868-B299-2EE4C88D41AD}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.HeaderPropagation.Tests", "src\Middleware\HeaderPropagation\test\Microsoft.AspNetCore.HeaderPropagation.Tests.csproj", "{399AC9FB-7DCA-4868-B299-2EE4C88D41AD}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{C2FDF6AA-A8BD-40A6-81AD-14687927E9FC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeaderPropagationSample", "src\Middleware\HeaderPropagation\samples\HeaderPropagationSample\HeaderPropagationSample.csproj", "{91BD5675-6674-4053-AD04-19F28DD3BAE5}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HeaderPropagationSample", "src\Middleware\HeaderPropagation\samples\HeaderPropagationSample\HeaderPropagationSample.csproj", "{91BD5675-6674-4053-AD04-19F28DD3BAE5}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ConcurrencyLimiter", "ConcurrencyLimiter", "{4F8ED87D-E4D9-4941-94D7-D529D83DDBA0}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConcurrencyLimiterSample", "src\Middleware\ConcurrencyLimiter\sample\ConcurrencyLimiterSample.csproj", "{56BA4AB2-B915-46DC-AE67-234D60BFEDBC}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConcurrencyLimiterSample", "src\Middleware\ConcurrencyLimiter\sample\ConcurrencyLimiterSample.csproj", "{56BA4AB2-B915-46DC-AE67-234D60BFEDBC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.ConcurrencyLimiter", "src\Middleware\ConcurrencyLimiter\src\Microsoft.AspNetCore.ConcurrencyLimiter.csproj", "{532D447F-0CDE-4BA6-B181-DD1FB4B07BF0}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ConcurrencyLimiter", "src\Middleware\ConcurrencyLimiter\src\Microsoft.AspNetCore.ConcurrencyLimiter.csproj", "{532D447F-0CDE-4BA6-B181-DD1FB4B07BF0}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.ConcurrencyLimiter.Tests", "src\Middleware\ConcurrencyLimiter\test\Microsoft.AspNetCore.ConcurrencyLimiter.Tests.csproj", "{2D6567CC-2BAE-4208-BBD0-F8D2F6E57154}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ConcurrencyLimiter.Tests", "src\Middleware\ConcurrencyLimiter\test\Microsoft.AspNetCore.ConcurrencyLimiter.Tests.csproj", "{2D6567CC-2BAE-4208-BBD0-F8D2F6E57154}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "perf", "perf", "{9ECF118E-D7A5-4805-B698-DE9013BB91C6}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.ConcurrencyLimiter.Microbenchmarks", "src\Middleware\ConcurrencyLimiter\perf\Microbenchmarks\Microsoft.AspNetCore.ConcurrencyLimiter.Microbenchmarks.csproj", "{5BF572A5-24AF-4815-BF0C-F57DA650207D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ConcurrencyLimiter.Microbenchmarks", "src\Middleware\ConcurrencyLimiter\perf\Microbenchmarks\Microsoft.AspNetCore.ConcurrencyLimiter.Microbenchmarks.csproj", "{5BF572A5-24AF-4815-BF0C-F57DA650207D}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IntegrationTesting.IIS", "IntegrationTesting.IIS", "{036FB9FC-7F26-4982-B94E-2C32B4C836E1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Server.IntegrationTesting.IIS", "src\Servers\IIS\IntegrationTesting.IIS\src\Microsoft.AspNetCore.Server.IntegrationTesting.IIS.csproj", "{559F1CCF-7E01-4E27-AB45-2E3B6B4984E1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IntegrationTesting.IIS", "src\Servers\IIS\IntegrationTesting.IIS\src\Microsoft.AspNetCore.Server.IntegrationTesting.IIS.csproj", "{559F1CCF-7E01-4E27-AB45-2E3B6B4984E1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.SpaServices.Extensions.Tests", "src\Middleware\SpaServices.Extensions\test\Microsoft.AspNetCore.SpaServices.Extensions.Tests.csproj", "{AF964703-404B-4632-9D1F-8EEE646BBA37}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SpaServices.Extensions.Tests", "src\Middleware\SpaServices.Extensions\test\Microsoft.AspNetCore.SpaServices.Extensions.Tests.csproj", "{AF964703-404B-4632-9D1F-8EEE646BBA37}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "perf", "perf", "{EE65018D-FA12-461D-B2C5-44CA6E385530}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.WebSockets.Microbenchmarks", "src\Middleware\perf\Microbenchmarks\Microsoft.AspNetCore.WebSockets.Microbenchmarks.csproj", "{A8E1962B-688E-44B3-81F3-BBB9891534CE}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.WebSockets.Microbenchmarks", "src\Middleware\perf\Microbenchmarks\Microsoft.AspNetCore.WebSockets.Microbenchmarks.csproj", "{A8E1962B-688E-44B3-81F3-BBB9891534CE}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.SpaServices.Tests", "src\Middleware\SpaServices\test\Microsoft.AspNetCore.SpaServices.Tests.csproj", "{81E8CF5B-F285-40C6-B935-6E5F7AA7A072}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SpaServices.Tests", "src\Middleware\SpaServices\test\Microsoft.AspNetCore.SpaServices.Tests.csproj", "{81E8CF5B-F285-40C6-B935-6E5F7AA7A072}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.ResponseCaching.Microbenchmarks", "src\Middleware\perf\ResponseCaching.Microbenchmarks\Microsoft.AspNetCore.ResponseCaching.Microbenchmarks.csproj", "{8A745E35-8098-4EB4-AC55-587B9F0DC4BE}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ResponseCaching.Microbenchmarks", "src\Middleware\perf\ResponseCaching.Microbenchmarks\Microsoft.AspNetCore.ResponseCaching.Microbenchmarks.csproj", "{8A745E35-8098-4EB4-AC55-587B9F0DC4BE}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MusicStore", "MusicStore", "{884AED21-7931-42A3-B08A-E58F7B0D6E7F}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{8DA88110-5A13-41A9-9F9D-674D921EB442}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MusicStore", "src\MusicStore\samples\MusicStore\MusicStore.csproj", "{4BCF2228-159D-4547-8D54-CDD2252D076A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MusicStore", "src\MusicStore\samples\MusicStore\MusicStore.csproj", "{4BCF2228-159D-4547-8D54-CDD2252D076A}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{2D347127-3B13-47B1-84EC-770A9C1E11B0}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MusicStore.Test", "src\MusicStore\test\MusicStore.Test\MusicStore.Test.csproj", "{A7802482-55BA-4D95-BE79-8A601131F527}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MusicStore.Test", "src\MusicStore\test\MusicStore.Test\MusicStore.Test.csproj", "{A7802482-55BA-4D95-BE79-8A601131F527}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MusicStore.E2ETests", "src\MusicStore\test\MusicStore.E2ETests\MusicStore.E2ETests.csproj", "{81947277-035F-41F6-A1D4-8EA362CB46D2}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MusicStore.E2ETests", "src\MusicStore\test\MusicStore.E2ETests\MusicStore.E2ETests.csproj", "{81947277-035F-41F6-A1D4-8EA362CB46D2}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MicrosoftAccount", "MicrosoftAccount", "{8C4006DF-FF48-46B6-A124-10B1EEAA266E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Authentication.MicrosoftAccount", "src\Security\Authentication\MicrosoftAccount\src\Microsoft.AspNetCore.Authentication.MicrosoftAccount.csproj", "{F5C54062-B19C-4291-A816-F1B5A167369A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.MicrosoftAccount", "src\Security\Authentication\MicrosoftAccount\src\Microsoft.AspNetCore.Authentication.MicrosoftAccount.csproj", "{F5C54062-B19C-4291-A816-F1B5A167369A}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{056535BC-3E30-49E2-BE3B-630C62E641A5}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WebSites", "WebSites", "{088C37A5-30D2-40FB-B031-D163CFBED006}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BasicWebSite", "src\Mvc\test\WebSites\BasicWebSite\BasicWebSite.csproj", "{B5F938FB-37DF-4201-9537-E043513701D7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BasicWebSite", "src\Mvc\test\WebSites\BasicWebSite\BasicWebSite.csproj", "{B5F938FB-37DF-4201-9537-E043513701D7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mvc.RoutingWebSite", "src\Mvc\test\WebSites\RoutingWebSite\Mvc.RoutingWebSite.csproj", "{2C155AA6-B549-4FCA-A9A0-34F28A9A4160}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mvc.RoutingWebSite", "src\Mvc\test\WebSites\RoutingWebSite\Mvc.RoutingWebSite.csproj", "{2C155AA6-B549-4FCA-A9A0-34F28A9A4160}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RazorWebSite", "src\Mvc\test\WebSites\RazorWebSite\RazorWebSite.csproj", "{1CF04156-B477-4B88-A25B-15D4E6F587D7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorWebSite", "src\Mvc\test\WebSites\RazorWebSite\RazorWebSite.csproj", "{1CF04156-B477-4B88-A25B-15D4E6F587D7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FormatterWebSite", "src\Mvc\test\WebSites\FormatterWebSite\FormatterWebSite.csproj", "{AC688973-3FAD-4A04-99C9-414782E5AE42}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FormatterWebSite", "src\Mvc\test\WebSites\FormatterWebSite\FormatterWebSite.csproj", "{AC688973-3FAD-4A04-99C9-414782E5AE42}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ApiExplorerWebSite", "src\Mvc\test\WebSites\ApiExplorerWebSite\ApiExplorerWebSite.csproj", "{58BAA9A7-4A2A-459A-BD41-086E8F83022D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ApiExplorerWebSite", "src\Mvc\test\WebSites\ApiExplorerWebSite\ApiExplorerWebSite.csproj", "{58BAA9A7-4A2A-459A-BD41-086E8F83022D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VersioningWebSite", "src\Mvc\test\WebSites\VersioningWebSite\VersioningWebSite.csproj", "{F4F604C5-C4BB-4217-94DB-2A51EC4AAEA4}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VersioningWebSite", "src\Mvc\test\WebSites\VersioningWebSite\VersioningWebSite.csproj", "{F4F604C5-C4BB-4217-94DB-2A51EC4AAEA4}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TagHelpersWebSite", "src\Mvc\test\WebSites\TagHelpersWebSite\TagHelpersWebSite.csproj", "{185D4D67-FFE4-4673-8F3A-AD77EA2D3931}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TagHelpersWebSite", "src\Mvc\test\WebSites\TagHelpersWebSite\TagHelpersWebSite.csproj", "{185D4D67-FFE4-4673-8F3A-AD77EA2D3931}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FilesWebSite", "src\Mvc\test\WebSites\FilesWebSite\FilesWebSite.csproj", "{D8BA7FEB-2720-4CCD-8C7F-FAAC5D8D0633}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilesWebSite", "src\Mvc\test\WebSites\FilesWebSite\FilesWebSite.csproj", "{D8BA7FEB-2720-4CCD-8C7F-FAAC5D8D0633}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ApplicationModelWebSite", "src\Mvc\test\WebSites\ApplicationModelWebSite\ApplicationModelWebSite.csproj", "{975E7F46-8044-463E-89E1-56EB0F7913B8}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ApplicationModelWebSite", "src\Mvc\test\WebSites\ApplicationModelWebSite\ApplicationModelWebSite.csproj", "{975E7F46-8044-463E-89E1-56EB0F7913B8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HtmlGenerationWebSite", "src\Mvc\test\WebSites\HtmlGenerationWebSite\HtmlGenerationWebSite.csproj", "{BAD5E853-2C9D-41D5-844D-470BC33B43E8}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HtmlGenerationWebSite", "src\Mvc\test\WebSites\HtmlGenerationWebSite\HtmlGenerationWebSite.csproj", "{BAD5E853-2C9D-41D5-844D-470BC33B43E8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ErrorPageMiddlewareWebSite", "src\Mvc\test\WebSites\ErrorPageMiddlewareWebSite\ErrorPageMiddlewareWebSite.csproj", "{9C2BD6C2-803D-4D19-BD40-860F1B340DC7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ErrorPageMiddlewareWebSite", "src\Mvc\test\WebSites\ErrorPageMiddlewareWebSite\ErrorPageMiddlewareWebSite.csproj", "{9C2BD6C2-803D-4D19-BD40-860F1B340DC7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlFormattersWebSite", "src\Mvc\test\WebSites\XmlFormattersWebSite\XmlFormattersWebSite.csproj", "{A8096362-6304-4DAF-A091-978BE764FF30}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "XmlFormattersWebSite", "src\Mvc\test\WebSites\XmlFormattersWebSite\XmlFormattersWebSite.csproj", "{A8096362-6304-4DAF-A091-978BE764FF30}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ControllersFromServicesWebSite", "src\Mvc\test\WebSites\ControllersFromServicesWebSite\ControllersFromServicesWebSite.csproj", "{0FD49F5F-2950-43B8-8467-78596A4421AC}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ControllersFromServicesWebSite", "src\Mvc\test\WebSites\ControllersFromServicesWebSite\ControllersFromServicesWebSite.csproj", "{0FD49F5F-2950-43B8-8467-78596A4421AC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ControllersFromServicesClassLibrary", "src\Mvc\test\WebSites\ControllersFromServicesClassLibrary\ControllersFromServicesClassLibrary.csproj", "{773877FC-7C04-48F9-BC1D-9B4231D9B6D1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ControllersFromServicesClassLibrary", "src\Mvc\test\WebSites\ControllersFromServicesClassLibrary\ControllersFromServicesClassLibrary.csproj", "{773877FC-7C04-48F9-BC1D-9B4231D9B6D1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CorsWebSite", "src\Mvc\test\WebSites\CorsWebSite\CorsWebSite.csproj", "{7DFECECC-E30C-4217-9746-86A8D652E110}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CorsWebSite", "src\Mvc\test\WebSites\CorsWebSite\CorsWebSite.csproj", "{7DFECECC-E30C-4217-9746-86A8D652E110}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{B8825E86-B8EA-4666-B681-C443D027C95D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MvcSandbox", "src\Mvc\samples\MvcSandbox\MvcSandbox.csproj", "{3936CFC3-AA2D-40CF-A5CB-3C676D99BB90}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MvcSandbox", "src\Mvc\samples\MvcSandbox\MvcSandbox.csproj", "{3936CFC3-AA2D-40CF-A5CB-3C676D99BB90}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SimpleWebSite", "src\Mvc\test\WebSites\SimpleWebSite\SimpleWebSite.csproj", "{70F83D54-91BF-4BED-8A82-F310D640C9F8}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleWebSite", "src\Mvc\test\WebSites\SimpleWebSite\SimpleWebSite.csproj", "{70F83D54-91BF-4BED-8A82-F310D640C9F8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SecurityWebSite", "src\Mvc\test\WebSites\SecurityWebSite\SecurityWebSite.csproj", "{4BCC89AB-3429-4C38-AFF9-DBBD605075F6}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SecurityWebSite", "src\Mvc\test\WebSites\SecurityWebSite\SecurityWebSite.csproj", "{4BCC89AB-3429-4C38-AFF9-DBBD605075F6}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RazorPagesWebSite", "src\Mvc\test\WebSites\RazorPagesWebSite\RazorPagesWebSite.csproj", "{12EFA8EE-25FC-4CAD-98AC-B2B97368579A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorPagesWebSite", "src\Mvc\test\WebSites\RazorPagesWebSite\RazorPagesWebSite.csproj", "{12EFA8EE-25FC-4CAD-98AC-B2B97368579A}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "benchmarks", "benchmarks", "{CA6DD42B-2DBC-4061-91E8-C91FA8F4C410}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.Performance", "src\Mvc\benchmarks\Microsoft.AspNetCore.Mvc.Performance\Microsoft.AspNetCore.Mvc.Performance.csproj", "{199639E9-0FAA-49C4-A75F-95EE71F32CC0}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Performance", "src\Mvc\benchmarks\Microsoft.AspNetCore.Mvc.Performance\Microsoft.AspNetCore.Mvc.Performance.csproj", "{199639E9-0FAA-49C4-A75F-95EE71F32CC0}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RazorBuildWebSite", "src\Mvc\test\WebSites\RazorBuildWebSite\RazorBuildWebSite.csproj", "{F634FAC8-1CE5-4AD2-8A8B-92CFBB127D3A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorBuildWebSite", "src\Mvc\test\WebSites\RazorBuildWebSite\RazorBuildWebSite.csproj", "{F634FAC8-1CE5-4AD2-8A8B-92CFBB127D3A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RazorBuildWebSite.Views", "src\Mvc\test\WebSites\RazorBuildWebSite.Views\RazorBuildWebSite.Views.csproj", "{039266E2-5F43-4B94-86DA-8BDD7BE8885F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorBuildWebSite.Views", "src\Mvc\test\WebSites\RazorBuildWebSite.Views\RazorBuildWebSite.Views.csproj", "{039266E2-5F43-4B94-86DA-8BDD7BE8885F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mvc.Analyzers.Test", "src\Mvc\Mvc.Analyzers\test\Mvc.Analyzers.Test.csproj", "{EA846E30-4F38-4315-844F-D5BC20F74B07}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mvc.Analyzers.Test", "src\Mvc\Mvc.Analyzers\test\Mvc.Analyzers.Test.csproj", "{EA846E30-4F38-4315-844F-D5BC20F74B07}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RazorPagesClassLibrary", "src\Mvc\test\WebSites\RazorPagesClassLibrary\RazorPagesClassLibrary.csproj", "{3BEA35BC-784F-4892-AF1F-90177B8362A1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorPagesClassLibrary", "src\Mvc\test\WebSites\RazorPagesClassLibrary\RazorPagesClassLibrary.csproj", "{3BEA35BC-784F-4892-AF1F-90177B8362A1}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "shared", "shared", "{3B0F71CD-980F-48DF-AEDA-A5CDF001F7A9}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.Views.TestCommon", "src\Mvc\shared\Mvc.Views.TestCommon\Microsoft.AspNetCore.Mvc.Views.TestCommon.csproj", "{9D70EEB0-1E6D-4C07-8B5F-5D7E4CD5EE55}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Views.TestCommon", "src\Mvc\shared\Mvc.Views.TestCommon\Microsoft.AspNetCore.Mvc.Views.TestCommon.csproj", "{9D70EEB0-1E6D-4C07-8B5F-5D7E4CD5EE55}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc.Api.Analyzers", "Mvc.Api.Analyzers", "{2A92D94B-9825-42D3-AB33-52E3010D74E2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mvc.Api.Analyzers.Test", "src\Mvc\Mvc.Api.Analyzers\test\Mvc.Api.Analyzers.Test.csproj", "{E27910E1-6CCE-41B2-97DD-AE874007B592}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mvc.Api.Analyzers.Test", "src\Mvc\Mvc.Api.Analyzers\test\Mvc.Api.Analyzers.Test.csproj", "{E27910E1-6CCE-41B2-97DD-AE874007B592}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.Api.Analyzers", "src\Mvc\Mvc.Api.Analyzers\src\Microsoft.AspNetCore.Mvc.Api.Analyzers.csproj", "{72879779-4CAC-4CB0-A052-FF60EB386B7A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Api.Analyzers", "src\Mvc\Mvc.Api.Analyzers\src\Microsoft.AspNetCore.Mvc.Api.Analyzers.csproj", "{72879779-4CAC-4CB0-A052-FF60EB386B7A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.Performance.Views", "src\Mvc\benchmarks\Microsoft.AspNetCore.Mvc.Performance.Views\Microsoft.AspNetCore.Mvc.Performance.Views.csproj", "{5BD69C96-623F-427B-9AAF-67C0817A9A9A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Performance.Views", "src\Mvc\benchmarks\Microsoft.AspNetCore.Mvc.Performance.Views\Microsoft.AspNetCore.Mvc.Performance.Views.csproj", "{5BD69C96-623F-427B-9AAF-67C0817A9A9A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GenericHostWebSite", "src\Mvc\test\WebSites\GenericHostWebSite\GenericHostWebSite.csproj", "{D10BA44E-219B-4528-98F5-0CB0FCF17017}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GenericHostWebSite", "src\Mvc\test\WebSites\GenericHostWebSite\GenericHostWebSite.csproj", "{D10BA44E-219B-4528-98F5-0CB0FCF17017}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.Test", "src\Mvc\Mvc\test\Microsoft.AspNetCore.Mvc.Test.csproj", "{EAF56BE6-683A-4C34-AC2D-22770EC13915}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Test", "src\Mvc\Mvc\test\Microsoft.AspNetCore.Mvc.Test.csproj", "{EAF56BE6-683A-4C34-AC2D-22770EC13915}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.Abstractions.Test", "src\Mvc\Mvc.Abstractions\test\Microsoft.AspNetCore.Mvc.Abstractions.Test.csproj", "{6DA1B006-0D5B-4C92-8ED6-9F1FB99C187A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Abstractions.Test", "src\Mvc\Mvc.Abstractions\test\Microsoft.AspNetCore.Mvc.Abstractions.Test.csproj", "{6DA1B006-0D5B-4C92-8ED6-9F1FB99C187A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.ApiExplorer.Test", "src\Mvc\Mvc.ApiExplorer\test\Microsoft.AspNetCore.Mvc.ApiExplorer.Test.csproj", "{332A8F84-FC5B-44A5-95A2-379B69C6E755}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.ApiExplorer.Test", "src\Mvc\Mvc.ApiExplorer\test\Microsoft.AspNetCore.Mvc.ApiExplorer.Test.csproj", "{332A8F84-FC5B-44A5-95A2-379B69C6E755}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.Core.Test", "src\Mvc\Mvc.Core\test\Microsoft.AspNetCore.Mvc.Core.Test.csproj", "{A28B3D43-619F-44A9-9463-78F0E2474351}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Core.Test", "src\Mvc\Mvc.Core\test\Microsoft.AspNetCore.Mvc.Core.Test.csproj", "{A28B3D43-619F-44A9-9463-78F0E2474351}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.Cors.Test", "src\Mvc\Mvc.Cors\test\Microsoft.AspNetCore.Mvc.Cors.Test.csproj", "{926D431D-D95F-42BA-817B-DFEAF697E007}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Cors.Test", "src\Mvc\Mvc.Cors\test\Microsoft.AspNetCore.Mvc.Cors.Test.csproj", "{926D431D-D95F-42BA-817B-DFEAF697E007}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.DataAnnotations.Test", "src\Mvc\Mvc.DataAnnotations\test\Microsoft.AspNetCore.Mvc.DataAnnotations.Test.csproj", "{00D4573D-B61D-48C2-BCB4-027A19EB3247}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.DataAnnotations.Test", "src\Mvc\Mvc.DataAnnotations\test\Microsoft.AspNetCore.Mvc.DataAnnotations.Test.csproj", "{00D4573D-B61D-48C2-BCB4-027A19EB3247}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc.Formatters.Xml", "Mvc.Formatters.Xml", "{46AB5306-4FF5-4A4B-8009-DFCFAB178442}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.Formatters.Xml", "src\Mvc\Mvc.Formatters.Xml\src\Microsoft.AspNetCore.Mvc.Formatters.Xml.csproj", "{EFDFAA40-91FA-4896-BC6B-06A30CE44DEC}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Formatters.Xml", "src\Mvc\Mvc.Formatters.Xml\src\Microsoft.AspNetCore.Mvc.Formatters.Xml.csproj", "{EFDFAA40-91FA-4896-BC6B-06A30CE44DEC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.Formatters.Xml.Test", "src\Mvc\Mvc.Formatters.Xml\test\Microsoft.AspNetCore.Mvc.Formatters.Xml.Test.csproj", "{5500EB93-4F36-4929-9730-E593DBC2B7F5}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Formatters.Xml.Test", "src\Mvc\Mvc.Formatters.Xml\test\Microsoft.AspNetCore.Mvc.Formatters.Xml.Test.csproj", "{5500EB93-4F36-4929-9730-E593DBC2B7F5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.Localization.Test", "src\Mvc\Mvc.Localization\test\Microsoft.AspNetCore.Mvc.Localization.Test.csproj", "{0F346D2C-FF9F-4F1A-AB0D-BA6F1F731596}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Localization.Test", "src\Mvc\Mvc.Localization\test\Microsoft.AspNetCore.Mvc.Localization.Test.csproj", "{0F346D2C-FF9F-4F1A-AB0D-BA6F1F731596}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.Razor.Test", "src\Mvc\Mvc.Razor\test\Microsoft.AspNetCore.Mvc.Razor.Test.csproj", "{19F3DD0C-2FA6-47A5-83A3-F66D7CAA5F70}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Razor.Test", "src\Mvc\Mvc.Razor\test\Microsoft.AspNetCore.Mvc.Razor.Test.csproj", "{19F3DD0C-2FA6-47A5-83A3-F66D7CAA5F70}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.RazorPages.Test", "src\Mvc\Mvc.RazorPages\test\Microsoft.AspNetCore.Mvc.RazorPages.Test.csproj", "{FFA69E3E-1168-49F1-AF95-D16C08E34BC5}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.RazorPages.Test", "src\Mvc\Mvc.RazorPages\test\Microsoft.AspNetCore.Mvc.RazorPages.Test.csproj", "{FFA69E3E-1168-49F1-AF95-D16C08E34BC5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.TagHelpers.Test", "src\Mvc\Mvc.TagHelpers\test\Microsoft.AspNetCore.Mvc.TagHelpers.Test.csproj", "{DE9982E8-CBC6-4CD7-B322-AC0D792F7136}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.TagHelpers.Test", "src\Mvc\Mvc.TagHelpers\test\Microsoft.AspNetCore.Mvc.TagHelpers.Test.csproj", "{DE9982E8-CBC6-4CD7-B322-AC0D792F7136}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.ViewFeatures.Test", "src\Mvc\Mvc.ViewFeatures\test\Microsoft.AspNetCore.Mvc.ViewFeatures.Test.csproj", "{687BD42C-54CD-4E80-A877-6E278AE21105}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.ViewFeatures.Test", "src\Mvc\Mvc.ViewFeatures\test\Microsoft.AspNetCore.Mvc.ViewFeatures.Test.csproj", "{687BD42C-54CD-4E80-A877-6E278AE21105}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.FunctionalTests", "src\Mvc\test\Mvc.FunctionalTests\Microsoft.AspNetCore.Mvc.FunctionalTests.csproj", "{F0A4EEF4-EBD5-4F01-96D0-183478ECC797}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.FunctionalTests", "src\Mvc\test\Mvc.FunctionalTests\Microsoft.AspNetCore.Mvc.FunctionalTests.csproj", "{F0A4EEF4-EBD5-4F01-96D0-183478ECC797}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.IntegrationTests", "src\Mvc\test\Mvc.IntegrationTests\Microsoft.AspNetCore.Mvc.IntegrationTests.csproj", "{BD57D455-9B11-4BA6-9F1D-6B289284642D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.IntegrationTests", "src\Mvc\test\Mvc.IntegrationTests\Microsoft.AspNetCore.Mvc.IntegrationTests.csproj", "{BD57D455-9B11-4BA6-9F1D-6B289284642D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.TestDiagnosticListener", "src\Mvc\shared\Mvc.TestDiagnosticListener\Microsoft.AspNetCore.Mvc.TestDiagnosticListener.csproj", "{0C6E7B48-5D25-4E83-8958-B26DDC8E2BB3}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.TestDiagnosticListener", "src\Mvc\shared\Mvc.TestDiagnosticListener\Microsoft.AspNetCore.Mvc.TestDiagnosticListener.csproj", "{0C6E7B48-5D25-4E83-8958-B26DDC8E2BB3}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.Core.TestCommon", "src\Mvc\shared\Mvc.Core.TestCommon\Microsoft.AspNetCore.Mvc.Core.TestCommon.csproj", "{16F6B07A-3ECA-4BFB-ABDF-DE1D224D2AF3}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Core.TestCommon", "src\Mvc\shared\Mvc.Core.TestCommon\Microsoft.AspNetCore.Mvc.Core.TestCommon.csproj", "{16F6B07A-3ECA-4BFB-ABDF-DE1D224D2AF3}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.NewtonsoftJson.Test", "src\Mvc\Mvc.NewtonsoftJson\test\Microsoft.AspNetCore.Mvc.NewtonsoftJson.Test.csproj", "{6D9C0B4C-A902-4F37-921F-1A5B14405463}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.NewtonsoftJson.Test", "src\Mvc\Mvc.NewtonsoftJson\test\Microsoft.AspNetCore.Mvc.NewtonsoftJson.Test.csproj", "{6D9C0B4C-A902-4F37-921F-1A5B14405463}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc.Razor.RuntimeCompilation", "Mvc.Razor.RuntimeCompilation", "{59BDE9D7-C177-4A40-B1EF-267FB260A59C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation", "src\Mvc\Mvc.Razor.RuntimeCompilation\src\Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.csproj", "{9FF8728F-B953-4481-9B9F-11351CA0BFE6}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation", "src\Mvc\Mvc.Razor.RuntimeCompilation\src\Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.csproj", "{9FF8728F-B953-4481-9B9F-11351CA0BFE6}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.Test", "src\Mvc\Mvc.Razor.RuntimeCompilation\test\Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.Test.csproj", "{586ECE45-FD14-4520-9823-0A9B043FCC6E}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.Test", "src\Mvc\Mvc.Razor.RuntimeCompilation\test\Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.Test.csproj", "{586ECE45-FD14-4520-9823-0A9B043FCC6E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RazorBuildWebSite.PrecompiledViews", "src\Mvc\test\WebSites\RazorBuildWebSite.PrecompiledViews\RazorBuildWebSite.PrecompiledViews.csproj", "{6BDD94A4-91DF-40F5-A1CE-88D46F26084F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorBuildWebSite.PrecompiledViews", "src\Mvc\test\WebSites\RazorBuildWebSite.PrecompiledViews\RazorBuildWebSite.PrecompiledViews.csproj", "{6BDD94A4-91DF-40F5-A1CE-88D46F26084F}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ProjectTemplates", "ProjectTemplates", "{08D53E58-4AAE-40C4-8497-63EC8664F304}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.DotNet.Web.ProjectTemplates", "src\ProjectTemplates\Web.ProjectTemplates\Microsoft.DotNet.Web.ProjectTemplates.csproj", "{5D3C520F-0CA7-4759-A563-40496545FA48}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.Web.ProjectTemplates", "src\ProjectTemplates\Web.ProjectTemplates\Microsoft.DotNet.Web.ProjectTemplates.csproj", "{5D3C520F-0CA7-4759-A563-40496545FA48}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.DotNet.Web.Spa.ProjectTemplates", "src\ProjectTemplates\Web.Spa.ProjectTemplates\Microsoft.DotNet.Web.Spa.ProjectTemplates.csproj", "{C732CA83-EEBE-4DAB-B567-5A35640FE8CD}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.Web.Spa.ProjectTemplates", "src\ProjectTemplates\Web.Spa.ProjectTemplates\Microsoft.DotNet.Web.Spa.ProjectTemplates.csproj", "{C732CA83-EEBE-4DAB-B567-5A35640FE8CD}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.DotNet.Web.Client.ItemTemplates", "src\ProjectTemplates\Web.Client.ItemTemplates\Microsoft.DotNet.Web.Client.ItemTemplates.csproj", "{4F2C221D-7D0B-46B3-9362-2D68F92ECF29}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.Web.Client.ItemTemplates", "src\ProjectTemplates\Web.Client.ItemTemplates\Microsoft.DotNet.Web.Client.ItemTemplates.csproj", "{4F2C221D-7D0B-46B3-9362-2D68F92ECF29}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.DotNet.Web.ItemTemplates", "src\ProjectTemplates\Web.ItemTemplates\Microsoft.DotNet.Web.ItemTemplates.csproj", "{D0E73F40-0DA9-42A9-8A88-EED8D5EFBEFB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.Web.ItemTemplates", "src\ProjectTemplates\Web.ItemTemplates\Microsoft.DotNet.Web.ItemTemplates.csproj", "{D0E73F40-0DA9-42A9-8A88-EED8D5EFBEFB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectTemplates.Tests", "src\ProjectTemplates\test\ProjectTemplates.Tests.csproj", "{6DE03095-7EAC-41DF-8AE4-3018ED29BC61}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProjectTemplates.Tests", "src\ProjectTemplates\test\ProjectTemplates.Tests.csproj", "{6DE03095-7EAC-41DF-8AE4-3018ED29BC61}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BlazorTemplates.Tests", "src\ProjectTemplates\BlazorTemplates.Tests\BlazorTemplates.Tests.csproj", "{18CE63FC-3BFE-47DF-A8D7-9D716FEB04C9}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlazorTemplates.Tests", "src\ProjectTemplates\BlazorTemplates.Tests\BlazorTemplates.Tests.csproj", "{18CE63FC-3BFE-47DF-A8D7-9D716FEB04C9}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Framework", "Framework", "{A4C26078-B6D8-4FD8-87A6-7C15A3482038}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "App.Runtime", "App.Runtime", "{F1A6BA04-853E-43B5-B27E-54558603837B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.App.Runtime", "src\Framework\App.Runtime\src\Microsoft.AspNetCore.App.Runtime.csproj", "{3163C56E-99BC-4BD1-8880-4F94A2407741}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.App.Runtime", "src\Framework\App.Runtime\src\Microsoft.AspNetCore.App.Runtime.csproj", "{3163C56E-99BC-4BD1-8880-4F94A2407741}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Razor.Test", "src\Razor\Razor\test\Microsoft.AspNetCore.Razor.Test.csproj", "{776BFCDC-8591-4E3D-BD0D-858A188A033D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Test", "src\Razor\Razor\test\Microsoft.AspNetCore.Razor.Test.csproj", "{776BFCDC-8591-4E3D-BD0D-858A188A033D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Razor.Runtime.Test", "src\Razor\Razor.Runtime\test\Microsoft.AspNetCore.Razor.Runtime.Test.csproj", "{ED34C082-619E-4CCB-9D26-4E2375633FA2}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Runtime.Test", "src\Razor\Razor.Runtime\test\Microsoft.AspNetCore.Razor.Runtime.Test.csproj", "{ED34C082-619E-4CCB-9D26-4E2375633FA2}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions", "Microsoft.AspNetCore.Mvc.Razor.Extensions", "{8BA59986-C9AA-4A78-BE18-0A344FB56D09}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions", "src\Razor\Microsoft.AspNetCore.Mvc.Razor.Extensions\src\Microsoft.AspNetCore.Mvc.Razor.Extensions.csproj", "{2FD6D363-367E-4AAF-BCFE-FC9C3B091B3E}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions", "src\Razor\Microsoft.AspNetCore.Mvc.Razor.Extensions\src\Microsoft.AspNetCore.Mvc.Razor.Extensions.csproj", "{2FD6D363-367E-4AAF-BCFE-FC9C3B091B3E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions.Test", "src\Razor\Microsoft.AspNetCore.Mvc.Razor.Extensions\test\Microsoft.AspNetCore.Mvc.Razor.Extensions.Test.csproj", "{6FCEE9BC-11C2-4790-8C13-DF81EBCD4E78}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions.Test", "src\Razor\Microsoft.AspNetCore.Mvc.Razor.Extensions\test\Microsoft.AspNetCore.Mvc.Razor.Extensions.Test.csproj", "{6FCEE9BC-11C2-4790-8C13-DF81EBCD4E78}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X", "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X", "{1125B180-D389-45A0-BCE5-15ED62EDCC20}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X", "src\Razor\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X\src\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X.csproj", "{1D628BD5-DC80-4E19-9DBB-58A9F58CF70D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X", "src\Razor\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X\src\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X.csproj", "{1D628BD5-DC80-4E19-9DBB-58A9F58CF70D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X.Test", "src\Razor\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X\test\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X.Test.csproj", "{FAA22AA9-CF42-4FAB-8C11-1A3B52546FE0}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X.Test", "src\Razor\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X\test\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X.Test.csproj", "{FAA22AA9-CF42-4FAB-8C11-1A3B52546FE0}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X", "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X", "{7114DBBC-4650-4C9C-8827-133F1FA8766F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X", "src\Razor\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X\src\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X.csproj", "{85797058-0416-4CCC-BBF2-DE8158EC3FED}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X", "src\Razor\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X\src\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X.csproj", "{85797058-0416-4CCC-BBF2-DE8158EC3FED}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X.Test", "src\Razor\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X\test\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X.Test.csproj", "{F48D6A08-FE52-4DDC-9232-E9693019763A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X.Test", "src\Razor\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X\test\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X.Test.csproj", "{F48D6A08-FE52-4DDC-9232-E9693019763A}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.AspNetCore.Razor.Language", "Microsoft.AspNetCore.Razor.Language", "{1CBCF1F9-D90D-484E-A2E9-FD4E4174C05E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Razor.Language", "src\Razor\Microsoft.AspNetCore.Razor.Language\src\Microsoft.AspNetCore.Razor.Language.csproj", "{A6323D64-C883-46B6-BDA9-916009D44262}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Language", "src\Razor\Microsoft.AspNetCore.Razor.Language\src\Microsoft.AspNetCore.Razor.Language.csproj", "{A6323D64-C883-46B6-BDA9-916009D44262}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Razor.Language.Test", "src\Razor\Microsoft.AspNetCore.Razor.Language\test\Microsoft.AspNetCore.Razor.Language.Test.csproj", "{313ADEF5-5A2D-4C11-8655-E227445144E2}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Language.Test", "src\Razor\Microsoft.AspNetCore.Razor.Language\test\Microsoft.AspNetCore.Razor.Language.Test.csproj", "{313ADEF5-5A2D-4C11-8655-E227445144E2}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.AspNetCore.Razor.Tools", "Microsoft.AspNetCore.Razor.Tools", "{B9704650-5360-416C-9393-FAF707766AA8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Razor.Tools", "src\Razor\Microsoft.AspNetCore.Razor.Tools\src\Microsoft.AspNetCore.Razor.Tools.csproj", "{4C84173F-5C1F-49A1-895A-C0CA11DE84B1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Tools", "src\Razor\Microsoft.AspNetCore.Razor.Tools\src\rzc.csproj", "{4C84173F-5C1F-49A1-895A-C0CA11DE84B1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Razor.Tools.Test", "src\Razor\Microsoft.AspNetCore.Razor.Tools\test\Microsoft.AspNetCore.Razor.Tools.Test.csproj", "{FE095F11-4CD2-406D-A2BB-1BE569603BF0}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Tools.Test", "src\Razor\Microsoft.AspNetCore.Razor.Tools\test\Microsoft.AspNetCore.Razor.Tools.Test.csproj", "{FE095F11-4CD2-406D-A2BB-1BE569603BF0}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.CodeAnalysis.Razor", "Microsoft.CodeAnalysis.Razor", "{3854EA4A-5530-4FEC-971E-B0CB45C5B19D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.CodeAnalysis.Razor", "src\Razor\Microsoft.CodeAnalysis.Razor\src\Microsoft.CodeAnalysis.Razor.csproj", "{AE06A841-F90D-486A-9DEF-70495DF4D28A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.CodeAnalysis.Razor", "src\Razor\Microsoft.CodeAnalysis.Razor\src\Microsoft.CodeAnalysis.Razor.csproj", "{AE06A841-F90D-486A-9DEF-70495DF4D28A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.CodeAnalysis.Razor.Test", "src\Razor\Microsoft.CodeAnalysis.Razor\test\Microsoft.CodeAnalysis.Razor.Test.csproj", "{91A6A69B-21B4-4B05-B188-D0551573DD9B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.CodeAnalysis.Razor.Test", "src\Razor\Microsoft.CodeAnalysis.Razor\test\Microsoft.CodeAnalysis.Razor.Test.csproj", "{91A6A69B-21B4-4B05-B188-D0551573DD9B}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{F6E6A63A-45BE-46BF-B9B4-DA3DDC8FE4B5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Razor.Internal.Transport", "src\Razor\tools\Microsoft.AspNetCore.Razor.Internal.Transport\Microsoft.AspNetCore.Razor.Internal.Transport.csproj", "{C3E588B7-AF20-448E-BAF0-D47C29B2E4B0}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Internal.Transport", "src\Razor\tools\Microsoft.AspNetCore.Razor.Internal.Transport\Microsoft.AspNetCore.Razor.Internal.Transport.csproj", "{C3E588B7-AF20-448E-BAF0-D47C29B2E4B0}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RazorSyntaxGenerator", "src\Razor\tools\RazorSyntaxGenerator\RazorSyntaxGenerator.csproj", "{8B37B987-B7A2-4A26-8CF1-7AC1E9FA7ADC}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorSyntaxGenerator", "src\Razor\tools\RazorSyntaxGenerator\RazorSyntaxGenerator.csproj", "{8B37B987-B7A2-4A26-8CF1-7AC1E9FA7ADC}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "perf", "perf", "{D510860C-B2DA-41D3-9137-81B029312E71}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Razor.Performance", "src\Razor\perf\Microsoft.AspNetCore.Razor.Performance\Microsoft.AspNetCore.Razor.Performance.csproj", "{8ED505A5-A33A-401E-89BA-3AED7B73DD6A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Performance", "src\Razor\perf\Microsoft.AspNetCore.Razor.Performance\Microsoft.AspNetCore.Razor.Performance.csproj", "{8ED505A5-A33A-401E-89BA-3AED7B73DD6A}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.NET.Sdk.Razor", "Microsoft.NET.Sdk.Razor", "{DA9E1AB0-0094-4777-BF3F-BC5596C3CDA9}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.NET.Sdk.Razor", "src\Razor\Microsoft.NET.Sdk.Razor\src\Microsoft.NET.Sdk.Razor.csproj", "{44B3F6C4-0F65-4649-B4CF-6CDC2094E061}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.NET.Sdk.Razor", "src\Razor\Microsoft.NET.Sdk.Razor\src\Microsoft.NET.Sdk.Razor.csproj", "{44B3F6C4-0F65-4649-B4CF-6CDC2094E061}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.NET.Sdk.Razor.Test", "src\Razor\Microsoft.NET.Sdk.Razor\test\Microsoft.NET.Sdk.Razor.Test.csproj", "{7CB23DCD-B416-4293-9848-224077F9E71D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.NET.Sdk.Razor.Test", "src\Razor\Microsoft.NET.Sdk.Razor\test\Microsoft.NET.Sdk.Razor.Test.csproj", "{7CB23DCD-B416-4293-9848-224077F9E71D}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{06C916C7-67BF-45DC-9D0B-CEEF0C731451}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Razor.Test.Common", "src\Razor\test\Microsoft.AspNetCore.Razor.Test.Common\Microsoft.AspNetCore.Razor.Test.Common.csproj", "{69637901-CAD7-4335-81F4-92E03C4DA354}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Test.Common", "src\Razor\test\Microsoft.AspNetCore.Razor.Test.Common\Microsoft.AspNetCore.Razor.Test.Common.csproj", "{69637901-CAD7-4335-81F4-92E03C4DA354}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Razor.Test.ComponentShim", "src\Razor\test\Microsoft.AspNetCore.Razor.Test.ComponentShim\Microsoft.AspNetCore.Razor.Test.ComponentShim.csproj", "{ED060C25-B7B2-414B-BDC7-A77FA0269C9F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Test.ComponentShim", "src\Razor\test\Microsoft.AspNetCore.Razor.Test.ComponentShim\Microsoft.AspNetCore.Razor.Test.ComponentShim.csproj", "{ED060C25-B7B2-414B-BDC7-A77FA0269C9F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Razor.Test.MvcShim", "src\Razor\test\Microsoft.AspNetCore.Razor.Test.MvcShim\Microsoft.AspNetCore.Razor.Test.MvcShim.csproj", "{4C152E79-DF16-4CAA-A98D-1A46604C6D22}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Test.MvcShim", "src\Razor\test\Microsoft.AspNetCore.Razor.Test.MvcShim\Microsoft.AspNetCore.Razor.Test.MvcShim.csproj", "{4C152E79-DF16-4CAA-A98D-1A46604C6D22}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Razor.Test.MvcShim.ClassLib", "src\Razor\test\Microsoft.AspNetCore.Razor.Test.MvcShim.ClassLib\Microsoft.AspNetCore.Razor.Test.MvcShim.ClassLib.csproj", "{F8111E2B-650F-4A9A-9834-234B5F5DD79D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Test.MvcShim.ClassLib", "src\Razor\test\Microsoft.AspNetCore.Razor.Test.MvcShim.ClassLib\Microsoft.AspNetCore.Razor.Test.MvcShim.ClassLib.csproj", "{F8111E2B-650F-4A9A-9834-234B5F5DD79D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Razor.Test.MvcShim.Version1_X", "src\Razor\test\Microsoft.AspNetCore.Razor.Test.MvcShim.Version1_X\Microsoft.AspNetCore.Razor.Test.MvcShim.Version1_X.csproj", "{302EC23A-FD11-4F56-B3E9-0DEC7C177584}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Test.MvcShim.Version1_X", "src\Razor\test\Microsoft.AspNetCore.Razor.Test.MvcShim.Version1_X\Microsoft.AspNetCore.Razor.Test.MvcShim.Version1_X.csproj", "{302EC23A-FD11-4F56-B3E9-0DEC7C177584}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Razor.Test.MvcShim.Version2_X", "src\Razor\test\Microsoft.AspNetCore.Razor.Test.MvcShim.Version2_X\Microsoft.AspNetCore.Razor.Test.MvcShim.Version2_X.csproj", "{2A3B2388-F9F3-4F28-B008-2CD7862A86C4}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Test.MvcShim.Version2_X", "src\Razor\test\Microsoft.AspNetCore.Razor.Test.MvcShim.Version2_X\Microsoft.AspNetCore.Razor.Test.MvcShim.Version2_X.csproj", "{2A3B2388-F9F3-4F28-B008-2CD7862A86C4}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.NET.Sdk.Razor.IntegrationTests", "src\Razor\Microsoft.NET.Sdk.Razor\integrationtests\Microsoft.NET.Sdk.Razor.IntegrationTests.csproj", "{930CB054-3E69-4721-9F7E-01FB911AAF6A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.NET.Sdk.Razor.IntegrationTests", "src\Razor\Microsoft.NET.Sdk.Razor\integrationtests\Microsoft.NET.Sdk.Razor.IntegrationTests.csproj", "{930CB054-3E69-4721-9F7E-01FB911AAF6A}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{CF9D35EC-CA9B-481D-BAAC-5D4654732AB9}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AuthSamples.FunctionalTests", "src\Security\test\AuthSamples.FunctionalTests\AuthSamples.FunctionalTests.csproj", "{31B7D2B1-47AF-432B-BF07-73916EF238EE}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AuthSamples.FunctionalTests", "src\Security\test\AuthSamples.FunctionalTests\AuthSamples.FunctionalTests.csproj", "{31B7D2B1-47AF-432B-BF07-73916EF238EE}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{C75B1FB3-6BB7-411A-B76C-06E5E0C3D957}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cookies", "src\Security\samples\Cookies\Cookies.csproj", "{A2A2BBB7-990D-4EDE-BDF7-C8AD5C67E5F9}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cookies", "src\Security\samples\Cookies\Cookies.csproj", "{A2A2BBB7-990D-4EDE-BDF7-C8AD5C67E5F9}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClaimsTransformation", "src\Security\samples\ClaimsTransformation\ClaimsTransformation.csproj", "{1EA4C71B-CF8C-45A4-90A9-2F7F78A94173}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ClaimsTransformation", "src\Security\samples\ClaimsTransformation\ClaimsTransformation.csproj", "{1EA4C71B-CF8C-45A4-90A9-2F7F78A94173}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DynamicSchemes", "src\Security\samples\DynamicSchemes\DynamicSchemes.csproj", "{256DCEBC-1E1D-46B2-9031-E358E850F3C5}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DynamicSchemes", "src\Security\samples\DynamicSchemes\DynamicSchemes.csproj", "{256DCEBC-1E1D-46B2-9031-E358E850F3C5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Identity.ExternalClaims", "src\Security\samples\Identity.ExternalClaims\Identity.ExternalClaims.csproj", "{1D1E165C-435A-4716-8769-31A51632D7C2}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Identity.ExternalClaims", "src\Security\samples\Identity.ExternalClaims\Identity.ExternalClaims.csproj", "{1D1E165C-435A-4716-8769-31A51632D7C2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PathSchemeSelection", "src\Security\samples\PathSchemeSelection\PathSchemeSelection.csproj", "{AD25BD40-D6D6-4D82-A700-FE2376EE27A8}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PathSchemeSelection", "src\Security\samples\PathSchemeSelection\PathSchemeSelection.csproj", "{AD25BD40-D6D6-4D82-A700-FE2376EE27A8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CustomPolicyProvider", "src\Security\samples\CustomPolicyProvider\CustomPolicyProvider.csproj", "{817D138C-19D8-4264-8FAF-660B05AC030D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CustomPolicyProvider", "src\Security\samples\CustomPolicyProvider\CustomPolicyProvider.csproj", "{817D138C-19D8-4264-8FAF-660B05AC030D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StaticFilesAuth", "src\Security\samples\StaticFilesAuth\StaticFilesAuth.csproj", "{1FE68FDC-F122-4605-B49D-FDC8C17324A5}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StaticFilesAuth", "src\Security\samples\StaticFilesAuth\StaticFilesAuth.csproj", "{1FE68FDC-F122-4605-B49D-FDC8C17324A5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CustomAuthorizationFailureResponse", "src\Security\samples\CustomAuthorizationFailureResponse\CustomAuthorizationFailureResponse.csproj", "{C4CE88C8-1E48-49FC-A344-D6EE92FC9894}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CustomAuthorizationFailureResponse", "src\Security\samples\CustomAuthorizationFailureResponse\CustomAuthorizationFailureResponse.csproj", "{C4CE88C8-1E48-49FC-A344-D6EE92FC9894}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.CookiePolicy.Test", "src\Security\CookiePolicy\test\Microsoft.AspNetCore.CookiePolicy.Test.csproj", "{45A7FB48-3811-4DAF-989C-141EE4AEFB03}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.CookiePolicy.Test", "src\Security\CookiePolicy\test\Microsoft.AspNetCore.CookiePolicy.Test.csproj", "{45A7FB48-3811-4DAF-989C-141EE4AEFB03}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{A75C9764-FC22-4AE1-9704-5519CB556FC3}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CookiePolicySample", "src\Security\CookiePolicy\samples\CookiePolicySample\CookiePolicySample.csproj", "{86741306-CF87-4AEA-9015-188A3CECBFBC}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CookiePolicySample", "src\Security\CookiePolicy\samples\CookiePolicySample\CookiePolicySample.csproj", "{86741306-CF87-4AEA-9015-188A3CECBFBC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Authorization.Test", "src\Security\Authorization\test\Microsoft.AspNetCore.Authorization.Test.csproj", "{2FBBC39E-DA8E-4B92-9A0D-3DF6D5BA9EAC}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authorization.Test", "src\Security\Authorization\test\Microsoft.AspNetCore.Authorization.Test.csproj", "{2FBBC39E-DA8E-4B92-9A0D-3DF6D5BA9EAC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Authentication.Test", "src\Security\Authentication\test\Microsoft.AspNetCore.Authentication.Test.csproj", "{6592343C-B7B7-4687-8942-1C2241414A02}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Test", "src\Security\Authentication\test\Microsoft.AspNetCore.Authentication.Test.csproj", "{6592343C-B7B7-4687-8942-1C2241414A02}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{618D85A4-F111-41AB-A9B6-BBBB8A395209}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SocialSample", "src\Security\Authentication\samples\SocialSample\SocialSample.csproj", "{DA64A7BF-F869-414C-A096-076723E55C61}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SocialSample", "src\Security\Authentication\samples\SocialSample\SocialSample.csproj", "{DA64A7BF-F869-414C-A096-076723E55C61}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{974EA46A-4658-4767-A9AA-A0FF143CF725}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CookieSample", "src\Security\Authentication\Cookies\samples\CookieSample\CookieSample.csproj", "{06C034BE-0079-4AC3-815B-D71AC44DF3A3}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CookieSample", "src\Security\Authentication\Cookies\samples\CookieSample\CookieSample.csproj", "{06C034BE-0079-4AC3-815B-D71AC44DF3A3}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CookieSessionSample", "src\Security\Authentication\Cookies\samples\CookieSessionSample\CookieSessionSample.csproj", "{9DD484F7-062B-43D4-AC70-0E226BA168FF}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CookieSessionSample", "src\Security\Authentication\Cookies\samples\CookieSessionSample\CookieSessionSample.csproj", "{9DD484F7-062B-43D4-AC70-0E226BA168FF}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{7FD32066-C831-4E29-978C-9A2215E85C67}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JwtBearerSample", "src\Security\Authentication\JwtBearer\samples\JwtBearerSample\JwtBearerSample.csproj", "{88C2C45B-ED16-4B85-8498-E3F13679629D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JwtBearerSample", "src\Security\Authentication\JwtBearer\samples\JwtBearerSample\JwtBearerSample.csproj", "{88C2C45B-ED16-4B85-8498-E3F13679629D}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{E19E55A2-1562-47A7-8EA6-B51F2CA0CC4C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenIdConnect.AzureAdSample", "src\Security\Authentication\OpenIdConnect\samples\OpenIdConnect.AzureAdSample\OpenIdConnect.AzureAdSample.csproj", "{E3867FCF-70D3-40B0-BCF6-208D4D971666}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenIdConnect.AzureAdSample", "src\Security\Authentication\OpenIdConnect\samples\OpenIdConnect.AzureAdSample\OpenIdConnect.AzureAdSample.csproj", "{E3867FCF-70D3-40B0-BCF6-208D4D971666}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenIdConnectSample", "src\Security\Authentication\OpenIdConnect\samples\OpenIdConnectSample\OpenIdConnectSample.csproj", "{F6B80862-7D74-4362-B5E2-AEBF116F2B19}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenIdConnectSample", "src\Security\Authentication\OpenIdConnect\samples\OpenIdConnectSample\OpenIdConnectSample.csproj", "{F6B80862-7D74-4362-B5E2-AEBF116F2B19}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WsFederation", "WsFederation", "{602CE06C-E973-401D-8877-90957E613646}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{BECDA951-C285-485D-BFE6-F770BC8C9EB2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WsFedSample", "src\Security\Authentication\WsFederation\samples\WsFedSample\WsFedSample.csproj", "{E1CE011A-47BD-496D-B9EB-2766C198A619}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WsFedSample", "src\Security\Authentication\WsFederation\samples\WsFedSample\WsFedSample.csproj", "{E1CE011A-47BD-496D-B9EB-2766C198A619}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Authentication.WsFederation", "src\Security\Authentication\WsFederation\src\Microsoft.AspNetCore.Authentication.WsFederation.csproj", "{3BB0B48C-4ED8-48C2-B8DF-8B92354CAFB5}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.WsFederation", "src\Security\Authentication\WsFederation\src\Microsoft.AspNetCore.Authentication.WsFederation.csproj", "{3BB0B48C-4ED8-48C2-B8DF-8B92354CAFB5}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "benchmarks", "benchmarks", "{966E6A8A-4D9C-4B9E-92DB-06F5144F5DC8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Security.Performance", "src\Security\benchmarks\Microsoft.AspNetCore.Security.Performance\Microsoft.AspNetCore.Security.Performance.csproj", "{9819CE5A-0E8F-42C4-B628-F6B3A1B2550F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Security.Performance", "src\Security\benchmarks\Microsoft.AspNetCore.Security.Performance\Microsoft.AspNetCore.Security.Performance.csproj", "{9819CE5A-0E8F-42C4-B628-F6B3A1B2550F}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Negotiate", "Negotiate", "{3FE077EF-DD37-4652-B71C-3174D4C485E2}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{A641BE9F-113E-4F2F-8DC0-995E97C5BD27}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NegotiateAuthSample", "src\Security\Authentication\Negotiate\Samples\NegotiateAuthSample\NegotiateAuthSample.csproj", "{7F67C1C2-7352-414F-9149-1F16D53C7435}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NegotiateAuthSample", "src\Security\Authentication\Negotiate\Samples\NegotiateAuthSample\NegotiateAuthSample.csproj", "{7F67C1C2-7352-414F-9149-1F16D53C7435}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Authentication.Negotiate", "src\Security\Authentication\Negotiate\src\Microsoft.AspNetCore.Authentication.Negotiate.csproj", "{046AFDDE-B31B-4205-B059-0E8E194E954D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Negotiate", "src\Security\Authentication\Negotiate\src\Microsoft.AspNetCore.Authentication.Negotiate.csproj", "{046AFDDE-B31B-4205-B059-0E8E194E954D}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{0AEE12FF-FDFF-4A75-A77E-93B1E24E5587}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Authentication.Negotiate.Test", "src\Security\Authentication\Negotiate\test\Negotiate.Test\Microsoft.AspNetCore.Authentication.Negotiate.Test.csproj", "{3FBD8F55-38A8-4263-A98D-AD723C6D9C44}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Negotiate.Test", "src\Security\Authentication\Negotiate\test\Negotiate.Test\Microsoft.AspNetCore.Authentication.Negotiate.Test.csproj", "{3FBD8F55-38A8-4263-A98D-AD723C6D9C44}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Authentication.Negotiate.FunctionalTest", "src\Security\Authentication\Negotiate\test\Negotiate.FunctionalTest\Microsoft.AspNetCore.Authentication.Negotiate.FunctionalTest.csproj", "{7E4C524F-94E1-4F7F-9498-FD503BC97CEF}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Negotiate.FunctionalTest", "src\Security\Authentication\Negotiate\test\Negotiate.FunctionalTest\Microsoft.AspNetCore.Authentication.Negotiate.FunctionalTest.csproj", "{7E4C524F-94E1-4F7F-9498-FD503BC97CEF}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Certificate", "Certificate", "{8A241C1B-18FA-4237-A354-29D7010C1067}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Authentication.Certificate", "src\Security\Authentication\Certificate\src\Microsoft.AspNetCore.Authentication.Certificate.csproj", "{119D3F97-535C-45BF-AC4C-FEDFE0FA5D7E}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Certificate", "src\Security\Authentication\Certificate\src\Microsoft.AspNetCore.Authentication.Certificate.csproj", "{119D3F97-535C-45BF-AC4C-FEDFE0FA5D7E}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{148D77C2-C6DA-45FA-90A6-761EE01066D5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Certificate.Sample", "src\Security\Authentication\Certificate\samples\Certificate.Sample\Certificate.Sample.csproj", "{A43BC0BA-9C01-4AEC-B763-5E5AA8C8DBAB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Certificate.Sample", "src\Security\Authentication\Certificate\samples\Certificate.Sample\Certificate.Sample.csproj", "{A43BC0BA-9C01-4AEC-B763-5E5AA8C8DBAB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Certificate.Optional.Sample", "src\Security\Authentication\Certificate\samples\Certificate.Optional.Sample\Certificate.Optional.Sample.csproj", "{451FF6F1-E6B4-42FF-A8AA-2731F3C4CCF4}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Certificate.Optional.Sample", "src\Security\Authentication\Certificate\samples\Certificate.Optional.Sample\Certificate.Optional.Sample.csproj", "{451FF6F1-E6B4-42FF-A8AA-2731F3C4CCF4}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{5F0044F2-4C66-46A8-BD79-075F001AA034}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{7BAE6185-D148-4388-B65F-34FD22CCD824}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Shared.Tests", "src\Shared\test\Shared.Tests\Microsoft.AspNetCore.Shared.Tests.csproj", "{197EB396-53AA-4C29-8A59-3FEACD3703B6}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Shared.Tests", "src\Shared\test\Shared.Tests\Microsoft.AspNetCore.Shared.Tests.csproj", "{197EB396-53AA-4C29-8A59-3FEACD3703B6}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{3E3F7422-36C0-47E4-8B4E-052C2E8EB439}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SignalRSamples", "src\SignalR\samples\SignalRSamples\SignalRSamples.csproj", "{7A88CF78-413B-4EC7-A2E5-853C7E8075A5}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignalRSamples", "src\SignalR\samples\SignalRSamples\SignalRSamples.csproj", "{7A88CF78-413B-4EC7-A2E5-853C7E8075A5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SocialWeather", "src\SignalR\samples\SocialWeather\SocialWeather.csproj", "{0D162D66-86E8-40AA-84EA-AA1EDA2482BC}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SocialWeather", "src\SignalR\samples\SocialWeather\SocialWeather.csproj", "{0D162D66-86E8-40AA-84EA-AA1EDA2482BC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClientSample", "src\SignalR\samples\ClientSample\ClientSample.csproj", "{294EC05D-B818-4CD5-AF6E-95B3F23607FC}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ClientSample", "src\SignalR\samples\ClientSample\ClientSample.csproj", "{294EC05D-B818-4CD5-AF6E-95B3F23607FC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebSocketSample", "src\SignalR\samples\WebSocketSample\WebSocketSample.csproj", "{892333B9-689B-4E51-82FF-CC5376961A36}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebSocketSample", "src\SignalR\samples\WebSocketSample\WebSocketSample.csproj", "{892333B9-689B-4E51-82FF-CC5376961A36}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JwtClientSample", "src\SignalR\samples\JwtClientSample\JwtClientSample.csproj", "{4D4CB590-9F66-4D75-B439-D3B445975A55}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JwtClientSample", "src\SignalR\samples\JwtClientSample\JwtClientSample.csproj", "{4D4CB590-9F66-4D75-B439-D3B445975A55}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ts", "ts", "{3D423A77-84D4-4214-8F6F-CD532A56A126}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SignalR.Client.FunctionalTestApp", "src\SignalR\clients\ts\FunctionalTests\SignalR.Client.FunctionalTestApp.csproj", "{4C8F04E9-24EC-496B-88FA-62DE096F1C3D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignalR.Client.FunctionalTestApp", "src\SignalR\clients\ts\FunctionalTests\SignalR.Client.FunctionalTestApp.csproj", "{4C8F04E9-24EC-496B-88FA-62DE096F1C3D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JwtSample", "src\SignalR\samples\JwtSample\JwtSample.csproj", "{257A6551-7987-4C5C-BE6F-376094477371}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JwtSample", "src\SignalR\samples\JwtSample\JwtSample.csproj", "{257A6551-7987-4C5C-BE6F-376094477371}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{350A2B0C-246F-4CC1-A194-32DF8C4427A2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.SignalR.Client.FunctionalTests", "src\SignalR\clients\csharp\Client\test\FunctionalTests\Microsoft.AspNetCore.SignalR.Client.FunctionalTests.csproj", "{5236B5B7-E2CD-4D20-A65C-D5803E78885F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Client.FunctionalTests", "src\SignalR\clients\csharp\Client\test\FunctionalTests\Microsoft.AspNetCore.SignalR.Client.FunctionalTests.csproj", "{5236B5B7-E2CD-4D20-A65C-D5803E78885F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.SignalR.Client.Tests", "src\SignalR\clients\csharp\Client\test\UnitTests\Microsoft.AspNetCore.SignalR.Client.Tests.csproj", "{CACBB755-08B6-4176-9390-CAD3F9962E80}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Client.Tests", "src\SignalR\clients\csharp\Client\test\UnitTests\Microsoft.AspNetCore.SignalR.Client.Tests.csproj", "{CACBB755-08B6-4176-9390-CAD3F9962E80}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Http.Connections.Tests", "src\SignalR\common\Http.Connections\test\Microsoft.AspNetCore.Http.Connections.Tests.csproj", "{B84D149A-3DD6-47EA-B78E-D36EF2379D6B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Connections.Tests", "src\SignalR\common\Http.Connections\test\Microsoft.AspNetCore.Http.Connections.Tests.csproj", "{B84D149A-3DD6-47EA-B78E-D36EF2379D6B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.SignalR.Common.Tests", "src\SignalR\common\SignalR.Common\test\Microsoft.AspNetCore.SignalR.Common.Tests.csproj", "{75F3739D-9404-44B0-8F1F-1BDE4542047A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Common.Tests", "src\SignalR\common\SignalR.Common\test\Microsoft.AspNetCore.SignalR.Common.Tests.csproj", "{75F3739D-9404-44B0-8F1F-1BDE4542047A}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "perf", "perf", "{5095E70C-6DEE-486E-A9D0-E8849214EE4E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.SignalR.Microbenchmarks", "src\SignalR\perf\Microbenchmarks\Microsoft.AspNetCore.SignalR.Microbenchmarks.csproj", "{A6A95BEF-7E21-4D3D-921B-F77267219D27}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Microbenchmarks", "src\SignalR\perf\Microbenchmarks\Microsoft.AspNetCore.SignalR.Microbenchmarks.csproj", "{A6A95BEF-7E21-4D3D-921B-F77267219D27}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.SignalR.Tests", "src\SignalR\server\SignalR\test\Microsoft.AspNetCore.SignalR.Tests.csproj", "{4DC9C494-9867-4319-937E-5FBC0E5F5A51}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Tests", "src\SignalR\server\SignalR\test\Microsoft.AspNetCore.SignalR.Tests.csproj", "{4DC9C494-9867-4319-937E-5FBC0E5F5A51}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Specification.Tests", "Specification.Tests", "{245939DA-D68D-4B5C-A95E-D3B6923614FF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.SignalR.Specification.Tests", "src\SignalR\server\Specification.Tests\src\Microsoft.AspNetCore.SignalR.Specification.Tests.csproj", "{39CB00C0-D775-4DEC-BEAA-94234BA8A1FE}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Specification.Tests", "src\SignalR\server\Specification.Tests\src\Microsoft.AspNetCore.SignalR.Specification.Tests.csproj", "{39CB00C0-D775-4DEC-BEAA-94234BA8A1FE}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StackExchangeRedis", "StackExchangeRedis", "{CD9041EE-8C47-4C6F-8A21-6EDCBC0D409E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.SignalR.StackExchangeRedis", "src\SignalR\server\StackExchangeRedis\src\Microsoft.AspNetCore.SignalR.StackExchangeRedis.csproj", "{DEA32B7F-E9B4-4E87-8B47-30555D286D93}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.StackExchangeRedis", "src\SignalR\server\StackExchangeRedis\src\Microsoft.AspNetCore.SignalR.StackExchangeRedis.csproj", "{DEA32B7F-E9B4-4E87-8B47-30555D286D93}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.SignalR.StackExchangeRedis.Tests", "src\SignalR\server\StackExchangeRedis\test\Microsoft.AspNetCore.SignalR.StackExchangeRedis.Tests.csproj", "{6248B017-2912-4989-9994-2685C4D88E9A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.StackExchangeRedis.Tests", "src\SignalR\server\StackExchangeRedis\test\Microsoft.AspNetCore.SignalR.StackExchangeRedis.Tests.csproj", "{6248B017-2912-4989-9994-2685C4D88E9A}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WebEncoders", "WebEncoders", "{4C93CC04-1EE4-48EA-8FAE-DC2283528BEB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Extensions.WebEncoders", "src\WebEncoders\src\Microsoft.Extensions.WebEncoders.csproj", "{AA2F0EF8-FB46-4F05-89D4-025F348ABDD2}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.WebEncoders", "src\WebEncoders\src\Microsoft.Extensions.WebEncoders.csproj", "{AA2F0EF8-FB46-4F05-89D4-025F348ABDD2}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "FileProviders", "FileProviders", "{FED63417-432B-49CD-AB4B-44ADA837C2E7}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Embedded", "Embedded", "{898F7E0B-1671-42CB-9DFB-689AFF212ED3}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Extensions.FileProviders.Embedded", "src\FileProviders\Embedded\src\Microsoft.Extensions.FileProviders.Embedded.csproj", "{65EE0531-4533-407F-A9CA-2EBCDC444397}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.FileProviders.Embedded", "src\FileProviders\Embedded\src\Microsoft.Extensions.FileProviders.Embedded.csproj", "{65EE0531-4533-407F-A9CA-2EBCDC444397}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{0B200A66-B809-4ED3-A790-CB1C2E80975E}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dotnet-watch", "dotnet-watch", "{B6118E15-C37A-4B05-B4DF-97FE99790417}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "dotnet-watch", "src\Tools\dotnet-watch\src\dotnet-watch.csproj", "{D0ADA8EC-F431-43C8-A86E-FE6A1E906512}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-watch", "src\Tools\dotnet-watch\src\dotnet-watch.csproj", "{D0ADA8EC-F431-43C8-A86E-FE6A1E906512}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "dotnet-watch.Tests", "src\Tools\dotnet-watch\test\dotnet-watch.Tests.csproj", "{95920BAA-46E6-44E6-A1AF-A23804F079D2}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-watch.Tests", "src\Tools\dotnet-watch\test\dotnet-watch.Tests.csproj", "{95920BAA-46E6-44E6-A1AF-A23804F079D2}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dotnet-dev-certs", "dotnet-dev-certs", "{A4EECF29-6E66-4E7F-B781-A169B0C2AB29}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "dotnet-dev-certs", "src\Tools\dotnet-dev-certs\src\dotnet-dev-certs.csproj", "{52433D20-35EA-48CC-BB4A-4DFE3023670B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-dev-certs", "src\Tools\dotnet-dev-certs\src\dotnet-dev-certs.csproj", "{52433D20-35EA-48CC-BB4A-4DFE3023670B}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dotnet-sql-cache", "dotnet-sql-cache", "{8562A154-B802-411B-897C-89621C4B05CB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "dotnet-sql-cache", "src\Tools\dotnet-sql-cache\src\dotnet-sql-cache.csproj", "{C911DC19-9556-4DCC-9794-AD907137348F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-sql-cache", "src\Tools\dotnet-sql-cache\src\dotnet-sql-cache.csproj", "{C911DC19-9556-4DCC-9794-AD907137348F}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dotnet-user-secrets", "dotnet-user-secrets", "{F31AC68C-2D71-492C-BA4B-41FE503FFD56}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "dotnet-user-secrets", "src\Tools\dotnet-user-secrets\src\dotnet-user-secrets.csproj", "{4E6AFAD6-C0B7-47AD-8C16-D903CCA4AE73}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-user-secrets", "src\Tools\dotnet-user-secrets\src\dotnet-user-secrets.csproj", "{4E6AFAD6-C0B7-47AD-8C16-D903CCA4AE73}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "dotnet-user-secrets.Tests", "src\Tools\dotnet-user-secrets\test\dotnet-user-secrets.Tests.csproj", "{4FB3DFA0-3124-474B-A908-694DF4FC1ABB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-user-secrets.Tests", "src\Tools\dotnet-user-secrets\test\dotnet-user-secrets.Tests.csproj", "{4FB3DFA0-3124-474B-A908-694DF4FC1ABB}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.dotnet-openapi", "Microsoft.dotnet-openapi", "{192363C9-2D7B-47BD-A1A3-C6FEC6DF5D9D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.dotnet-openapi", "src\Tools\Microsoft.dotnet-openapi\src\Microsoft.dotnet-openapi.csproj", "{4655E193-E5F4-449B-B1A3-6358AC8D3A27}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.dotnet-openapi", "src\Tools\Microsoft.dotnet-openapi\src\Microsoft.dotnet-openapi.csproj", "{4655E193-E5F4-449B-B1A3-6358AC8D3A27}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "dotnet-microsoft.openapi.Tests", "src\Tools\Microsoft.dotnet-openapi\test\dotnet-microsoft.openapi.Tests.csproj", "{7A29AAAB-2B4B-4D47-A315-23A0E830E214}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-microsoft.openapi.Tests", "src\Tools\Microsoft.dotnet-openapi\test\dotnet-microsoft.openapi.Tests.csproj", "{7A29AAAB-2B4B-4D47-A315-23A0E830E214}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions.ApiDescription.Client", "Extensions.ApiDescription.Client", "{755D9C6A-F036-4122-8334-96F0CC70F370}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Extensions.ApiDescription.Client", "src\Tools\Extensions.ApiDescription.Client\src\Microsoft.Extensions.ApiDescription.Client.csproj", "{AB8C9BF4-3134-449B-BA3F-BAFDE9394491}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.ApiDescription.Client", "src\Tools\Extensions.ApiDescription.Client\src\Microsoft.Extensions.ApiDescription.Client.csproj", "{AB8C9BF4-3134-449B-BA3F-BAFDE9394491}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dotnet-getdocument", "dotnet-getdocument", "{3CE23673-047A-47AA-A028-7F2942805870}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "dotnet-getdocument", "src\Tools\dotnet-getdocument\src\dotnet-getdocument.csproj", "{7B1E6D8C-2658-4FD2-8BB2-672E9E56872F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-getdocument", "src\Tools\dotnet-getdocument\src\dotnet-getdocument.csproj", "{7B1E6D8C-2658-4FD2-8BB2-672E9E56872F}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions.ApiDescription.Server", "Extensions.ApiDescription.Server", "{BE2C2FE4-7BC7-4A4B-A8B8-19FF0648DEFD}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Extensions.ApiDescription.Server", "src\Tools\Extensions.ApiDescription.Server\src\Microsoft.Extensions.ApiDescription.Server.csproj", "{EBE144DD-577E-4E98-BFEB-94E479753927}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.ApiDescription.Server", "src\Tools\Extensions.ApiDescription.Server\src\Microsoft.Extensions.ApiDescription.Server.csproj", "{EBE144DD-577E-4E98-BFEB-94E479753927}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GetDocumentInsider", "GetDocumentInsider", "{A1B75FC7-A777-4412-A635-D0C9ED8FE7A0}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GetDocumentInsider", "src\Tools\GetDocumentInsider\src\GetDocumentInsider.csproj", "{DD63EA3C-929C-48FF-8E8A-8F3CC553E93B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GetDocumentInsider", "src\Tools\GetDocumentInsider\src\GetDocument.Insider.csproj", "{DD63EA3C-929C-48FF-8E8A-8F3CC553E93B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Extensions.ApiDescription.Client.Tests", "src\Tools\Extensions.ApiDescription.Client\test\Microsoft.Extensions.ApiDescription.Client.Tests.csproj", "{34E40892-48C1-4D3D-AB49-FAC3C4C00B42}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.ApiDescription.Client.Tests", "src\Tools\Extensions.ApiDescription.Client\test\Microsoft.Extensions.ApiDescription.Client.Tests.csproj", "{34E40892-48C1-4D3D-AB49-FAC3C4C00B42}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "FirstRunCertGenerator", "FirstRunCertGenerator", "{E5BE8CB1-57A8-48FD-9904-76A8C6B540BC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.DeveloperCertificates.XPlat.Tests", "src\Tools\FirstRunCertGenerator\test\Microsoft.AspNetCore.DeveloperCertificates.XPlat.Tests.csproj", "{A8A42FB4-1B51-4290-9291-445D3A489758}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DeveloperCertificates.XPlat.Tests", "src\Tools\FirstRunCertGenerator\test\Microsoft.AspNetCore.DeveloperCertificates.XPlat.Tests.csproj", "{A8A42FB4-1B51-4290-9291-445D3A489758}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.DeveloperCertificates.XPlat", "src\Tools\FirstRunCertGenerator\src\Microsoft.AspNetCore.DeveloperCertificates.XPlat.csproj", "{3C8D5C14-F27B-4657-93C2-AC0E94EE683F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DeveloperCertificates.XPlat", "src\Tools\FirstRunCertGenerator\src\Microsoft.AspNetCore.DeveloperCertificates.XPlat.csproj", "{3C8D5C14-F27B-4657-93C2-AC0E94EE683F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.JsonPatch.Tests", "src\Features\JsonPatch\test\Microsoft.AspNetCore.JsonPatch.Tests.csproj", "{9883418F-C427-426E-9021-E3F1BAF33E6B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.JsonPatch.Tests", "src\Features\JsonPatch\test\Microsoft.AspNetCore.JsonPatch.Tests.csproj", "{9883418F-C427-426E-9021-E3F1BAF33E6B}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{49016328-4D32-46E4-A4D2-94686ED38EA2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestClient", "src\Servers\HttpSys\samples\TestClient\TestClient.csproj", "{A34041A8-20B9-4DE8-B336-8A900BDAD4EF}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestClient", "src\Servers\HttpSys\samples\TestClient\TestClient.csproj", "{A34041A8-20B9-4DE8-B336-8A900BDAD4EF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SelfHostServer", "src\Servers\HttpSys\samples\SelfHostServer\SelfHostServer.csproj", "{31405D54-645D-490B-9041-88119D8B1B47}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SelfHostServer", "src\Servers\HttpSys\samples\SelfHostServer\SelfHostServer.csproj", "{31405D54-645D-490B-9041-88119D8B1B47}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotAddSample", "src\Servers\HttpSys\samples\HotAddSample\HotAddSample.csproj", "{689FE2B6-EDEE-477D-9F4F-91B0B2E73F4D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotAddSample", "src\Servers\HttpSys\samples\HotAddSample\HotAddSample.csproj", "{689FE2B6-EDEE-477D-9F4F-91B0B2E73F4D}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{C3722C5D-E159-4AB3-AF60-769185B31B47}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Server.HttpSys.FunctionalTests", "src\Servers\HttpSys\test\FunctionalTests\Microsoft.AspNetCore.Server.HttpSys.FunctionalTests.csproj", "{10959BB7-197C-4DE1-A2F2-CA9445E3591F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.HttpSys.FunctionalTests", "src\Servers\HttpSys\test\FunctionalTests\Microsoft.AspNetCore.Server.HttpSys.FunctionalTests.csproj", "{10959BB7-197C-4DE1-A2F2-CA9445E3591F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Server.HttpSys.Tests", "src\Servers\HttpSys\test\Tests\Microsoft.AspNetCore.Server.HttpSys.Tests.csproj", "{3297D10B-B32A-4F70-8200-2B727C759C8D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.HttpSys.Tests", "src\Servers\HttpSys\test\Tests\Microsoft.AspNetCore.Server.HttpSys.Tests.csproj", "{3297D10B-B32A-4F70-8200-2B727C759C8D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QueueSharing", "src\Servers\HttpSys\samples\QueueSharing\QueueSharing.csproj", "{8EAE1C36-4A33-4A96-BACD-3FDC35844249}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "QueueSharing", "src\Servers\HttpSys\samples\QueueSharing\QueueSharing.csproj", "{8EAE1C36-4A33-4A96-BACD-3FDC35844249}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{41BB7BA4-AC08-4E9A-83EA-6D587A5B951C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IISExpress.FunctionalTests", "src\Servers\IIS\IIS\test\IISExpress.FunctionalTests\IISExpress.FunctionalTests.csproj", "{C0B46E28-F6BB-45C7-A7B1-9E294FCB0895}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IISExpress.FunctionalTests", "src\Servers\IIS\IIS\test\IISExpress.FunctionalTests\IISExpress.FunctionalTests.csproj", "{C0B46E28-F6BB-45C7-A7B1-9E294FCB0895}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{B49E037F-1F0A-46CA-9977-1987465C306C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NativeIISSample", "src\Servers\IIS\IIS\samples\NativeIISSample\NativeIISSample.csproj", "{D07B2752-8919-4CFE-8438-DFAFE91A4AB0}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NativeIISSample", "src\Servers\IIS\IIS\samples\NativeIISSample\NativeIISSample.csproj", "{D07B2752-8919-4CFE-8438-DFAFE91A4AB0}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "benchmarks", "benchmarks", "{ABC4EF1D-3525-41A9-929D-0FF7CEED4DDB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IIS.Performance", "src\Servers\IIS\IIS\benchmarks\IIS.Performance\IIS.Performance.csproj", "{65EC29AD-91CA-49BA-B1FC-D3DF127BE887}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.Performance", "src\Servers\IIS\IIS\benchmarks\IIS.Performance\IIS.Performance.csproj", "{65EC29AD-91CA-49BA-B1FC-D3DF127BE887}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IIS.FunctionalTests", "src\Servers\IIS\IIS\test\IIS.FunctionalTests\IIS.FunctionalTests.csproj", "{45A023F9-C7E7-42CA-968B-5FCE9EC626BC}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.FunctionalTests", "src\Servers\IIS\IIS\test\IIS.FunctionalTests\IIS.FunctionalTests.csproj", "{45A023F9-C7E7-42CA-968B-5FCE9EC626BC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IIS.Tests", "src\Servers\IIS\IIS\test\IIS.Tests\IIS.Tests.csproj", "{8A6992D5-478C-49E4-936F-EA97E5850A7D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.Tests", "src\Servers\IIS\IIS\test\IIS.Tests\IIS.Tests.csproj", "{8A6992D5-478C-49E4-936F-EA97E5850A7D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IIS.NewHandler.FunctionalTests", "src\Servers\IIS\IIS\test\IIS.NewHandler.FunctionalTests\IIS.NewHandler.FunctionalTests.csproj", "{7107FC61-E540-4946-A090-A0E0D8357505}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.NewHandler.FunctionalTests", "src\Servers\IIS\IIS\test\IIS.NewHandler.FunctionalTests\IIS.NewHandler.FunctionalTests.csproj", "{7107FC61-E540-4946-A090-A0E0D8357505}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IIS.NewShim.FunctionalTests", "src\Servers\IIS\IIS\test\IIS.NewShim.FunctionalTests\IIS.NewShim.FunctionalTests.csproj", "{514D41F9-8D97-49A6-8C7A-74545358E2CD}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.NewShim.FunctionalTests", "src\Servers\IIS\IIS\test\IIS.NewShim.FunctionalTests\IIS.NewShim.FunctionalTests.csproj", "{514D41F9-8D97-49A6-8C7A-74545358E2CD}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{1B635E97-715B-4F8D-AE58-4553C7B07016}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Server.IISIntegration.Tests", "src\Servers\IIS\IISIntegration\test\Tests\Microsoft.AspNetCore.Server.IISIntegration.Tests.csproj", "{F8AB0D33-1082-4F41-90E7-77C06EDD983D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IISIntegration.Tests", "src\Servers\IIS\IISIntegration\test\Tests\Microsoft.AspNetCore.Server.IISIntegration.Tests.csproj", "{F8AB0D33-1082-4F41-90E7-77C06EDD983D}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{4BBD404C-5588-49C4-A320-C5B1D3532B18}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IISSample", "src\Servers\IIS\IISIntegration\samples\IISSample\IISSample.csproj", "{647F0202-165F-4E98-A798-B2B3113050EC}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IISSample", "src\Servers\IIS\IISIntegration\samples\IISSample\IISSample.csproj", "{647F0202-165F-4E98-A798-B2B3113050EC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Server.Kestrel.Core.Tests", "src\Servers\Kestrel\Core\test\Microsoft.AspNetCore.Server.Kestrel.Core.Tests.csproj", "{0C3C1602-BE06-4DDE-835F-A0DE1563808B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel.Core.Tests", "src\Servers\Kestrel\Core\test\Microsoft.AspNetCore.Server.Kestrel.Core.Tests.csproj", "{0C3C1602-BE06-4DDE-835F-A0DE1563808B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Server.Kestrel.Tests", "src\Servers\Kestrel\Kestrel\test\Microsoft.AspNetCore.Server.Kestrel.Tests.csproj", "{1F6EC9ED-55DB-42E9-BA01-F7C3A27581FF}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel.Tests", "src\Servers\Kestrel\Kestrel\test\Microsoft.AspNetCore.Server.Kestrel.Tests.csproj", "{1F6EC9ED-55DB-42E9-BA01-F7C3A27581FF}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "perf", "perf", "{C69630AA-7BCC-401E-B0EE-AACFCF55F6A8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Server.Kestrel.Performance", "src\Servers\Kestrel\perf\Kestrel.Performance\Microsoft.AspNetCore.Server.Kestrel.Performance.csproj", "{51A02E3E-6932-479C-A287-CC6C3611B715}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel.Performance", "src\Servers\Kestrel\perf\Kestrel.Performance\Microsoft.AspNetCore.Server.Kestrel.Performance.csproj", "{51A02E3E-6932-479C-A287-CC6C3611B715}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{7B976D8F-EA31-4C0B-97BD-DFD9B3CC86FB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Http2SampleApp", "src\Servers\Kestrel\samples\Http2SampleApp\Http2SampleApp.csproj", "{7542D11F-2401-457C-992B-0473ADBD7842}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Http2SampleApp", "src\Servers\Kestrel\samples\Http2SampleApp\Http2SampleApp.csproj", "{7542D11F-2401-457C-992B-0473ADBD7842}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LargeResponseApp", "src\Servers\Kestrel\samples\LargeResponseApp\LargeResponseApp.csproj", "{ADFCDE19-5A3D-482D-8133-B7F419D96668}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LargeResponseApp", "src\Servers\Kestrel\samples\LargeResponseApp\LargeResponseApp.csproj", "{ADFCDE19-5A3D-482D-8133-B7F419D96668}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PlaintextApp", "src\Servers\Kestrel\samples\PlaintextApp\PlaintextApp.csproj", "{B43F63FE-0957-42A1-8431-B2D6E4F2958E}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PlaintextApp", "src\Servers\Kestrel\samples\PlaintextApp\PlaintextApp.csproj", "{B43F63FE-0957-42A1-8431-B2D6E4F2958E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kestrel.SampleApp", "src\Servers\Kestrel\samples\SampleApp\Kestrel.SampleApp.csproj", "{F9ED6D85-7A8D-45A6-808F-5BC0AAFC22D2}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kestrel.SampleApp", "src\Servers\Kestrel\samples\SampleApp\Kestrel.SampleApp.csproj", "{F9ED6D85-7A8D-45A6-808F-5BC0AAFC22D2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SystemdTestApp", "src\Servers\Kestrel\samples\SystemdTestApp\SystemdTestApp.csproj", "{73788491-F1D6-41C7-838B-F9E8060E7FB9}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SystemdTestApp", "src\Servers\Kestrel\samples\SystemdTestApp\SystemdTestApp.csproj", "{73788491-F1D6-41C7-838B-F9E8060E7FB9}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{47EF1A9F-89DB-4EBA-9BC1-1D4E0E12DE44}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Libuv.FunctionalTests", "src\Servers\Kestrel\test\Libuv.FunctionalTests\Libuv.FunctionalTests.csproj", "{89742A94-B0F0-49E3-8C78-2D25BF2D1633}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libuv.FunctionalTests", "src\Servers\Kestrel\test\Libuv.FunctionalTests\Libuv.FunctionalTests.csproj", "{89742A94-B0F0-49E3-8C78-2D25BF2D1633}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sockets.FunctionalTests", "src\Servers\Kestrel\test\Sockets.FunctionalTests\Sockets.FunctionalTests.csproj", "{6E3A74C9-EF79-45A0-AA3A-76411AA06A05}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sockets.FunctionalTests", "src\Servers\Kestrel\test\Sockets.FunctionalTests\Sockets.FunctionalTests.csproj", "{6E3A74C9-EF79-45A0-AA3A-76411AA06A05}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{2C7F02B9-2994-4B5B-BB97-0896BCB64101}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeGenerator", "src\Servers\Kestrel\tools\CodeGenerator\CodeGenerator.csproj", "{AB6F5423-8D5E-4A9A-BA18-3AD004CD6753}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CodeGenerator", "src\Servers\Kestrel\tools\CodeGenerator\CodeGenerator.csproj", "{AB6F5423-8D5E-4A9A-BA18-3AD004CD6753}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Transport.Libuv", "Transport.Libuv", "{80764B5F-82F8-41FD-BCD6-AD21F4DCAF64}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv", "src\Servers\Kestrel\Transport.Libuv\src\Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.csproj", "{3A83266F-4EC0-4E35-A2B6-86DC04168FC9}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv", "src\Servers\Kestrel\Transport.Libuv\src\Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.csproj", "{3A83266F-4EC0-4E35-A2B6-86DC04168FC9}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Tests", "src\Servers\Kestrel\Transport.Libuv\test\Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Tests.csproj", "{C9689B61-EBC0-4A6A-834F-09172017CD34}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Tests", "src\Servers\Kestrel\Transport.Libuv\test\Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Tests.csproj", "{C9689B61-EBC0-4A6A-834F-09172017CD34}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InMemory.FunctionalTests", "src\Servers\Kestrel\test\InMemory.FunctionalTests\InMemory.FunctionalTests.csproj", "{3EE7F5FE-4376-442D-BA77-82AD531DBFBF}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InMemory.FunctionalTests", "src\Servers\Kestrel\test\InMemory.FunctionalTests\InMemory.FunctionalTests.csproj", "{3EE7F5FE-4376-442D-BA77-82AD531DBFBF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Interop.FunctionalTests", "src\Servers\Kestrel\test\Interop.FunctionalTests\Interop.FunctionalTests.csproj", "{71568623-71F9-4110-ACE2-093CD0DA911C}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Interop.FunctionalTests", "src\Servers\Kestrel\test\Interop.FunctionalTests\Interop.FunctionalTests.csproj", "{71568623-71F9-4110-ACE2-093CD0DA911C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Libuv.BindTests", "src\Servers\Kestrel\test\Libuv.BindTests\Libuv.BindTests.csproj", "{8550A02D-BA13-411A-AAD3-6124D33D669F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libuv.BindTests", "src\Servers\Kestrel\test\Libuv.BindTests\Libuv.BindTests.csproj", "{8550A02D-BA13-411A-AAD3-6124D33D669F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sockets.BindTests", "src\Servers\Kestrel\test\Sockets.BindTests\Sockets.BindTests.csproj", "{EDE77D0C-321A-49FD-95D7-56ED41242A93}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sockets.BindTests", "src\Servers\Kestrel\test\Sockets.BindTests\Sockets.BindTests.csproj", "{EDE77D0C-321A-49FD-95D7-56ED41242A93}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "http2cat", "src\Servers\Kestrel\samples\http2cat\http2cat.csproj", "{8BDEC645-73BD-453B-8A5C-D616BC4EA08D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "http2cat", "src\Servers\Kestrel\samples\http2cat\http2cat.csproj", "{8BDEC645-73BD-453B-8A5C-D616BC4EA08D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QuicSampleApp", "src\Servers\Kestrel\samples\QuicSampleApp\QuicSampleApp.csproj", "{CBCD6AC2-72D3-4E82-9E78-12E3A9C68E1D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "QuicSampleApp", "src\Servers\Kestrel\samples\QuicSampleApp\QuicSampleApp.csproj", "{CBCD6AC2-72D3-4E82-9E78-12E3A9C68E1D}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Transport.Quic", "Transport.Quic", "{EE9D0952-6060-4723-B329-94A2950A6762}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Server.Kestrel.Transport.Experimental.Quic", "src\Servers\Kestrel\Transport.Quic\src\Microsoft.AspNetCore.Server.Kestrel.Transport.Experimental.Quic.csproj", "{132D43A2-067A-4E24-A520-45B9F14DCB8E}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel.Transport.Experimental.Quic", "src\Servers\Kestrel\Transport.Quic\src\Microsoft.AspNetCore.Server.Kestrel.Transport.Experimental.Quic.csproj", "{132D43A2-067A-4E24-A520-45B9F14DCB8E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QuicSampleClient", "src\Servers\Kestrel\samples\QuicSampleClient\QuicSampleClient.csproj", "{FA8D7CA4-C33B-4409-865F-54192BAC59A4}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "QuicSampleClient", "src\Servers\Kestrel\samples\QuicSampleClient\QuicSampleClient.csproj", "{FA8D7CA4-C33B-4409-865F-54192BAC59A4}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Http3SampleApp", "src\Servers\Kestrel\samples\Http3SampleApp\Http3SampleApp.csproj", "{2EC4E939-513F-44CD-A956-498966EAC929}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Http3SampleApp", "src\Servers\Kestrel\samples\Http3SampleApp\Http3SampleApp.csproj", "{2EC4E939-513F-44CD-A956-498966EAC929}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HttpStress", "src\Servers\Kestrel\stress\HttpStress.csproj", "{987E1C29-F124-40C8-8E6F-1B2B6A4CB62A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HttpStress", "src\Servers\Kestrel\stress\HttpStress.csproj", "{987E1C29-F124-40C8-8E6F-1B2B6A4CB62A}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{3CBC4802-E9B8-48B7-BC8C-B0AFB9EEC643}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServerComparison.FunctionalTests", "src\Servers\test\FunctionalTests\ServerComparison.FunctionalTests.csproj", "{48E64014-B249-4644-8AEB-CDEE8ABA0DC2}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ServerComparison.FunctionalTests", "src\Servers\test\FunctionalTests\ServerComparison.FunctionalTests.csproj", "{48E64014-B249-4644-8AEB-CDEE8ABA0DC2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.Testing.Tests", "src\Testing\test\Microsoft.AspNetCore.Testing.Tests.csproj", "{1542DC58-1836-4191-A9C5-51D1716D2543}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Testing.Tests", "src\Testing\test\Microsoft.AspNetCore.Testing.Tests.csproj", "{1542DC58-1836-4191-A9C5-51D1716D2543}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Web.Extensions", "Web.Extensions", "{F71FE795-9923-461B-9809-BB1821A276D0}" EndProject @@ -1421,20 +1421,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Compon EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Web.Extensions.Tests", "src\Components\Web.Extensions\test\Microsoft.AspNetCore.Components.Web.Extensions.Tests.csproj", "{157605CB-5170-4C1A-980F-4BAE42DB60DE}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{2531F00A-54EB-4074-9C0B-9AF9FB3679DC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BasicTestApp", "src\Components\test\testassets\BasicTestApp\BasicTestApp.csproj", "{85D67E40-4B11-48ED-8C43-34590A1FB9ED}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LazyTestContentPackage", "src\Components\test\testassets\LazyTestContentPackage\LazyTestContentPackage.csproj", "{C0EF53A5-5A94-4849-86B0-2297EA08D649}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ComponentsApp.App", "src\Components\test\testassets\ComponentsApp.App\ComponentsApp.App.csproj", "{4FDD820F-8397-41B7-956E-F257DD044BD8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ComponentsApp.Server", "src\Components\test\testassets\ComponentsApp.Server\ComponentsApp.Server.csproj", "{CA7C7A53-446F-453A-A57B-78BB1443B8A8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestContentPackage", "src\Components\test\testassets\TestContentPackage\TestContentPackage.csproj", "{B32C5882-2313-40D0-A003-2FF33724CFE6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Components.TestServer", "src\Components\test\testassets\TestServer\Components.TestServer.csproj", "{26F88A06-319C-43F3-9FD9-8BC2D29F8C00}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sdk", "Sdk", "{FED4267E-E5E4-49C5-98DB-8B3F203596EE}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.NET.Sdk.BlazorWebAssembly", "src\Components\WebAssembly\Sdk\src\Microsoft.NET.Sdk.BlazorWebAssembly.csproj", "{6B2734BF-C61D-4889-ABBF-456A4075D59B}" @@ -1445,6 +1431,32 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.NET.Sdk.BlazorWeb EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.NET.Sdk.BlazorWebAssembly.Tools", "src\Components\WebAssembly\Sdk\tools\Microsoft.NET.Sdk.BlazorWebAssembly.Tools.csproj", "{175E5CD8-92D4-46BB-882E-3A930D3302D4}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{6126DCE4-9692-4EE2-B240-C65743572995}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BasicTestApp", "src\Components\test\testassets\BasicTestApp\BasicTestApp.csproj", "{46FB7E93-1294-4068-B80A-D4864F78277A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ComponentsApp.App", "src\Components\test\testassets\ComponentsApp.App\ComponentsApp.App.csproj", "{25FA84DB-EEA7-4068-8E2D-F3D48B281C16}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ComponentsApp.Server", "src\Components\test\testassets\ComponentsApp.Server\ComponentsApp.Server.csproj", "{19974360-4A63-425A-94DB-C2C940A3A97A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LazyTestContentPackage", "src\Components\test\testassets\LazyTestContentPackage\LazyTestContentPackage.csproj", "{ADF9C126-F322-4E34-AFD3-E626A4487206}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestContentPackage", "src\Components\test\testassets\TestContentPackage\TestContentPackage.csproj", "{3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Components.TestServer", "src\Components\test\testassets\TestServer\Components.TestServer.csproj", "{8A59AF88-4A82-46ED-977D-D909001F8107}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ObjectPool", "ObjectPool", "{E235DAAD-FE73-469E-B16F-F2B8E872E217}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.ObjectPool", "src\ObjectPool\src\Microsoft.Extensions.ObjectPool.csproj", "{CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{00B2DD87-7E2A-4460-BE1B-5E18B1062B7F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InteropClient", "src\Grpc\test\testassets\InteropClient\InteropClient.csproj", "{C3A0F425-669F-46A8-893F-CF449A6DAE56}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InteropWebsite", "src\Grpc\test\testassets\InteropWebsite\InteropWebsite.csproj", "{19189670-E206-471D-94F8-7D3D545E5020}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wasm.Performance.ConsoleHost", "src\Components\benchmarkapps\Wasm.Performance\ConsoleHost\Wasm.Performance.ConsoleHost.csproj", "{E9408723-E6A9-4715-B906-3B25B0238ABA}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -6723,78 +6735,6 @@ Global {157605CB-5170-4C1A-980F-4BAE42DB60DE}.Release|x64.Build.0 = Release|Any CPU {157605CB-5170-4C1A-980F-4BAE42DB60DE}.Release|x86.ActiveCfg = Release|Any CPU {157605CB-5170-4C1A-980F-4BAE42DB60DE}.Release|x86.Build.0 = Release|Any CPU - {85D67E40-4B11-48ED-8C43-34590A1FB9ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {85D67E40-4B11-48ED-8C43-34590A1FB9ED}.Debug|Any CPU.Build.0 = Debug|Any CPU - {85D67E40-4B11-48ED-8C43-34590A1FB9ED}.Debug|x64.ActiveCfg = Debug|Any CPU - {85D67E40-4B11-48ED-8C43-34590A1FB9ED}.Debug|x64.Build.0 = Debug|Any CPU - {85D67E40-4B11-48ED-8C43-34590A1FB9ED}.Debug|x86.ActiveCfg = Debug|Any CPU - {85D67E40-4B11-48ED-8C43-34590A1FB9ED}.Debug|x86.Build.0 = Debug|Any CPU - {85D67E40-4B11-48ED-8C43-34590A1FB9ED}.Release|Any CPU.ActiveCfg = Release|Any CPU - {85D67E40-4B11-48ED-8C43-34590A1FB9ED}.Release|Any CPU.Build.0 = Release|Any CPU - {85D67E40-4B11-48ED-8C43-34590A1FB9ED}.Release|x64.ActiveCfg = Release|Any CPU - {85D67E40-4B11-48ED-8C43-34590A1FB9ED}.Release|x64.Build.0 = Release|Any CPU - {85D67E40-4B11-48ED-8C43-34590A1FB9ED}.Release|x86.ActiveCfg = Release|Any CPU - {85D67E40-4B11-48ED-8C43-34590A1FB9ED}.Release|x86.Build.0 = Release|Any CPU - {C0EF53A5-5A94-4849-86B0-2297EA08D649}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C0EF53A5-5A94-4849-86B0-2297EA08D649}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C0EF53A5-5A94-4849-86B0-2297EA08D649}.Debug|x64.ActiveCfg = Debug|Any CPU - {C0EF53A5-5A94-4849-86B0-2297EA08D649}.Debug|x64.Build.0 = Debug|Any CPU - {C0EF53A5-5A94-4849-86B0-2297EA08D649}.Debug|x86.ActiveCfg = Debug|Any CPU - {C0EF53A5-5A94-4849-86B0-2297EA08D649}.Debug|x86.Build.0 = Debug|Any CPU - {C0EF53A5-5A94-4849-86B0-2297EA08D649}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C0EF53A5-5A94-4849-86B0-2297EA08D649}.Release|Any CPU.Build.0 = Release|Any CPU - {C0EF53A5-5A94-4849-86B0-2297EA08D649}.Release|x64.ActiveCfg = Release|Any CPU - {C0EF53A5-5A94-4849-86B0-2297EA08D649}.Release|x64.Build.0 = Release|Any CPU - {C0EF53A5-5A94-4849-86B0-2297EA08D649}.Release|x86.ActiveCfg = Release|Any CPU - {C0EF53A5-5A94-4849-86B0-2297EA08D649}.Release|x86.Build.0 = Release|Any CPU - {4FDD820F-8397-41B7-956E-F257DD044BD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4FDD820F-8397-41B7-956E-F257DD044BD8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4FDD820F-8397-41B7-956E-F257DD044BD8}.Debug|x64.ActiveCfg = Debug|Any CPU - {4FDD820F-8397-41B7-956E-F257DD044BD8}.Debug|x64.Build.0 = Debug|Any CPU - {4FDD820F-8397-41B7-956E-F257DD044BD8}.Debug|x86.ActiveCfg = Debug|Any CPU - {4FDD820F-8397-41B7-956E-F257DD044BD8}.Debug|x86.Build.0 = Debug|Any CPU - {4FDD820F-8397-41B7-956E-F257DD044BD8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4FDD820F-8397-41B7-956E-F257DD044BD8}.Release|Any CPU.Build.0 = Release|Any CPU - {4FDD820F-8397-41B7-956E-F257DD044BD8}.Release|x64.ActiveCfg = Release|Any CPU - {4FDD820F-8397-41B7-956E-F257DD044BD8}.Release|x64.Build.0 = Release|Any CPU - {4FDD820F-8397-41B7-956E-F257DD044BD8}.Release|x86.ActiveCfg = Release|Any CPU - {4FDD820F-8397-41B7-956E-F257DD044BD8}.Release|x86.Build.0 = Release|Any CPU - {CA7C7A53-446F-453A-A57B-78BB1443B8A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CA7C7A53-446F-453A-A57B-78BB1443B8A8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CA7C7A53-446F-453A-A57B-78BB1443B8A8}.Debug|x64.ActiveCfg = Debug|Any CPU - {CA7C7A53-446F-453A-A57B-78BB1443B8A8}.Debug|x64.Build.0 = Debug|Any CPU - {CA7C7A53-446F-453A-A57B-78BB1443B8A8}.Debug|x86.ActiveCfg = Debug|Any CPU - {CA7C7A53-446F-453A-A57B-78BB1443B8A8}.Debug|x86.Build.0 = Debug|Any CPU - {CA7C7A53-446F-453A-A57B-78BB1443B8A8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CA7C7A53-446F-453A-A57B-78BB1443B8A8}.Release|Any CPU.Build.0 = Release|Any CPU - {CA7C7A53-446F-453A-A57B-78BB1443B8A8}.Release|x64.ActiveCfg = Release|Any CPU - {CA7C7A53-446F-453A-A57B-78BB1443B8A8}.Release|x64.Build.0 = Release|Any CPU - {CA7C7A53-446F-453A-A57B-78BB1443B8A8}.Release|x86.ActiveCfg = Release|Any CPU - {CA7C7A53-446F-453A-A57B-78BB1443B8A8}.Release|x86.Build.0 = Release|Any CPU - {B32C5882-2313-40D0-A003-2FF33724CFE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B32C5882-2313-40D0-A003-2FF33724CFE6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B32C5882-2313-40D0-A003-2FF33724CFE6}.Debug|x64.ActiveCfg = Debug|Any CPU - {B32C5882-2313-40D0-A003-2FF33724CFE6}.Debug|x64.Build.0 = Debug|Any CPU - {B32C5882-2313-40D0-A003-2FF33724CFE6}.Debug|x86.ActiveCfg = Debug|Any CPU - {B32C5882-2313-40D0-A003-2FF33724CFE6}.Debug|x86.Build.0 = Debug|Any CPU - {B32C5882-2313-40D0-A003-2FF33724CFE6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B32C5882-2313-40D0-A003-2FF33724CFE6}.Release|Any CPU.Build.0 = Release|Any CPU - {B32C5882-2313-40D0-A003-2FF33724CFE6}.Release|x64.ActiveCfg = Release|Any CPU - {B32C5882-2313-40D0-A003-2FF33724CFE6}.Release|x64.Build.0 = Release|Any CPU - {B32C5882-2313-40D0-A003-2FF33724CFE6}.Release|x86.ActiveCfg = Release|Any CPU - {B32C5882-2313-40D0-A003-2FF33724CFE6}.Release|x86.Build.0 = Release|Any CPU - {26F88A06-319C-43F3-9FD9-8BC2D29F8C00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {26F88A06-319C-43F3-9FD9-8BC2D29F8C00}.Debug|Any CPU.Build.0 = Debug|Any CPU - {26F88A06-319C-43F3-9FD9-8BC2D29F8C00}.Debug|x64.ActiveCfg = Debug|Any CPU - {26F88A06-319C-43F3-9FD9-8BC2D29F8C00}.Debug|x64.Build.0 = Debug|Any CPU - {26F88A06-319C-43F3-9FD9-8BC2D29F8C00}.Debug|x86.ActiveCfg = Debug|Any CPU - {26F88A06-319C-43F3-9FD9-8BC2D29F8C00}.Debug|x86.Build.0 = Debug|Any CPU - {26F88A06-319C-43F3-9FD9-8BC2D29F8C00}.Release|Any CPU.ActiveCfg = Release|Any CPU - {26F88A06-319C-43F3-9FD9-8BC2D29F8C00}.Release|Any CPU.Build.0 = Release|Any CPU - {26F88A06-319C-43F3-9FD9-8BC2D29F8C00}.Release|x64.ActiveCfg = Release|Any CPU - {26F88A06-319C-43F3-9FD9-8BC2D29F8C00}.Release|x64.Build.0 = Release|Any CPU - {26F88A06-319C-43F3-9FD9-8BC2D29F8C00}.Release|x86.ActiveCfg = Release|Any CPU - {26F88A06-319C-43F3-9FD9-8BC2D29F8C00}.Release|x86.Build.0 = Release|Any CPU {6B2734BF-C61D-4889-ABBF-456A4075D59B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6B2734BF-C61D-4889-ABBF-456A4075D59B}.Debug|Any CPU.Build.0 = Debug|Any CPU {6B2734BF-C61D-4889-ABBF-456A4075D59B}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -6843,6 +6783,126 @@ Global {175E5CD8-92D4-46BB-882E-3A930D3302D4}.Release|x64.Build.0 = Release|Any CPU {175E5CD8-92D4-46BB-882E-3A930D3302D4}.Release|x86.ActiveCfg = Release|Any CPU {175E5CD8-92D4-46BB-882E-3A930D3302D4}.Release|x86.Build.0 = Release|Any CPU + {46FB7E93-1294-4068-B80A-D4864F78277A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {46FB7E93-1294-4068-B80A-D4864F78277A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {46FB7E93-1294-4068-B80A-D4864F78277A}.Debug|x64.ActiveCfg = Debug|Any CPU + {46FB7E93-1294-4068-B80A-D4864F78277A}.Debug|x64.Build.0 = Debug|Any CPU + {46FB7E93-1294-4068-B80A-D4864F78277A}.Debug|x86.ActiveCfg = Debug|Any CPU + {46FB7E93-1294-4068-B80A-D4864F78277A}.Debug|x86.Build.0 = Debug|Any CPU + {46FB7E93-1294-4068-B80A-D4864F78277A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {46FB7E93-1294-4068-B80A-D4864F78277A}.Release|Any CPU.Build.0 = Release|Any CPU + {46FB7E93-1294-4068-B80A-D4864F78277A}.Release|x64.ActiveCfg = Release|Any CPU + {46FB7E93-1294-4068-B80A-D4864F78277A}.Release|x64.Build.0 = Release|Any CPU + {46FB7E93-1294-4068-B80A-D4864F78277A}.Release|x86.ActiveCfg = Release|Any CPU + {46FB7E93-1294-4068-B80A-D4864F78277A}.Release|x86.Build.0 = Release|Any CPU + {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Debug|Any CPU.Build.0 = Debug|Any CPU + {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Debug|x64.ActiveCfg = Debug|Any CPU + {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Debug|x64.Build.0 = Debug|Any CPU + {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Debug|x86.ActiveCfg = Debug|Any CPU + {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Debug|x86.Build.0 = Debug|Any CPU + {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Release|Any CPU.ActiveCfg = Release|Any CPU + {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Release|Any CPU.Build.0 = Release|Any CPU + {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Release|x64.ActiveCfg = Release|Any CPU + {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Release|x64.Build.0 = Release|Any CPU + {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Release|x86.ActiveCfg = Release|Any CPU + {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Release|x86.Build.0 = Release|Any CPU + {19974360-4A63-425A-94DB-C2C940A3A97A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {19974360-4A63-425A-94DB-C2C940A3A97A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {19974360-4A63-425A-94DB-C2C940A3A97A}.Debug|x64.ActiveCfg = Debug|Any CPU + {19974360-4A63-425A-94DB-C2C940A3A97A}.Debug|x64.Build.0 = Debug|Any CPU + {19974360-4A63-425A-94DB-C2C940A3A97A}.Debug|x86.ActiveCfg = Debug|Any CPU + {19974360-4A63-425A-94DB-C2C940A3A97A}.Debug|x86.Build.0 = Debug|Any CPU + {19974360-4A63-425A-94DB-C2C940A3A97A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {19974360-4A63-425A-94DB-C2C940A3A97A}.Release|Any CPU.Build.0 = Release|Any CPU + {19974360-4A63-425A-94DB-C2C940A3A97A}.Release|x64.ActiveCfg = Release|Any CPU + {19974360-4A63-425A-94DB-C2C940A3A97A}.Release|x64.Build.0 = Release|Any CPU + {19974360-4A63-425A-94DB-C2C940A3A97A}.Release|x86.ActiveCfg = Release|Any CPU + {19974360-4A63-425A-94DB-C2C940A3A97A}.Release|x86.Build.0 = Release|Any CPU + {ADF9C126-F322-4E34-AFD3-E626A4487206}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ADF9C126-F322-4E34-AFD3-E626A4487206}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ADF9C126-F322-4E34-AFD3-E626A4487206}.Debug|x64.ActiveCfg = Debug|Any CPU + {ADF9C126-F322-4E34-AFD3-E626A4487206}.Debug|x64.Build.0 = Debug|Any CPU + {ADF9C126-F322-4E34-AFD3-E626A4487206}.Debug|x86.ActiveCfg = Debug|Any CPU + {ADF9C126-F322-4E34-AFD3-E626A4487206}.Debug|x86.Build.0 = Debug|Any CPU + {ADF9C126-F322-4E34-AFD3-E626A4487206}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ADF9C126-F322-4E34-AFD3-E626A4487206}.Release|Any CPU.Build.0 = Release|Any CPU + {ADF9C126-F322-4E34-AFD3-E626A4487206}.Release|x64.ActiveCfg = Release|Any CPU + {ADF9C126-F322-4E34-AFD3-E626A4487206}.Release|x64.Build.0 = Release|Any CPU + {ADF9C126-F322-4E34-AFD3-E626A4487206}.Release|x86.ActiveCfg = Release|Any CPU + {ADF9C126-F322-4E34-AFD3-E626A4487206}.Release|x86.Build.0 = Release|Any CPU + {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Debug|x64.ActiveCfg = Debug|Any CPU + {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Debug|x64.Build.0 = Debug|Any CPU + {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Debug|x86.ActiveCfg = Debug|Any CPU + {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Debug|x86.Build.0 = Debug|Any CPU + {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Release|Any CPU.Build.0 = Release|Any CPU + {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Release|x64.ActiveCfg = Release|Any CPU + {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Release|x64.Build.0 = Release|Any CPU + {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Release|x86.ActiveCfg = Release|Any CPU + {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Release|x86.Build.0 = Release|Any CPU + {8A59AF88-4A82-46ED-977D-D909001F8107}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8A59AF88-4A82-46ED-977D-D909001F8107}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8A59AF88-4A82-46ED-977D-D909001F8107}.Debug|x64.ActiveCfg = Debug|Any CPU + {8A59AF88-4A82-46ED-977D-D909001F8107}.Debug|x64.Build.0 = Debug|Any CPU + {8A59AF88-4A82-46ED-977D-D909001F8107}.Debug|x86.ActiveCfg = Debug|Any CPU + {8A59AF88-4A82-46ED-977D-D909001F8107}.Debug|x86.Build.0 = Debug|Any CPU + {8A59AF88-4A82-46ED-977D-D909001F8107}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8A59AF88-4A82-46ED-977D-D909001F8107}.Release|Any CPU.Build.0 = Release|Any CPU + {8A59AF88-4A82-46ED-977D-D909001F8107}.Release|x64.ActiveCfg = Release|Any CPU + {8A59AF88-4A82-46ED-977D-D909001F8107}.Release|x64.Build.0 = Release|Any CPU + {8A59AF88-4A82-46ED-977D-D909001F8107}.Release|x86.ActiveCfg = Release|Any CPU + {8A59AF88-4A82-46ED-977D-D909001F8107}.Release|x86.Build.0 = Release|Any CPU + {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Debug|x64.ActiveCfg = Debug|Any CPU + {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Debug|x64.Build.0 = Debug|Any CPU + {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Debug|x86.ActiveCfg = Debug|Any CPU + {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Debug|x86.Build.0 = Debug|Any CPU + {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Release|Any CPU.Build.0 = Release|Any CPU + {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Release|x64.ActiveCfg = Release|Any CPU + {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Release|x64.Build.0 = Release|Any CPU + {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Release|x86.ActiveCfg = Release|Any CPU + {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Release|x86.Build.0 = Release|Any CPU + {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Debug|x64.ActiveCfg = Debug|Any CPU + {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Debug|x64.Build.0 = Debug|Any CPU + {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Debug|x86.ActiveCfg = Debug|Any CPU + {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Debug|x86.Build.0 = Debug|Any CPU + {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Release|Any CPU.Build.0 = Release|Any CPU + {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Release|x64.ActiveCfg = Release|Any CPU + {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Release|x64.Build.0 = Release|Any CPU + {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Release|x86.ActiveCfg = Release|Any CPU + {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Release|x86.Build.0 = Release|Any CPU + {19189670-E206-471D-94F8-7D3D545E5020}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {19189670-E206-471D-94F8-7D3D545E5020}.Debug|Any CPU.Build.0 = Debug|Any CPU + {19189670-E206-471D-94F8-7D3D545E5020}.Debug|x64.ActiveCfg = Debug|Any CPU + {19189670-E206-471D-94F8-7D3D545E5020}.Debug|x64.Build.0 = Debug|Any CPU + {19189670-E206-471D-94F8-7D3D545E5020}.Debug|x86.ActiveCfg = Debug|Any CPU + {19189670-E206-471D-94F8-7D3D545E5020}.Debug|x86.Build.0 = Debug|Any CPU + {19189670-E206-471D-94F8-7D3D545E5020}.Release|Any CPU.ActiveCfg = Release|Any CPU + {19189670-E206-471D-94F8-7D3D545E5020}.Release|Any CPU.Build.0 = Release|Any CPU + {19189670-E206-471D-94F8-7D3D545E5020}.Release|x64.ActiveCfg = Release|Any CPU + {19189670-E206-471D-94F8-7D3D545E5020}.Release|x64.Build.0 = Release|Any CPU + {19189670-E206-471D-94F8-7D3D545E5020}.Release|x86.ActiveCfg = Release|Any CPU + {19189670-E206-471D-94F8-7D3D545E5020}.Release|x86.Build.0 = Release|Any CPU + {E9408723-E6A9-4715-B906-3B25B0238ABA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E9408723-E6A9-4715-B906-3B25B0238ABA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E9408723-E6A9-4715-B906-3B25B0238ABA}.Debug|x64.ActiveCfg = Debug|Any CPU + {E9408723-E6A9-4715-B906-3B25B0238ABA}.Debug|x64.Build.0 = Debug|Any CPU + {E9408723-E6A9-4715-B906-3B25B0238ABA}.Debug|x86.ActiveCfg = Debug|Any CPU + {E9408723-E6A9-4715-B906-3B25B0238ABA}.Debug|x86.Build.0 = Debug|Any CPU + {E9408723-E6A9-4715-B906-3B25B0238ABA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E9408723-E6A9-4715-B906-3B25B0238ABA}.Release|Any CPU.Build.0 = Release|Any CPU + {E9408723-E6A9-4715-B906-3B25B0238ABA}.Release|x64.ActiveCfg = Release|Any CPU + {E9408723-E6A9-4715-B906-3B25B0238ABA}.Release|x64.Build.0 = Release|Any CPU + {E9408723-E6A9-4715-B906-3B25B0238ABA}.Release|x86.ActiveCfg = Release|Any CPU + {E9408723-E6A9-4715-B906-3B25B0238ABA}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -7555,18 +7615,24 @@ Global {F71FE795-9923-461B-9809-BB1821A276D0} = {60D51C98-2CC0-40DF-B338-44154EFEE2FF} {8294A74F-7DAA-4B69-BC56-7634D93C9693} = {F71FE795-9923-461B-9809-BB1821A276D0} {157605CB-5170-4C1A-980F-4BAE42DB60DE} = {F71FE795-9923-461B-9809-BB1821A276D0} - {2531F00A-54EB-4074-9C0B-9AF9FB3679DC} = {0508E463-0269-40C9-B5C2-3B600FB2A28B} - {85D67E40-4B11-48ED-8C43-34590A1FB9ED} = {2531F00A-54EB-4074-9C0B-9AF9FB3679DC} - {C0EF53A5-5A94-4849-86B0-2297EA08D649} = {2531F00A-54EB-4074-9C0B-9AF9FB3679DC} - {4FDD820F-8397-41B7-956E-F257DD044BD8} = {2531F00A-54EB-4074-9C0B-9AF9FB3679DC} - {CA7C7A53-446F-453A-A57B-78BB1443B8A8} = {2531F00A-54EB-4074-9C0B-9AF9FB3679DC} - {B32C5882-2313-40D0-A003-2FF33724CFE6} = {2531F00A-54EB-4074-9C0B-9AF9FB3679DC} - {26F88A06-319C-43F3-9FD9-8BC2D29F8C00} = {2531F00A-54EB-4074-9C0B-9AF9FB3679DC} {FED4267E-E5E4-49C5-98DB-8B3F203596EE} = {562D5067-8CD8-4F19-BCBB-873204932C61} {6B2734BF-C61D-4889-ABBF-456A4075D59B} = {FED4267E-E5E4-49C5-98DB-8B3F203596EE} {83371889-9A3E-4D16-AE77-EB4F83BC6374} = {FED4267E-E5E4-49C5-98DB-8B3F203596EE} {525EBCB4-A870-470B-BC90-845306C337D1} = {FED4267E-E5E4-49C5-98DB-8B3F203596EE} {175E5CD8-92D4-46BB-882E-3A930D3302D4} = {FED4267E-E5E4-49C5-98DB-8B3F203596EE} + {6126DCE4-9692-4EE2-B240-C65743572995} = {0508E463-0269-40C9-B5C2-3B600FB2A28B} + {46FB7E93-1294-4068-B80A-D4864F78277A} = {6126DCE4-9692-4EE2-B240-C65743572995} + {25FA84DB-EEA7-4068-8E2D-F3D48B281C16} = {6126DCE4-9692-4EE2-B240-C65743572995} + {19974360-4A63-425A-94DB-C2C940A3A97A} = {6126DCE4-9692-4EE2-B240-C65743572995} + {ADF9C126-F322-4E34-AFD3-E626A4487206} = {6126DCE4-9692-4EE2-B240-C65743572995} + {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31} = {6126DCE4-9692-4EE2-B240-C65743572995} + {8A59AF88-4A82-46ED-977D-D909001F8107} = {6126DCE4-9692-4EE2-B240-C65743572995} + {E235DAAD-FE73-469E-B16F-F2B8E872E217} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} + {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD} = {E235DAAD-FE73-469E-B16F-F2B8E872E217} + {00B2DD87-7E2A-4460-BE1B-5E18B1062B7F} = {E763DA15-8F4E-446C-99B8-309053C75598} + {C3A0F425-669F-46A8-893F-CF449A6DAE56} = {00B2DD87-7E2A-4460-BE1B-5E18B1062B7F} + {19189670-E206-471D-94F8-7D3D545E5020} = {00B2DD87-7E2A-4460-BE1B-5E18B1062B7F} + {E9408723-E6A9-4715-B906-3B25B0238ABA} = {6276A9A0-791B-49C1-AD8F-50AC47CDC196} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {3E8720B3-DBDD-498C-B383-2CC32A054E8F} diff --git a/Directory.Build.props b/Directory.Build.props index 21ae56027b..a4335939ce 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -151,9 +151,7 @@ Include="$(RepoRoot)src\Analyzers\Internal.AspNetCore.Analyzers\src\Internal.AspNetCore.Analyzers.csproj" ReferenceOutputAssembly="false" OutputItemType="Analyzer" - PrivateAssets="All" - Version="$(InternalAspNetCoreAnalyzersPackageVersion)" - IsImplicitlyDefined="true" /> + PrivateAssets="All" /> diff --git a/NuGet.config b/NuGet.config index 358177f770..94e12ce1b4 100644 --- a/NuGet.config +++ b/NuGet.config @@ -2,9 +2,6 @@ - - - diff --git a/docs/BuildFromSource.md b/docs/BuildFromSource.md index 4fe7763153..23e107b5cb 100644 --- a/docs/BuildFromSource.md +++ b/docs/BuildFromSource.md @@ -4,6 +4,22 @@ Building ASP.NET Core from source allows you to tweak and customize ASP.NET Core See for known issues and to track ongoing work. +## Clone the source code + +ASP.NET Core uses git submodules to include the source from a few other projects. + +For a new copy of the project, run: + +```ps1 +git clone --recursive https://github.com/dotnet/aspnetcore +``` + +To update an existing copy, run: + +```ps1 +git submodule update --init --recursive +``` + ## Install pre-requisites ### Windows @@ -22,7 +38,8 @@ Building ASP.NET Core on Windows requires: However, any Visual Studio 2019 instance that meets the requirements should be fine. See [global.json](/global.json) and [eng/scripts/vs.json](/eng/scripts/vs.json) for those requirements. By default, the script will install Visual Studio Enterprise Edition, however you can use a different edition by passing the `-Edition` flag. * Git. -* NodeJS. LTS version of 10.14.2 or newer +* NodeJS. LTS version of 10.14.2 or newer . +* Install yarn globally (`npm install -g yarn`) * Java Development Kit 11 or newer. Either: * OpenJDK * Oracle's JDK @@ -52,22 +69,6 @@ Building ASP.NET Core on macOS or Linux requires: * OpenJDK * Oracle's JDK -## Clone the source code - -ASP.NET Core uses git submodules to include the source from a few other projects. - -For a new copy of the project, run: - -```ps1 -git clone --recursive https://github.com/dotnet/aspnetcore -``` - -To update an existing copy, run: - -```ps1 -git submodule update --init --recursive -``` - **NOTE** some ISPs have been know to use web filtering software that has caused issues with git repository cloning, if you experience issues cloning this repo please review ## Building in Visual Studio @@ -86,6 +87,9 @@ Before opening our .sln/.slnf files in Visual Studio or VS Code, you need to per > :bulb: Pro tip: you will also want to run this command after pulling large sets of changes. On the master > branch, we regularly update the versions of .NET Core SDK required to build the repo. > You will need to restart Visual Studio every time we update the .NET Core SDK. + > To allow executing the setup script, you may need to update the execution policy on your machine. + You can do so by running the `Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser` command + in PowerShell. For more information on execution policies, you can read the [execution policy docs](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-executionpolicy). 2. Use the `startvs.cmd` script to open Visual Studio .sln/.slnf files. This script first sets the required environment variables. @@ -128,6 +132,18 @@ Executing `.\restore.cmd` or `.\build.cmd` may produce these errors: In most cases, this is because the option _Use previews of the .NET Core SDK_ in VS2019 is not checked. Start Visual Studio, go to _Tools > Options_ and check _Use previews of the .NET Core SDK_ under _Environment > Preview Features_. +### Common error: HTTP Error 500.33 - ANCM Request Handler Load Failure + +The [ASP.NET Core Module](https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/aspnet-core-module) (ANCM) for IIS is not supported when running projects in this repository. + +After using `startvs.cmd` to open a solution in Visual Studio, the Kestrel web host option must be used (name of the project) and not IIS Express. + +Example of running the `MvcSandbox` project: + +`.\startvs.cmd .\src\Mvc\Mvc.sln` + +![Web host options in Visual Studio](./vs-iis-express-aspnet-core-mvc-sandbox.jpg) + ## Building with Visual Studio Code Using Visual Studio Code with this repo requires setting environment variables on command line first. diff --git a/docs/Helix.md b/docs/Helix.md index 318a9ef8cb..477574dc2c 100644 --- a/docs/Helix.md +++ b/docs/Helix.md @@ -19,7 +19,7 @@ This will restore, and then publish all the test project including some bootstra ## Overview of the helix usage in our pipelines - Required queues: Windows10, OSX, Ubuntu1604 -- Full queue matrix: Windows[7, 81, 10], Ubuntu[1604, 1804, 2004], Centos7, Debian[8,9], Redhat7, Fedora28, Arm64 (Win10, Debian9) +- Full queue matrix: Windows[7, 81, 10], Ubuntu[1604, 1804, 2004], Centos7, Debian9, Redhat7, Fedora28, Arm64 (Win10, Debian9) - The queues are defined in [Helix.Common.props](https://github.com/dotnet/aspnetcore/blob/master/eng/targets/Helix.Common.props) [aspnetcore-ci](https://dev.azure.com/dnceng/public/_build?definitionId=278) runs non quarantined tests against the required helix queues as a required PR check and all builds on all branches. diff --git a/docs/ReferenceResolution.md b/docs/ReferenceResolution.md index c80d1a0acc..8e94b2a865 100644 --- a/docs/ReferenceResolution.md +++ b/docs/ReferenceResolution.md @@ -100,16 +100,64 @@ is changing to `Microsoft.AspNetCore.BetterThanOrange`, you would need to make t ``` -## Updating dependencies manually +## A darc cheatsheet -If the `dotnet-maestro` bot has not correctly updated the dependencies, it may be worthwhile running `darc` manually: +`darc` is a command-line tool that is used for dependency management in the dotnet ecosystem of repos. `darc` can be installed using the `darc-init` scripts located inside the `eng/common` directory. Once `darc` is installed, you'll need to set up the appropriate access tokens as outlined [in the official Darc docs](https://github.com/dotnet/arcade/blob/master/Documentation/Darc.md#setting-up-your-darc-client). + +Once `darc` is installed and set-up, it can be used to modify the subscriptions and dependencies in a project. + +**Getting the list of subscriptions in a repo** + +Subscriptions are objects that define the ecosystem repos we are listening for updates to, the frequency we are looking for updates, and more. + +```bash +darc get-subscriptions --target-branch master --target-repo aspnetcore$ --regex +``` + +**Disable/enable a subscription** + +```bash +darc subscription-status --id {subscriptionIdHere} --enable +darc subscription-status --id {subscriptionIdHere} --disable +``` + +**Trigger a subscription** + +Triggering a subscription will search for updates in its dependencies and open a PR in the target repo via the dotnet-maestro bot with these changes. + +```bash +darc trigger-subscriptions --id {subscriptionIdHere} +``` + +**Manually update dependencies** + +If the `dotnet-maestro` bot has not correctly updated the dependencies, `darc update-dependencies` may be used to update the dependencies manually. Note, you'll need to run the commands below in a separate branch and submit a PR with the changes. These are the things that the bot should do for you if you use `trigger-subscriptions` or automatically (when the subscription fires e.g. about 15 minutes after a dependency's build completes if `Update Frequency: EveryBuild`). + +```bash +darc update-dependencies --channel '.NET Core 3.1 Release' +darc update-dependencies --channel '.NET 5 Dev' --source-repo efcore +``` + +Generally, using `trigger-subscriptions` is preferred for creating dependency updates instead of manually updating dependencies in your own PR. + +**Toggling batchability of subscription** + +Subscriptions can be batched. When a dependency update is detected, `darc` will bundle the commits for that update with existing dependency PRs. To toggle whether a subscription is batched or not, you will need to use the `update-subscription` command. + +```bash +darc update-subscription --id {subscriptionIdHere} +``` + +Your shell's default editor will open and allow you to edit the metadata of the subscription. + +To disable batching, set `Batchable` to `False` and update the `Merge Policies` section with the following YAML. + +``` + - Name: Standard + Properties: {} +``` + +To enable batching, set `Batchable` to `True` and remove any `Merge Policies` set on the subscription. + +Note: Merge policies can only be set on unbatched subscriptions. Be sure to set/unset the `Merge Policies` field properly as you toggle batchability. -1. Install `darc` as described in -2. Run `darc update-dependencies --channel '.NET Core 3.1 Release'` - * Use `'trigger-subscriptions'` to prod the bot to create a PR if you do not want to make local changes - * Use `'.NET 3 Eng''` to update dependencies from dotnet/arcade - * Use `'.NET Eng - Latest'` to update dependencies from dotnet/arcade in the `master` branch - * Use `'VS Master'` to update dependencies from dotnet/roslyn in the `master` branch - * Use `'.NET 5 Dev'` to update dependencies from dotnet/efcore or dotnet/runtime in the `master` branch -3. `git diff` to confirm the tool's changes -4. Proceed with usual commit and PR diff --git a/docs/vs-iis-express-aspnet-core-mvc-sandbox.jpg b/docs/vs-iis-express-aspnet-core-mvc-sandbox.jpg new file mode 100644 index 0000000000..1b09715e86 Binary files /dev/null and b/docs/vs-iis-express-aspnet-core-mvc-sandbox.jpg differ diff --git a/eng/Build.props b/eng/Build.props index 3740546dd6..f0cb8db0b8 100644 --- a/eng/Build.props +++ b/eng/Build.props @@ -44,10 +44,6 @@ - - false @@ -125,11 +121,8 @@ ', '%0A ') + @(_ProjectReferenceProvider->'', '%0A ') ]]> diff --git a/eng/Dependencies.props b/eng/Dependencies.props index 8fc6f8364f..35853a5024 100644 --- a/eng/Dependencies.props +++ b/eng/Dependencies.props @@ -71,6 +71,8 @@ and are generated based on the last package release. + + @@ -104,6 +106,7 @@ and are generated based on the last package release. + @@ -159,6 +162,7 @@ and are generated based on the last package release. + @@ -178,7 +182,6 @@ and are generated based on the last package release. - diff --git a/eng/ProjectReferences.props b/eng/ProjectReferences.props index 6dbfca4646..d0b1995a42 100644 --- a/eng/ProjectReferences.props +++ b/eng/ProjectReferences.props @@ -5,160 +5,160 @@ --> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/eng/RTMVersions/Directory.Build.props b/eng/RTMVersions/Directory.Build.props deleted file mode 100644 index 75a2439073..0000000000 --- a/eng/RTMVersions/Directory.Build.props +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/eng/RTMVersions/Directory.Build.targets b/eng/RTMVersions/Directory.Build.targets deleted file mode 100644 index 058246e408..0000000000 --- a/eng/RTMVersions/Directory.Build.targets +++ /dev/null @@ -1 +0,0 @@ - diff --git a/eng/RTMVersions/RTMVersions.csproj b/eng/RTMVersions/RTMVersions.csproj deleted file mode 100644 index 486d02b1e4..0000000000 --- a/eng/RTMVersions/RTMVersions.csproj +++ /dev/null @@ -1,28 +0,0 @@ - - - - net5.0 - false - - - none - false - false - false - false - false - - - false - - - - - - - - - diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 59379de160..2995c7f564 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -13,304 +13,309 @@ https://github.com/dotnet/blazor cc449601d638ffaab58ae9487f0fd010bb178a12 - + https://github.com/dotnet/efcore - 58abc390e0e3eb849b5773da3f5ed2982ade521d + 59734ea22f29d22f8d0c1673c59a99c54ec4e78d - + https://github.com/dotnet/efcore - 58abc390e0e3eb849b5773da3f5ed2982ade521d + 59734ea22f29d22f8d0c1673c59a99c54ec4e78d - + https://github.com/dotnet/efcore - 58abc390e0e3eb849b5773da3f5ed2982ade521d + 59734ea22f29d22f8d0c1673c59a99c54ec4e78d - + https://github.com/dotnet/efcore - 58abc390e0e3eb849b5773da3f5ed2982ade521d + 59734ea22f29d22f8d0c1673c59a99c54ec4e78d - + https://github.com/dotnet/efcore - 58abc390e0e3eb849b5773da3f5ed2982ade521d + 59734ea22f29d22f8d0c1673c59a99c54ec4e78d - + https://github.com/dotnet/efcore - 58abc390e0e3eb849b5773da3f5ed2982ade521d + 59734ea22f29d22f8d0c1673c59a99c54ec4e78d - + https://github.com/dotnet/efcore - 58abc390e0e3eb849b5773da3f5ed2982ade521d + 59734ea22f29d22f8d0c1673c59a99c54ec4e78d - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af + + + https://github.com/dotnet/runtime + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/runtime - f37dd6fc8595e130909dcb3085a56342d04aa20c + 0e0e648770e54b12c2fa81a77538ce1a72fca8af - + https://github.com/dotnet/arcade - 22d6355c4f3c9ac00b0e3abf9d85f2fb07e4787b + f6192d1e284a08ac05041d05fa6e60dec74b24f5 - + https://github.com/dotnet/arcade - ff5d4b6c8dbdaeacb6e6159d3f8185118dffd915 + f6192d1e284a08ac05041d05fa6e60dec74b24f5 - + https://github.com/dotnet/roslyn - f24d2c5c98211908ab90d6f1f42e7592411d6058 + 7238563e5c051535770a9266c45d925012ad2b76 diff --git a/eng/Versions.props b/eng/Versions.props index 5aa781e731..3ac9563017 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -9,14 +9,14 @@ 5 0 0 - 8 + 1 false release - preview - Preview $(PreReleaseVersionIteration) + rc + RC $(PreReleaseVersionIteration) true false $(AspNetCoreMajorVersion).$(AspNetCoreMinorVersion) @@ -62,82 +62,84 @@ --> - 3.8.0-1.20361.1 + 3.8.0-2.20379.3 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 - 5.0.0-preview.8.20361.2 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 + 5.0.0-rc.1.20370.4 - 5.0.0-preview.8.20361.2 + 5.0.0-rc.1.20370.4 3.2.0 - 5.0.0-preview.8.20360.8 - 5.0.0-preview.8.20360.8 - 5.0.0-preview.8.20360.8 - 5.0.0-preview.8.20360.8 - 5.0.0-preview.8.20360.8 - 5.0.0-preview.8.20360.8 - 5.0.0-preview.8.20360.8 + 5.0.0-rc.1.20372.13 + 5.0.0-rc.1.20372.13 + 5.0.0-rc.1.20372.13 + 5.0.0-rc.1.20372.13 + 5.0.0-rc.1.20372.13 + 5.0.0-rc.1.20372.13 + 5.0.0-rc.1.20372.13 $(MicrosoftNETCoreAppRuntimewinx64PackageVersion) - $(MicrosoftWin32RegistryPackageVersion.Split('.')[0]).$(MicrosoftWin32RegistryPackageVersion.Split('.')[1]).0 @@ -178,7 +187,6 @@ $(SystemSecurityPrincipalWindowsPackageVersion.Split('.')[0]).$(SystemSecurityPrincipalWindowsPackageVersion.Split('.')[1]).0 $(SystemWindowsExtensionsPackageVersion.Split('.')[0]).$(SystemWindowsExtensionsPackageVersion.Split('.')[1]).0 - 5.0.0-preview.4.20180.4 @@ -211,6 +219,7 @@ 3.7.0-4.20351.7 3.7.0-4.20351.7 3.7.0-4.20351.7 + 3.3.0-beta2.final 3.0.0 1.0.0-20200708.1 3.19.8 @@ -255,9 +264,6 @@ 0.11.2 1.0.2 12.0.2 - - 9.0.1 - 13.0.4 3.12.1 17.17134.0 diff --git a/eng/common/cross/toolchain.cmake b/eng/common/cross/toolchain.cmake index 88a758afb1..b9fe796f0d 100644 --- a/eng/common/cross/toolchain.cmake +++ b/eng/common/cross/toolchain.cmake @@ -127,29 +127,40 @@ endif() # Specify link flags +function(add_toolchain_linker_flag Flag) + set(Config "${ARGV1}") + set(CONFIG_SUFFIX "") + if (NOT Config STREQUAL "") + set(CONFIG_SUFFIX "_${Config}") + endif() + set("CMAKE_EXE_LINKER_FLAGS${CONFIG_SUFFIX}" "${CMAKE_EXE_LINKER_FLAGS${CONFIG_SUFFIX}} ${Flag}" PARENT_SCOPE) + set("CMAKE_SHARED_LINKER_FLAGS${CONFIG_SUFFIX}" "${CMAKE_SHARED_LINKER_FLAGS${CONFIG_SUFFIX}} ${Flag}" PARENT_SCOPE) +endfunction() + + if(TARGET_ARCH_NAME STREQUAL "armel") if(DEFINED TIZEN_TOOLCHAIN) # For Tizen only - add_link_options("-B${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}") - add_link_options("-L${CROSS_ROOTFS}/lib") - add_link_options("-L${CROSS_ROOTFS}/usr/lib") - add_link_options("-L${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}") + add_toolchain_linker_flag("-B${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}") + add_toolchain_linker_flag("-L${CROSS_ROOTFS}/lib") + add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib") + add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}") endif() elseif(TARGET_ARCH_NAME STREQUAL "arm64") if(DEFINED TIZEN_TOOLCHAIN) # For Tizen only - add_link_options("-B${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}") - add_link_options("-L${CROSS_ROOTFS}/lib64") - add_link_options("-L${CROSS_ROOTFS}/usr/lib64") - add_link_options("-L${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}") + add_toolchain_linker_flag("-B${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}") + add_toolchain_linker_flag("-L${CROSS_ROOTFS}/lib64") + add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib64") + add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}") - add_link_options("-Wl,--rpath-link=${CROSS_ROOTFS}/lib64") - add_link_options("-Wl,--rpath-link=${CROSS_ROOTFS}/usr/lib64") - add_link_options("-Wl,--rpath-link=${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}") + add_toolchain_linker_flag("-Wl,--rpath-link=${CROSS_ROOTFS}/lib64") + add_toolchain_linker_flag("-Wl,--rpath-link=${CROSS_ROOTFS}/usr/lib64") + add_toolchain_linker_flag("-Wl,--rpath-link=${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}") endif() elseif(TARGET_ARCH_NAME STREQUAL "x86") - add_link_options(-m32) + add_toolchain_linker_flag(-m32) elseif(ILLUMOS) - add_link_options("-L${CROSS_ROOTFS}/lib/amd64") - add_link_options("-L${CROSS_ROOTFS}/usr/amd64/lib") + add_toolchain_linker_flag("-L${CROSS_ROOTFS}/lib/amd64") + add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/amd64/lib") endif() # Specify compile options diff --git a/eng/helix/content/RunTests/TestRunner.cs b/eng/helix/content/RunTests/TestRunner.cs index da4b4c228f..4eb8c903e2 100644 --- a/eng/helix/content/RunTests/TestRunner.cs +++ b/eng/helix/content/RunTests/TestRunner.cs @@ -247,7 +247,7 @@ namespace RunTests { // Timeout test run 5 minutes before the Helix job would timeout var cts = new CancellationTokenSource(Options.Timeout.Subtract(TimeSpan.FromMinutes(5))); - var commonTestArgs = $"vstest {Options.Target} --logger:xunit --logger:\"console;verbosity=normal\" --blame"; + var commonTestArgs = $"test {Options.Target} --logger:xunit --logger:\"console;verbosity=normal\" --blame \"CollectHangDump;TestTimeout=5m\""; if (Options.Quarantined) { Console.WriteLine("Running quarantined tests."); @@ -331,6 +331,22 @@ namespace RunTests { Console.WriteLine("No logs found in artifacts/log"); } + Console.WriteLine($"Copying TestResults/**/*.dmp to {HELIX_WORKITEM_UPLOAD_ROOT}/"); + if (Directory.Exists("TestResults")) + { + foreach (var file in Directory.EnumerateFiles("TestResults", "*.dmp", SearchOption.AllDirectories)) + { + var fileName = Path.GetFileName(file); + Console.WriteLine($"Copying: {file} to {Path.Combine(HELIX_WORKITEM_UPLOAD_ROOT, fileName)}"); + // Need to copy to HELIX_WORKITEM_UPLOAD_ROOT and HELIX_WORKITEM_UPLOAD_ROOT/../ in order for Azure Devops attachments to link properly and for Helix to store the logs + File.Copy(file, Path.Combine(HELIX_WORKITEM_UPLOAD_ROOT, fileName)); + File.Copy(file, Path.Combine(HELIX_WORKITEM_UPLOAD_ROOT, "..", fileName)); + } + } + else + { + Console.WriteLine("No dmps found in TestResults"); + } } } } diff --git a/eng/scripts/RunHelix.ps1 b/eng/scripts/RunHelix.ps1 index b2200d37fd..2a20580c3a 100644 --- a/eng/scripts/RunHelix.ps1 +++ b/eng/scripts/RunHelix.ps1 @@ -15,7 +15,6 @@ Windows.7.Amd64.Open OSX.1014.Amd64.Open Centos.7.Amd64.Open - Debian.8.Amd64.Open Debian.9.Amd64.Open Redhat.7.Amd64.Open .PARAMETER RunQuarantinedTests @@ -39,4 +38,4 @@ $env:BUILD_REPOSITORY_NAME="aspnetcore" $env:SYSTEM_TEAMPROJECT="aspnetcore" $HelixQueues = $HelixQueues -replace ";", "%3B" -dotnet msbuild $Project /t:Helix /p:TargetArchitecture="$TargetArchitecture" /p:IsRequiredCheck=true /p:IsHelixDaily=true /p:HelixTargetQueues=$HelixQueues /p:RunQuarantinedTests=$RunQuarantinedTests /p:_UseHelixOpenQueues=true /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log \ No newline at end of file +dotnet msbuild $Project /t:Helix /p:TargetArchitecture="$TargetArchitecture" /p:IsRequiredCheck=true /p:IsHelixDaily=true /p:HelixTargetQueues=$HelixQueues /p:RunQuarantinedTests=$RunQuarantinedTests /p:_UseHelixOpenQueues=true /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log diff --git a/eng/targets/CSharp.Common.props b/eng/targets/CSharp.Common.props index 00aa2fa2a7..237f94bd65 100644 --- a/eng/targets/CSharp.Common.props +++ b/eng/targets/CSharp.Common.props @@ -18,9 +18,8 @@ several versions older than latest. We reference the project to ensure it's built before the other projects that use it. Since this is a project reference, we must explicitly import the props file and also specify the output location of the SDK directory. --> - diff --git a/eng/targets/CSharp.Common.targets b/eng/targets/CSharp.Common.targets index 65d5f3b0fc..62b7462035 100644 --- a/eng/targets/CSharp.Common.targets +++ b/eng/targets/CSharp.Common.targets @@ -6,6 +6,30 @@ .NETFramework + + + <_TFMDirectory>$(TargetFramework) + <_TFMDirectory Condition=" '$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' ">netcoreapp + + + $(NoWarn);RS0041 + + + + + + + + + + + diff --git a/eng/targets/Helix.Common.props b/eng/targets/Helix.Common.props index 5f8a83cb6d..d68970f8dc 100644 --- a/eng/targets/Helix.Common.props +++ b/eng/targets/Helix.Common.props @@ -32,7 +32,6 @@ - diff --git a/eng/targets/ResolveReferences.targets b/eng/targets/ResolveReferences.targets index 209b42d1d1..646a526c81 100644 --- a/eng/targets/ResolveReferences.targets +++ b/eng/targets/ResolveReferences.targets @@ -1,5 +1,4 @@ - <_ProjectReferenceByAssemblyName Condition="'$(UseProjectReferences)' == 'true'" - Include="@(ProjectReferenceProvider)" - Exclude="@(_UnusedProjectReferenceProvider)" /> - - - + + + <_AllProjectReference Include="@(ProjectReferenceProvider)" /> + + + <_AllProjectReference Update="@(ProjectReference->'%(Filename)')" DirectUse="1" /> + + <_AllProjectReference Update="@(Reference)" Use="1"> + + %(Reference.Aliases) + %(Reference.BuildInParallel) + %(Reference.DoNotHarvest) + %(Reference.ExcludeAssets) + %(Reference.IncludeAssets) + %(Reference.IsNativeImage) + %(Reference.LinkBase) + %(Reference.Name) + %(Reference.OutputItemType) + %(Reference.Package) + %(Reference.Private) + %(Reference.PrivateAssets) + %(Reference.Project) + %(Reference.Properties) + %(Reference.Publish) + %(Reference.ReferenceOutputAssembly) + %(Reference.SetPlatform) + %(Reference.SkipGetTargetFrameworkProperties) + %(Reference.Targets) + %(Reference.UndefineProperties) + %(Reference.Watch) + + + + + + + + + @@ -127,14 +159,15 @@ - + ContentFiles;Build All @@ -205,21 +238,23 @@ + + + diff --git a/eng/tools/RepoTasks/DownloadFile.cs b/eng/tools/RepoTasks/DownloadFile.cs index 7ba2602d0c..a520da4355 100644 --- a/eng/tools/RepoTasks/DownloadFile.cs +++ b/eng/tools/RepoTasks/DownloadFile.cs @@ -100,7 +100,7 @@ namespace RepoTasks Log.LogMessage(MessageImportance.High, $"Attempting download '{source}' to '{target}'"); - using (var httpClient = new HttpClient()) + using (var httpClient = new HttpClient { Timeout = TimeSpan.FromMinutes(5) }) { for (int retryNumber = 0; retryNumber < MaxRetries; retryNumber++) { @@ -146,4 +146,4 @@ namespace RepoTasks return null; } } -} \ No newline at end of file +} diff --git a/eng/tools/RepoTasks/RepoTasks.csproj b/eng/tools/RepoTasks/RepoTasks.csproj index e71a1d7591..798c6c9fb3 100644 --- a/eng/tools/RepoTasks/RepoTasks.csproj +++ b/eng/tools/RepoTasks/RepoTasks.csproj @@ -36,5 +36,15 @@ $(WiXSdkPath)\Microsoft.Deployment.WindowsInstaller.Package.dll + + + diff --git a/global.json b/global.json index 6496dffe47..43ce9ccf9d 100644 --- a/global.json +++ b/global.json @@ -30,7 +30,7 @@ }, "msbuild-sdks": { "Yarn.MSBuild": "1.15.2", - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20377.2", - "Microsoft.DotNet.Helix.Sdk": "5.0.0-beta.20364.3" + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20374.1", + "Microsoft.DotNet.Helix.Sdk": "5.0.0-beta.20374.1" } } diff --git a/src/Analyzers/Internal.AspNetCore.Analyzers/test/PubternabilityAnalyzerTests.cs b/src/Analyzers/Internal.AspNetCore.Analyzers/test/PubternabilityAnalyzerTests.cs index da536956b1..a147e3c59b 100644 --- a/src/Analyzers/Internal.AspNetCore.Analyzers/test/PubternabilityAnalyzerTests.cs +++ b/src/Analyzers/Internal.AspNetCore.Analyzers/test/PubternabilityAnalyzerTests.cs @@ -34,7 +34,7 @@ namespace A.Internal.Namespace [Theory] [MemberData(nameof(PublicMemberDefinitions))] - [QuarantinedTest] + [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/22440")] public async Task PublicExposureOfPubternalTypeProducesPUB0001(string member) { var code = GetSourceFromNamespaceDeclaration($@" diff --git a/src/Azure/samples/AzureAppServicesHostingStartupSample/Startup.cs b/src/Azure/samples/AzureAppServicesHostingStartupSample/Startup.cs index 1a91822bc1..09de3fb3f0 100644 --- a/src/Azure/samples/AzureAppServicesHostingStartupSample/Startup.cs +++ b/src/Azure/samples/AzureAppServicesHostingStartupSample/Startup.cs @@ -1,8 +1,10 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace IISSample @@ -58,18 +60,22 @@ namespace IISSample }); } - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = new WebHostBuilder() + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseKestrel() + .UseStartup(); + }) .ConfigureLogging(factory => { factory.AddConsole(); }) - .UseKestrel() - .UseStartup() .Build(); - host.Run(); + return host.RunAsync(); } } } diff --git a/src/Azure/samples/AzureAppServicesSample/Startup.cs b/src/Azure/samples/AzureAppServicesSample/Startup.cs index 4638758d90..2347a3cb37 100644 --- a/src/Azure/samples/AzureAppServicesSample/Startup.cs +++ b/src/Azure/samples/AzureAppServicesSample/Startup.cs @@ -1,9 +1,11 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace IISSample @@ -70,20 +72,23 @@ namespace IISSample }); } - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = new WebHostBuilder() + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseKestrel() + .UseAzureAppServices() + .UseStartup(); + }) .ConfigureLogging(factory => { factory.AddConsole(); }) - .UseKestrel() - .UseAzureAppServices() - .UseStartup() .Build(); - host.Run(); + return host.RunAsync(); } } } - diff --git a/src/Components/Authorization/src/AuthorizeRouteView.cs b/src/Components/Authorization/src/AuthorizeRouteView.cs index 2d7ea76698..b236dfd158 100644 --- a/src/Components/Authorization/src/AuthorizeRouteView.cs +++ b/src/Components/Authorization/src/AuthorizeRouteView.cs @@ -54,6 +54,12 @@ namespace Microsoft.AspNetCore.Components.Authorization [Parameter] public RenderFragment Authorizing { get; set; } + /// + /// The resource to which access is being controlled. + /// + [Parameter] + public object Resource { get; set; } + [CascadingParameter] private Task ExistingCascadedAuthenticationState { get; set; } @@ -82,6 +88,7 @@ namespace Microsoft.AspNetCore.Components.Authorization builder.AddAttribute(2, nameof(AuthorizeRouteViewCore.Authorized), _renderAuthorizedDelegate); builder.AddAttribute(3, nameof(AuthorizeRouteViewCore.Authorizing), _renderAuthorizingDelegate); builder.AddAttribute(4, nameof(AuthorizeRouteViewCore.NotAuthorized), _renderNotAuthorizedDelegate); + builder.AddAttribute(5, nameof(AuthorizeRouteViewCore.Resource), Resource); builder.CloseComponent(); } diff --git a/src/Components/Authorization/test/AuthorizeRouteViewTest.cs b/src/Components/Authorization/test/AuthorizeRouteViewTest.cs index 5a3a5683c7..9951014a51 100644 --- a/src/Components/Authorization/test/AuthorizeRouteViewTest.cs +++ b/src/Components/Authorization/test/AuthorizeRouteViewTest.cs @@ -76,6 +76,78 @@ namespace Microsoft.AspNetCore.Components.Authorization edit => AssertPrependText(batch, edit, "Hello from the page with message: Hello, world!")); } + [Fact] + public void AuthorizesWhenResourceIsSet() + { + // Arrange + var routeData = new RouteData(typeof(TestPageRequiringAuthorization), new Dictionary + { + { nameof(TestPageRequiringAuthorization.Message), "Hello, world!" } + }); + var resource = "foo"; + _testAuthorizationService.NextResult = AuthorizationResult.Success(); + + // Act + _renderer.RenderRootComponent(_authorizeRouteViewComponentId, ParameterView.FromDictionary(new Dictionary + { + { nameof(AuthorizeRouteView.RouteData), routeData }, + { nameof(AuthorizeRouteView.DefaultLayout), typeof(TestLayout) }, + { nameof(AuthorizeRouteView.Resource), resource } + })); + + // Assert: renders layout + var batch = _renderer.Batches.Single(); + var layoutDiff = batch.GetComponentDiffs().Single(); + Assert.Collection(layoutDiff.Edits, + edit => AssertPrependText(batch, edit, "Layout starts here"), + edit => + { + Assert.Equal(RenderTreeEditType.PrependFrame, edit.Type); + AssertFrame.Component(batch.ReferenceFrames[edit.ReferenceFrameIndex]); + }, + edit => AssertPrependText(batch, edit, "Layout ends here")); + + // Assert: renders page + var pageDiff = batch.GetComponentDiffs().Single(); + Assert.Collection(pageDiff.Edits, + edit => AssertPrependText(batch, edit, "Hello from the page with message: Hello, world!")); + + // Assert: Asserts that the Resource is present and set to "foo" + Assert.Collection(_testAuthorizationService.AuthorizeCalls, call=> + { + Assert.Equal(resource, call.resource.ToString()); + }); + } + + [Fact] + public void NotAuthorizedWhenResourceMissing() + { + // Arrange + var routeData = new RouteData(typeof(TestPageRequiringAuthorization), EmptyParametersDictionary); + _testAuthorizationService.NextResult = AuthorizationResult.Failed(); + + // Act + _renderer.RenderRootComponent(_authorizeRouteViewComponentId, ParameterView.FromDictionary(new Dictionary + { + { nameof(AuthorizeRouteView.RouteData), routeData }, + { nameof(AuthorizeRouteView.DefaultLayout), typeof(TestLayout) }, + })); + + // Assert: renders layout containing "not authorized" message + var batch = _renderer.Batches.Single(); + var layoutDiff = batch.GetComponentDiffs().Single(); + Assert.Collection(layoutDiff.Edits, + edit => AssertPrependText(batch, edit, "Layout starts here"), + edit => AssertPrependText(batch, edit, "Not authorized"), + edit => AssertPrependText(batch, edit, "Layout ends here")); + + // Assert: Asserts that the Resource is Null + Assert.Collection(_testAuthorizationService.AuthorizeCalls, call=> + { + Assert.Null(call.resource); + }); + } + [Fact] public void WhenNotAuthorized_RendersDefaultNotAuthorizedContentInsideLayout() { diff --git a/src/Components/Components/src/EventCallback.cs b/src/Components/Components/src/EventCallback.cs index 0acc823124..c053f810ab 100644 --- a/src/Components/Components/src/EventCallback.cs +++ b/src/Components/Components/src/EventCallback.cs @@ -61,6 +61,13 @@ namespace Microsoft.AspNetCore.Components return Receiver.HandleEventAsync(new EventCallbackWorkItem(Delegate), arg); } + /// + /// Invokes the delegate associated with this binding and dispatches an event notification to the + /// appropriate component. + /// + /// A which completes asynchronously once event processing has completed. + public Task InvokeAsync() => InvokeAsync(null!); + object? IEventCallback.UnpackForRenderTree() { return RequiresExplicitReceiver ? (object)this : Delegate; diff --git a/src/Components/Components/src/EventCallbackOfT.cs b/src/Components/Components/src/EventCallbackOfT.cs index 12072171fa..23f7888826 100644 --- a/src/Components/Components/src/EventCallbackOfT.cs +++ b/src/Components/Components/src/EventCallbackOfT.cs @@ -56,6 +56,13 @@ namespace Microsoft.AspNetCore.Components return Receiver.HandleEventAsync(new EventCallbackWorkItem(Delegate), arg); } + /// + /// Invokes the delegate associated with this binding and dispatches an event notification to the + /// appropriate component. + /// + /// A which completes asynchronously once event processing has completed. + public Task InvokeAsync() => InvokeAsync(default!); + internal EventCallback AsUntyped() { return new EventCallback(Receiver ?? Delegate?.Target as IHandleEvent, Delegate); diff --git a/src/Components/Components/src/Microsoft.AspNetCore.Components.csproj b/src/Components/Components/src/Microsoft.AspNetCore.Components.csproj index 7565534a51..1e7f881ed5 100644 --- a/src/Components/Components/src/Microsoft.AspNetCore.Components.csproj +++ b/src/Components/Components/src/Microsoft.AspNetCore.Components.csproj @@ -10,7 +10,6 @@ - diff --git a/src/Components/Components/src/ParameterView.cs b/src/Components/Components/src/ParameterView.cs index 569b8ff2c2..f68fb60573 100644 --- a/src/Components/Components/src/ParameterView.cs +++ b/src/Components/Components/src/ParameterView.cs @@ -142,8 +142,8 @@ namespace Microsoft.AspNetCore.Components var oldIndex = oldParameters._ownerIndex; var newIndex = _ownerIndex; - var oldEndIndexExcl = oldIndex + oldParameters._frames[oldIndex].ComponentSubtreeLength; - var newEndIndexExcl = newIndex + _frames[newIndex].ComponentSubtreeLength; + var oldEndIndexExcl = oldIndex + oldParameters._frames[oldIndex].ComponentSubtreeLengthField; + var newEndIndexExcl = newIndex + _frames[newIndex].ComponentSubtreeLengthField; while (true) { // First, stop if we've reached the end of either subtree @@ -162,21 +162,21 @@ namespace Microsoft.AspNetCore.Components ref var newFrame = ref _frames[newIndex]; // Stop if we've reached the end of either subtree's sequence of attributes - oldFinished = oldFrame.FrameType != RenderTreeFrameType.Attribute; - newFinished = newFrame.FrameType != RenderTreeFrameType.Attribute; + oldFinished = oldFrame.FrameTypeField != RenderTreeFrameType.Attribute; + newFinished = newFrame.FrameTypeField != RenderTreeFrameType.Attribute; if (oldFinished || newFinished) { return oldFinished == newFinished; // Same only if we have same number of parameters } else { - if (!string.Equals(oldFrame.AttributeName, newFrame.AttributeName, StringComparison.Ordinal)) + if (!string.Equals(oldFrame.AttributeNameField, newFrame.AttributeNameField, StringComparison.Ordinal)) { return false; // Different names } - var oldValue = oldFrame.AttributeValue; - var newValue = newFrame.AttributeValue; + var oldValue = oldFrame.AttributeValueField; + var newValue = newFrame.AttributeValueField; if (ChangeDetection.MayHaveChanged(oldValue, newValue)) { return false; @@ -216,8 +216,8 @@ namespace Microsoft.AspNetCore.Components public static ParameterView FromDictionary(IDictionary parameters) { var frames = new RenderTreeFrame[parameters.Count + 1]; - frames[0] = RenderTreeFrame.Element(0, GeneratedParameterViewElementName) - .WithElementSubtreeLength(frames.Length); + frames[0] = RenderTreeFrame.Element(0, GeneratedParameterViewElementName); + frames[0].ElementSubtreeLengthField = frames.Length; var i = 0; foreach (var kvp in parameters) @@ -303,7 +303,7 @@ namespace Microsoft.AspNetCore.Components { _frames = frames; _ownerIndex = ownerIndex; - _ownerDescendantsEndIndexExcl = ownerIndex + _frames[ownerIndex].ElementSubtreeLength; + _ownerDescendantsEndIndexExcl = ownerIndex + _frames[ownerIndex].ElementSubtreeLengthField; _currentIndex = ownerIndex; _current = default; } @@ -321,7 +321,7 @@ namespace Microsoft.AspNetCore.Components // ... or if you get to its first non-attribute descendant (because attributes // are always before any other type of descendant) - if (_frames[nextIndex].FrameType != RenderTreeFrameType.Attribute) + if (_frames[nextIndex].FrameTypeField != RenderTreeFrameType.Attribute) { return false; } @@ -329,7 +329,7 @@ namespace Microsoft.AspNetCore.Components _currentIndex = nextIndex; ref var frame = ref _frames[_currentIndex]; - _current = new ParameterValue(frame.AttributeName, frame.AttributeValue, false); + _current = new ParameterValue(frame.AttributeNameField, frame.AttributeValueField, false); return true; } diff --git a/src/Components/Components/src/Profiling/ComponentsProfiling.cs b/src/Components/Components/src/Profiling/ComponentsProfiling.cs deleted file mode 100644 index f47a0c917c..0000000000 --- a/src/Components/Components/src/Profiling/ComponentsProfiling.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -namespace Microsoft.AspNetCore.Components.Profiling -{ - internal abstract class ComponentsProfiling - { - // For now, this is only intended for use on Blazor WebAssembly, and will have no effect - // when running on Blazor Server. The reason for having the ComponentsProfiling abstraction - // is so that if we later have two different implementations (one for WebAssembly, one for - // Server), the execution characteristics of calling Start/End will be unchanged and historical - // perf data will still be comparable to newer data. - public static readonly ComponentsProfiling Instance = PlatformInfo.IsWebAssembly - ? new WebAssemblyComponentsProfiling() - : (ComponentsProfiling)new NoOpComponentsProfiling(); - - public abstract void Start([CallerMemberName] string? name = null); - public abstract void End([CallerMemberName] string? name = null); - } -} diff --git a/src/Components/Components/src/Profiling/NoOpComponentsProfiling.cs b/src/Components/Components/src/Profiling/NoOpComponentsProfiling.cs deleted file mode 100644 index 74037e7de7..0000000000 --- a/src/Components/Components/src/Profiling/NoOpComponentsProfiling.cs +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -namespace Microsoft.AspNetCore.Components.Profiling -{ - internal class NoOpComponentsProfiling : ComponentsProfiling - { - public override void Start(string? name) - { - } - - public override void End(string? name) - { - } - } -} diff --git a/src/Components/Components/src/Profiling/WebAssemblyComponentsProfiling.cs b/src/Components/Components/src/Profiling/WebAssemblyComponentsProfiling.cs deleted file mode 100644 index 4e0b6dbd74..0000000000 --- a/src/Components/Components/src/Profiling/WebAssemblyComponentsProfiling.cs +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using WebAssembly.JSInterop; - -namespace Microsoft.AspNetCore.Components.Profiling -{ - // Later on, we will likely want to move this into the WebAssembly package. However it needs to - // be inlined into the Components package directly until we're ready to make the underlying - // ComponentsProfile abstraction into a public API. It's possible that this API will never become - // public, or that it will be replaced by something more standard for .NET, if it's possible to - // make that work performantly on WebAssembly. - - internal class WebAssemblyComponentsProfiling : ComponentsProfiling - { - static bool IsCapturing = false; - - public static void SetCapturing(bool isCapturing) - { - IsCapturing = isCapturing; - } - - public override void Start(string? name) - { - if (IsCapturing) - { - InternalCalls.InvokeJSUnmarshalled( - out _, "_blazorProfileStart", name, null, null); - } - } - - public override void End(string? name) - { - if (IsCapturing) - { - InternalCalls.InvokeJSUnmarshalled( - out _, "_blazorProfileEnd", name, null, null); - } - } - } -} diff --git a/src/Components/Components/src/Reflection/ComponentProperties.cs b/src/Components/Components/src/Reflection/ComponentProperties.cs index e47c53eeb9..1b6e43d7ba 100644 --- a/src/Components/Components/src/Reflection/ComponentProperties.cs +++ b/src/Components/Components/src/Reflection/ComponentProperties.cs @@ -41,7 +41,7 @@ namespace Microsoft.AspNetCore.Components.Reflection foreach (var parameter in parameters) { var parameterName = parameter.Name; - if (!writers.WritersByName.TryGetValue(parameterName, out var writer)) + if (!writers.TryGetValue(parameterName, out var writer)) { // Case 1: There is nowhere to put this value. ThrowForUnknownIncomingParameterName(targetType, parameterName); @@ -82,7 +82,7 @@ namespace Microsoft.AspNetCore.Components.Reflection isCaptureUnmatchedValuesParameterSetExplicitly = true; } - if (writers.WritersByName.TryGetValue(parameterName, out var writer)) + if (writers.TryGetValue(parameterName, out var writer)) { if (!writer.Cascading && parameter.Cascading) { @@ -245,9 +245,15 @@ namespace Microsoft.AspNetCore.Components.Reflection private class WritersForType { + private const int MaxCachedWriterLookups = 100; + private readonly Dictionary _underlyingWriters; + private readonly ConcurrentDictionary _referenceEqualityWritersCache; + public WritersForType(Type targetType) { - WritersByName = new Dictionary(StringComparer.OrdinalIgnoreCase); + _underlyingWriters = new Dictionary(StringComparer.OrdinalIgnoreCase); + _referenceEqualityWritersCache = new ConcurrentDictionary(ReferenceEqualityComparer.Instance); + foreach (var propertyInfo in GetCandidateBindableProperties(targetType)) { var parameterAttribute = propertyInfo.GetCustomAttribute(); @@ -267,14 +273,14 @@ namespace Microsoft.AspNetCore.Components.Reflection var propertySetter = MemberAssignment.CreatePropertySetter(targetType, propertyInfo, cascading: cascadingParameterAttribute != null); - if (WritersByName.ContainsKey(propertyName)) + if (_underlyingWriters.ContainsKey(propertyName)) { throw new InvalidOperationException( $"The type '{targetType.FullName}' declares more than one parameter matching the " + $"name '{propertyName.ToLowerInvariant()}'. Parameter names are case-insensitive and must be unique."); } - WritersByName.Add(propertyName, propertySetter); + _underlyingWriters.Add(propertyName, propertySetter); if (parameterAttribute != null && parameterAttribute.CaptureUnmatchedValues) { @@ -298,11 +304,38 @@ namespace Microsoft.AspNetCore.Components.Reflection } } - public Dictionary WritersByName { get; } - public IPropertySetter? CaptureUnmatchedValuesWriter { get; } public string? CaptureUnmatchedValuesPropertyName { get; } + + public bool TryGetValue(string parameterName, [MaybeNullWhen(false)] out IPropertySetter writer) + { + // In intensive parameter-passing scenarios, one of the most expensive things we do is the + // lookup from parameterName to writer. Pre-5.0 that was because of the string hashing. + // To optimize this, we now have a cache in front of the lookup which is keyed by parameterName's + // object identity (not its string hash). So in most cases we can resolve the lookup without + // having to hash the string. We only fall back on hashing the string if the cache gets full, + // which would only be in very unusual situations because components don't typically have many + // parameters, and the parameterName strings usually come from compile-time constants. + if (!_referenceEqualityWritersCache.TryGetValue(parameterName, out writer)) + { + _underlyingWriters.TryGetValue(parameterName, out writer); + + // Note that because we're not locking around this, it's possible we might + // actually write more than MaxCachedWriterLookups entries due to concurrent + // writes. However this won't cause any problems. + // Also note that the value we're caching might be 'null'. It's valid to cache + // lookup misses just as much as hits, since then we can more quickly identify + // incoming values that don't have a corresponding writer and thus will end up + // being passed as catch-all parameter values. + if (_referenceEqualityWritersCache.Count < MaxCachedWriterLookups) + { + _referenceEqualityWritersCache.TryAdd(parameterName, writer); + } + } + + return writer != null; + } } } } diff --git a/src/Components/Components/src/RenderTree/RenderTreeDiffBuilder.cs b/src/Components/Components/src/RenderTree/RenderTreeDiffBuilder.cs index a7892991f4..80bf99724e 100644 --- a/src/Components/Components/src/RenderTree/RenderTreeDiffBuilder.cs +++ b/src/Components/Components/src/RenderTree/RenderTreeDiffBuilder.cs @@ -7,7 +7,6 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.CompilerServices; -using Microsoft.AspNetCore.Components.Profiling; using Microsoft.AspNetCore.Components.Rendering; namespace Microsoft.AspNetCore.Components.RenderTree @@ -28,7 +27,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree ArrayRange oldTree, ArrayRange newTree) { - ComponentsProfiling.Instance.Start(); var editsBuffer = batchBuilder.EditsBuffer; var editsBufferStartLength = editsBuffer.Count; @@ -37,7 +35,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree var editsSegment = editsBuffer.ToSegment(editsBufferStartLength, editsBuffer.Count); var result = new RenderTreeDiff(componentId, editsSegment); - ComponentsProfiling.Instance.End(); return result; } @@ -49,7 +46,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree int oldStartIndex, int oldEndIndexExcl, int newStartIndex, int newEndIndexExcl) { - ProfilingStart(); // This is deliberately a very large method. Parts of it could be factored out // into other private methods, but doing so comes at a consequential perf cost, // because it involves so much parameter passing. You can think of the code here @@ -82,7 +78,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree if (hasMoreOld) { ref var oldFrame = ref oldTree[oldStartIndex]; - oldSeq = oldFrame.Sequence; + oldSeq = oldFrame.SequenceField; oldKey = KeyValue(ref oldFrame); } else @@ -94,7 +90,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree if (hasMoreNew) { ref var newFrame = ref newTree[newStartIndex]; - newSeq = newFrame.Sequence; + newSeq = newFrame.SequenceField; newKey = KeyValue(ref newFrame); } else @@ -199,7 +195,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree var newLoopsBackLater = false; for (var testIndex = newStartIndex + 1; testIndex < newEndIndexExcl; testIndex++) { - if (newTree[testIndex].Sequence < newSeq) + if (newTree[testIndex].SequenceField < newSeq) { newLoopsBackLater = true; break; @@ -222,7 +218,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree var oldLoopsBackLater = false; for (var testIndex = oldStartIndex + 1; testIndex < oldEndIndexExcl; testIndex++) { - if (oldTree[testIndex].Sequence < oldSeq) + if (oldTree[testIndex].SequenceField < oldSeq) { oldLoopsBackLater = true; break; @@ -300,12 +296,10 @@ namespace Microsoft.AspNetCore.Components.RenderTree diffContext.KeyedItemInfoDictionaryPool.Return(keyedItemInfos); } } - ProfilingEnd(); } private static Dictionary BuildKeyToInfoLookup(DiffContext diffContext, int oldStartIndex, int oldEndIndexExcl, int newStartIndex, int newEndIndexExcl) { - ProfilingStart(); var result = diffContext.KeyedItemInfoDictionaryPool.Get(); var oldTree = diffContext.OldTree; var newTree = diffContext.NewTree; @@ -318,7 +312,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree { if (result.ContainsKey(key)) { - ThrowExceptionForDuplicateKey(key); + ThrowExceptionForDuplicateKey(key, frame); } result[key] = new KeyedItemInfo(oldStartIndex, -1); @@ -341,7 +335,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree { if (existingEntry.NewIndex >= 0) { - ThrowExceptionForDuplicateKey(key); + ThrowExceptionForDuplicateKey(key, frame); } result[key] = new KeyedItemInfo(existingEntry.OldIndex, newStartIndex); @@ -351,23 +345,32 @@ namespace Microsoft.AspNetCore.Components.RenderTree newStartIndex = NextSiblingIndex(frame, newStartIndex); } - ProfilingEnd(); return result; } - private static void ThrowExceptionForDuplicateKey(object key) + private static void ThrowExceptionForDuplicateKey(object key, in RenderTreeFrame frame) { - throw new InvalidOperationException($"More than one sibling has the same key value, '{key}'. Key values must be unique."); + switch (frame.FrameTypeField) + { + case RenderTreeFrameType.Component: + throw new InvalidOperationException($"More than one sibling of component '{frame.ComponentTypeField}' has the same key value, '{key}'. Key values must be unique."); + + case RenderTreeFrameType.Element: + throw new InvalidOperationException($"More than one sibling of element '{frame.ElementNameField}' has the same key value, '{key}'. Key values must be unique."); + + default: + throw new InvalidOperationException($"More than one sibling has the same key value, '{key}'. Key values must be unique."); + } } private static object KeyValue(ref RenderTreeFrame frame) { - switch (frame.FrameType) + switch (frame.FrameTypeField) { case RenderTreeFrameType.Element: - return frame.ElementKey; + return frame.ElementKeyField; case RenderTreeFrameType.Component: - return frame.ComponentKey; + return frame.ComponentKeyField; default: return null; } @@ -384,7 +387,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree int oldStartIndex, int oldEndIndexExcl, int newStartIndex, int newEndIndexExcl) { - ProfilingStart(); // The overhead of the dictionary used by AppendAttributeDiffEntriesForRangeSlow is // significant, so we want to try and do a merge-join if possible, but fall back to // a hash-join if not. We'll do a merge join until we hit a case we can't handle and @@ -403,10 +405,10 @@ namespace Microsoft.AspNetCore.Components.RenderTree while (hasMoreOld || hasMoreNew) { - var oldSeq = hasMoreOld ? oldTree[oldStartIndex].Sequence : int.MaxValue; - var newSeq = hasMoreNew ? newTree[newStartIndex].Sequence : int.MaxValue; - var oldAttributeName = oldTree[oldStartIndex].AttributeName; - var newAttributeName = newTree[newStartIndex].AttributeName; + var oldSeq = hasMoreOld ? oldTree[oldStartIndex].SequenceField : int.MaxValue; + var newSeq = hasMoreNew ? newTree[newStartIndex].SequenceField : int.MaxValue; + var oldAttributeName = oldTree[oldStartIndex].AttributeNameField; + var newAttributeName = newTree[newStartIndex].AttributeNameField; if (oldSeq == newSeq && string.Equals(oldAttributeName, newAttributeName, StringComparison.Ordinal)) @@ -433,7 +435,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree ref diffContext, oldStartIndex, oldEndIndexExcl, newStartIndex, newEndIndexExcl); - ProfilingEnd(); return; } @@ -459,12 +460,9 @@ namespace Microsoft.AspNetCore.Components.RenderTree ref diffContext, oldStartIndex, oldEndIndexExcl, newStartIndex, newEndIndexExcl); - ProfilingEnd(); return; } } - - ProfilingEnd(); } private static void AppendAttributeDiffEntriesForRangeSlow( @@ -472,7 +470,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree int oldStartIndex, int oldEndIndexExcl, int newStartIndex, int newEndIndexExcl) { - ProfilingStart(); var oldTree = diffContext.OldTree; var newTree = diffContext.NewTree; @@ -484,12 +481,12 @@ namespace Microsoft.AspNetCore.Components.RenderTree // 3. iterate through the remaining attributes in the set and add them for (var i = newStartIndex; i < newEndIndexExcl; i++) { - diffContext.AttributeDiffSet[newTree[i].AttributeName] = i; + diffContext.AttributeDiffSet[newTree[i].AttributeNameField] = i; } for (var i = oldStartIndex; i < oldEndIndexExcl; i++) { - var oldName = oldTree[i].AttributeName; + var oldName = oldTree[i].AttributeNameField; if (diffContext.AttributeDiffSet.TryGetValue(oldName, out var matchIndex)) { // Has a match in the new tree, look for a diff @@ -511,7 +508,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree // We should have processed any additions at this point. Reset for the next batch. diffContext.AttributeDiffSet.Clear(); - ProfilingEnd(); } private static void UpdateRetainedChildComponent( @@ -519,15 +515,15 @@ namespace Microsoft.AspNetCore.Components.RenderTree int oldComponentIndex, int newComponentIndex) { - ProfilingStart(); var oldTree = diffContext.OldTree; var newTree = diffContext.NewTree; ref var oldComponentFrame = ref oldTree[oldComponentIndex]; ref var newComponentFrame = ref newTree[newComponentIndex]; - var componentState = oldComponentFrame.ComponentState; + var componentState = oldComponentFrame.ComponentStateField; // Preserve the actual componentInstance - newComponentFrame = newComponentFrame.WithComponent(componentState); + newComponentFrame.ComponentStateField = componentState; + newComponentFrame.ComponentIdField = componentState.ComponentId; // As an important rendering optimization, we want to skip parameter update // notifications if we know for sure they haven't changed/mutated. The @@ -546,20 +542,18 @@ namespace Microsoft.AspNetCore.Components.RenderTree { componentState.SetDirectParameters(newParameters); } - - ProfilingEnd(); } private static int NextSiblingIndex(in RenderTreeFrame frame, int frameIndex) { - switch (frame.FrameType) + switch (frame.FrameTypeField) { case RenderTreeFrameType.Component: - return frameIndex + frame.ComponentSubtreeLength; + return frameIndex + frame.ComponentSubtreeLengthField; case RenderTreeFrameType.Element: - return frameIndex + frame.ElementSubtreeLength; + return frameIndex + frame.ElementSubtreeLengthField; case RenderTreeFrameType.Region: - return frameIndex + frame.RegionSubtreeLength; + return frameIndex + frame.RegionSubtreeLengthField; default: return frameIndex + 1; } @@ -570,7 +564,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree int oldFrameIndex, int newFrameIndex) { - ProfilingStart(); var oldTree = diffContext.OldTree; var newTree = diffContext.NewTree; ref var oldFrame = ref oldTree[oldFrameIndex]; @@ -578,12 +571,11 @@ namespace Microsoft.AspNetCore.Components.RenderTree // This can't happen for sequence-matched frames from .razor components, but it can happen if you write your // builder logic manually or if two dissimilar frames matched by key. Treat as completely unrelated. - var newFrameType = newFrame.FrameType; - if (oldFrame.FrameType != newFrameType) + var newFrameType = newFrame.FrameTypeField; + if (oldFrame.FrameTypeField != newFrameType) { InsertNewFrame(ref diffContext, newFrameIndex); RemoveOldFrame(ref diffContext, oldFrameIndex); - ProfilingEnd(); return; } @@ -595,8 +587,8 @@ namespace Microsoft.AspNetCore.Components.RenderTree { case RenderTreeFrameType.Text: { - var oldText = oldFrame.TextContent; - var newText = newFrame.TextContent; + var oldText = oldFrame.TextContentField; + var newText = newFrame.TextContentField; if (!string.Equals(oldText, newText, StringComparison.Ordinal)) { var referenceFrameIndex = diffContext.ReferenceFrames.Append(newFrame); @@ -608,8 +600,8 @@ namespace Microsoft.AspNetCore.Components.RenderTree case RenderTreeFrameType.Markup: { - var oldMarkup = oldFrame.MarkupContent; - var newMarkup = newFrame.MarkupContent; + var oldMarkup = oldFrame.MarkupContentField; + var newMarkup = newFrame.MarkupContentField; if (!string.Equals(oldMarkup, newMarkup, StringComparison.Ordinal)) { var referenceFrameIndex = diffContext.ReferenceFrames.Append(newFrame); @@ -621,8 +613,8 @@ namespace Microsoft.AspNetCore.Components.RenderTree case RenderTreeFrameType.Element: { - var oldElementName = oldFrame.ElementName; - var newElementName = newFrame.ElementName; + var oldElementName = oldFrame.ElementNameField; + var newElementName = newFrame.ElementNameField; if (string.Equals(oldElementName, newElementName, StringComparison.Ordinal)) { var oldFrameAttributesEndIndexExcl = GetAttributesEndIndexExclusive(oldTree, oldFrameIndex); @@ -635,8 +627,8 @@ namespace Microsoft.AspNetCore.Components.RenderTree newFrameIndex + 1, newFrameAttributesEndIndexExcl); // Diff the children - var oldFrameChildrenEndIndexExcl = oldFrameIndex + oldFrame.ElementSubtreeLength; - var newFrameChildrenEndIndexExcl = newFrameIndex + newFrame.ElementSubtreeLength; + var oldFrameChildrenEndIndexExcl = oldFrameIndex + oldFrame.ElementSubtreeLengthField; + var newFrameChildrenEndIndexExcl = newFrameIndex + newFrame.ElementSubtreeLengthField; var hasChildrenToProcess = oldFrameChildrenEndIndexExcl > oldFrameAttributesEndIndexExcl || newFrameChildrenEndIndexExcl > newFrameAttributesEndIndexExcl; @@ -670,14 +662,14 @@ namespace Microsoft.AspNetCore.Components.RenderTree { AppendDiffEntriesForRange( ref diffContext, - oldFrameIndex + 1, oldFrameIndex + oldFrame.RegionSubtreeLength, - newFrameIndex + 1, newFrameIndex + newFrame.RegionSubtreeLength); + oldFrameIndex + 1, oldFrameIndex + oldFrame.RegionSubtreeLengthField, + newFrameIndex + 1, newFrameIndex + newFrame.RegionSubtreeLengthField); break; } case RenderTreeFrameType.Component: { - if (oldFrame.ComponentType == newFrame.ComponentType) + if (oldFrame.ComponentTypeField == newFrame.ComponentTypeField) { UpdateRetainedChildComponent( ref diffContext, @@ -707,10 +699,8 @@ namespace Microsoft.AspNetCore.Components.RenderTree // We don't handle attributes here, they have their own diff logic. // See AppendDiffEntriesForAttributeFrame default: - throw new NotImplementedException($"Encountered unsupported frame type during diffing: {newTree[newFrameIndex].FrameType}"); + throw new NotImplementedException($"Encountered unsupported frame type during diffing: {newTree[newFrameIndex].FrameTypeField}"); } - - ProfilingEnd(); } // This should only be called for attributes that have the same name. This is an @@ -720,14 +710,13 @@ namespace Microsoft.AspNetCore.Components.RenderTree int oldFrameIndex, int newFrameIndex) { - ProfilingStart(); var oldTree = diffContext.OldTree; var newTree = diffContext.NewTree; ref var oldFrame = ref oldTree[oldFrameIndex]; ref var newFrame = ref newTree[newFrameIndex]; // Using Equals to account for string comparisons, nulls, etc. - var valueChanged = !Equals(oldFrame.AttributeValue, newFrame.AttributeValue); + var valueChanged = !Equals(oldFrame.AttributeValueField, newFrame.AttributeValueField); if (valueChanged) { InitializeNewAttributeFrame(ref diffContext, ref newFrame); @@ -736,29 +725,26 @@ namespace Microsoft.AspNetCore.Components.RenderTree // If we're replacing an old event handler ID with a new one, register the old one for disposal, // plus keep track of the old->new chain until the old one is fully disposed - if (oldFrame.AttributeEventHandlerId > 0) + if (oldFrame.AttributeEventHandlerIdField > 0) { - diffContext.Renderer.TrackReplacedEventHandlerId(oldFrame.AttributeEventHandlerId, newFrame.AttributeEventHandlerId); - diffContext.BatchBuilder.DisposedEventHandlerIds.Append(oldFrame.AttributeEventHandlerId); + diffContext.Renderer.TrackReplacedEventHandlerId(oldFrame.AttributeEventHandlerIdField, newFrame.AttributeEventHandlerIdField); + diffContext.BatchBuilder.DisposedEventHandlerIds.Append(oldFrame.AttributeEventHandlerIdField); } } - else if (oldFrame.AttributeEventHandlerId > 0) + else if (oldFrame.AttributeEventHandlerIdField > 0) { // Retain the event handler ID by copying the old frame over the new frame. // this will prevent us from needing to dispose the old event handler // since it was unchanged. newFrame = oldFrame; } - - ProfilingEnd(); } private static void InsertNewFrame(ref DiffContext diffContext, int newFrameIndex) { - ProfilingStart(); var newTree = diffContext.NewTree; ref var newFrame = ref newTree[newFrameIndex]; - switch (newFrame.FrameType) + switch (newFrame.FrameTypeField) { case RenderTreeFrameType.Attribute: { @@ -771,7 +757,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree case RenderTreeFrameType.Element: { InitializeNewSubtree(ref diffContext, newFrameIndex); - var referenceFrameIndex = diffContext.ReferenceFrames.Append(newTree, newFrameIndex, newFrame.ElementSubtreeLength); + var referenceFrameIndex = diffContext.ReferenceFrames.Append(newTree, newFrameIndex, newFrame.ElementSubtreeLengthField); diffContext.Edits.Append(RenderTreeEdit.PrependFrame(diffContext.SiblingIndex, referenceFrameIndex)); diffContext.SiblingIndex++; break; @@ -779,7 +765,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree case RenderTreeFrameType.Region: { var regionChildFrameIndex = newFrameIndex + 1; - var regionChildFrameEndIndexExcl = newFrameIndex + newFrame.RegionSubtreeLength; + var regionChildFrameEndIndexExcl = newFrameIndex + newFrame.RegionSubtreeLengthField; while (regionChildFrameIndex < regionChildFrameEndIndexExcl) { InsertNewFrame(ref diffContext, regionChildFrameIndex); @@ -806,31 +792,29 @@ namespace Microsoft.AspNetCore.Components.RenderTree break; } default: - throw new NotImplementedException($"Unexpected frame type during {nameof(InsertNewFrame)}: {newFrame.FrameType}"); + throw new NotImplementedException($"Unexpected frame type during {nameof(InsertNewFrame)}: {newFrame.FrameTypeField}"); } - ProfilingEnd(); } private static void RemoveOldFrame(ref DiffContext diffContext, int oldFrameIndex) { - ProfilingStart(); var oldTree = diffContext.OldTree; ref var oldFrame = ref oldTree[oldFrameIndex]; - switch (oldFrame.FrameType) + switch (oldFrame.FrameTypeField) { case RenderTreeFrameType.Attribute: { - diffContext.Edits.Append(RenderTreeEdit.RemoveAttribute(diffContext.SiblingIndex, oldFrame.AttributeName)); - if (oldFrame.AttributeEventHandlerId > 0) + diffContext.Edits.Append(RenderTreeEdit.RemoveAttribute(diffContext.SiblingIndex, oldFrame.AttributeNameField)); + if (oldFrame.AttributeEventHandlerIdField > 0) { - diffContext.BatchBuilder.DisposedEventHandlerIds.Append(oldFrame.AttributeEventHandlerId); + diffContext.BatchBuilder.DisposedEventHandlerIds.Append(oldFrame.AttributeEventHandlerIdField); } break; } case RenderTreeFrameType.Component: case RenderTreeFrameType.Element: { - var endIndexExcl = oldFrameIndex + oldFrame.ElementSubtreeLength; + var endIndexExcl = oldFrameIndex + oldFrame.ElementSubtreeLengthField; DisposeFramesInRange(diffContext.BatchBuilder, oldTree, oldFrameIndex, endIndexExcl); diffContext.Edits.Append(RenderTreeEdit.RemoveFrame(diffContext.SiblingIndex)); break; @@ -838,7 +822,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree case RenderTreeFrameType.Region: { var regionChildFrameIndex = oldFrameIndex + 1; - var regionChildFrameEndIndexExcl = oldFrameIndex + oldFrame.RegionSubtreeLength; + var regionChildFrameEndIndexExcl = oldFrameIndex + oldFrame.RegionSubtreeLengthField; while (regionChildFrameIndex < regionChildFrameEndIndexExcl) { RemoveOldFrame(ref diffContext, regionChildFrameIndex); @@ -853,18 +837,17 @@ namespace Microsoft.AspNetCore.Components.RenderTree break; } default: - throw new NotImplementedException($"Unexpected frame type during {nameof(RemoveOldFrame)}: {oldFrame.FrameType}"); + throw new NotImplementedException($"Unexpected frame type during {nameof(RemoveOldFrame)}: {oldFrame.FrameTypeField}"); } - ProfilingEnd(); } private static int GetAttributesEndIndexExclusive(RenderTreeFrame[] tree, int rootIndex) { - var descendantsEndIndexExcl = rootIndex + tree[rootIndex].ElementSubtreeLength; + var descendantsEndIndexExcl = rootIndex + tree[rootIndex].ElementSubtreeLengthField; var index = rootIndex + 1; for (; index < descendantsEndIndexExcl; index++) { - if (tree[index].FrameType != RenderTreeFrameType.Attribute) + if (tree[index].FrameTypeField != RenderTreeFrameType.Attribute) { break; } @@ -889,13 +872,12 @@ namespace Microsoft.AspNetCore.Components.RenderTree private static void InitializeNewSubtree(ref DiffContext diffContext, int frameIndex) { - ProfilingStart(); var frames = diffContext.NewTree; - var endIndexExcl = frameIndex + frames[frameIndex].ElementSubtreeLength; + var endIndexExcl = frameIndex + frames[frameIndex].ElementSubtreeLengthField; for (var i = frameIndex; i < endIndexExcl; i++) { ref var frame = ref frames[i]; - switch (frame.FrameType) + switch (frame.FrameTypeField) { case RenderTreeFrameType.Component: InitializeNewComponentFrame(ref diffContext, i); @@ -911,29 +893,26 @@ namespace Microsoft.AspNetCore.Components.RenderTree break; } } - ProfilingEnd(); } private static void InitializeNewComponentFrame(ref DiffContext diffContext, int frameIndex) { - ProfilingStart(); var frames = diffContext.NewTree; ref var frame = ref frames[frameIndex]; - if (frame.ComponentState != null) + if (frame.ComponentStateField != null) { throw new InvalidOperationException($"Child component already exists during {nameof(InitializeNewComponentFrame)}"); } var parentComponentId = diffContext.ComponentId; diffContext.Renderer.InstantiateChildComponentOnFrame(ref frame, parentComponentId); - var childComponentState = frame.ComponentState; + var childComponentState = frame.ComponentStateField; // Set initial parameters var initialParametersLifetime = new ParameterViewLifetime(diffContext.BatchBuilder); var initialParameters = new ParameterView(initialParametersLifetime, frames, frameIndex); childComponentState.SetDirectParameters(initialParameters); - ProfilingEnd(); } private static void InitializeNewAttributeFrame(ref DiffContext diffContext, ref RenderTreeFrame newFrame) @@ -942,9 +921,9 @@ namespace Microsoft.AspNetCore.Components.RenderTree // // We're following a simple heuristic here that's reflected in the ts runtime // based on the common usage of attributes for DOM events. - if ((newFrame.AttributeValue is MulticastDelegate || newFrame.AttributeValue is EventCallback) && - newFrame.AttributeName.Length >= 3 && - newFrame.AttributeName.StartsWith("on")) + if ((newFrame.AttributeValueField is MulticastDelegate || newFrame.AttributeValueField is EventCallback) && + newFrame.AttributeNameField.Length >= 3 && + newFrame.AttributeNameField.StartsWith("on", StringComparison.Ordinal)) { diffContext.Renderer.AssignEventHandlerId(ref newFrame); } @@ -953,14 +932,14 @@ namespace Microsoft.AspNetCore.Components.RenderTree private static void InitializeNewElementReferenceCaptureFrame(ref DiffContext diffContext, ref RenderTreeFrame newFrame) { var newElementReference = ElementReference.CreateWithUniqueId(diffContext.Renderer.ElementReferenceContext); - newFrame = newFrame.WithElementReferenceCaptureId(newElementReference.Id); - newFrame.ElementReferenceCaptureAction(newElementReference); + newFrame.ElementReferenceCaptureIdField = newElementReference.Id; + newFrame.ElementReferenceCaptureActionField(newElementReference); } private static void InitializeNewComponentReferenceCaptureFrame(ref DiffContext diffContext, ref RenderTreeFrame newFrame) { - ref var parentFrame = ref diffContext.NewTree[newFrame.ComponentReferenceCaptureParentFrameIndex]; - if (parentFrame.FrameType != RenderTreeFrameType.Component) + ref var parentFrame = ref diffContext.NewTree[newFrame.ComponentReferenceCaptureParentFrameIndexField]; + if (parentFrame.FrameTypeField != RenderTreeFrameType.Component) { // Should never happen, but will help with diagnosis if it does throw new InvalidOperationException($"{nameof(RenderTreeFrameType.ComponentReferenceCapture)} frame references invalid parent index."); @@ -973,25 +952,23 @@ namespace Microsoft.AspNetCore.Components.RenderTree throw new InvalidOperationException($"Trying to initialize {nameof(RenderTreeFrameType.ComponentReferenceCapture)} frame before parent component was assigned."); } - newFrame.ComponentReferenceCaptureAction(componentInstance); + newFrame.ComponentReferenceCaptureActionField(componentInstance); } private static void DisposeFramesInRange(RenderBatchBuilder batchBuilder, RenderTreeFrame[] frames, int startIndex, int endIndexExcl) { - ProfilingStart(); for (var i = startIndex; i < endIndexExcl; i++) { ref var frame = ref frames[i]; - if (frame.FrameType == RenderTreeFrameType.Component && frame.ComponentState != null) + if (frame.FrameTypeField == RenderTreeFrameType.Component && frame.ComponentStateField != null) { - batchBuilder.ComponentDisposalQueue.Enqueue(frame.ComponentId); + batchBuilder.ComponentDisposalQueue.Enqueue(frame.ComponentIdField); } - else if (frame.FrameType == RenderTreeFrameType.Attribute && frame.AttributeEventHandlerId > 0) + else if (frame.FrameTypeField == RenderTreeFrameType.Attribute && frame.AttributeEventHandlerIdField > 0) { - batchBuilder.DisposedEventHandlerIds.Append(frame.AttributeEventHandlerId); + batchBuilder.DisposedEventHandlerIds.Append(frame.AttributeEventHandlerIdField); } } - ProfilingEnd(); } /// @@ -1033,18 +1010,5 @@ namespace Microsoft.AspNetCore.Components.RenderTree SiblingIndex = 0; } } - - // Having too many calls to ComponentsProfiling.Instance.Start/End has a measurable perf impact - // even when capturing is disabled. So, to enable detailed profiling for this class, define the - // Profile_RenderTreeDiffBuilder compiler symbol, otherwise the calls are compiled out entirely. - // Enabling detailed profiling adds about 5% to rendering benchmark times. - - [Conditional("Profile_RenderTreeDiffBuilder")] - private static void ProfilingStart([CallerMemberName] string? name = null) - => ComponentsProfiling.Instance.Start(name); - - [Conditional("Profile_RenderTreeDiffBuilder")] - private static void ProfilingEnd([CallerMemberName] string? name = null) - => ComponentsProfiling.Instance.End(name); } } diff --git a/src/Components/Components/src/RenderTree/RenderTreeFrame.cs b/src/Components/Components/src/RenderTree/RenderTreeFrame.cs index 8fc59cfc7b..ba6d2e5320 100644 --- a/src/Components/Components/src/RenderTree/RenderTreeFrame.cs +++ b/src/Components/Components/src/RenderTree/RenderTreeFrame.cs @@ -22,7 +22,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree // // Represents an entry in a tree of user interface (UI) items. [StructLayout(LayoutKind.Explicit, Pack = 4)] - public readonly struct RenderTreeFrame + public struct RenderTreeFrame { // Note that the struct layout has to be valid in both 32-bit and 64-bit runtime platforms, // which means that all reference-type fields need to take up 8 bytes (except for the last @@ -48,72 +48,86 @@ namespace Microsoft.AspNetCore.Components.RenderTree // Common // -------------------------------------------------------------------------------- + [FieldOffset(0)] internal int SequenceField; + [FieldOffset(4)] internal RenderTreeFrameType FrameTypeField; + /// /// Gets the sequence number of the frame. Sequence numbers indicate the relative source /// positions of the instructions that inserted the frames. Sequence numbers are only /// comparable within the same sequence (typically, the same source method). /// - [FieldOffset(0)] public readonly int Sequence; + public int Sequence => SequenceField; /// /// Describes the type of this frame. /// - [FieldOffset(4)] public readonly RenderTreeFrameType FrameType; + public RenderTreeFrameType FrameType => FrameTypeField; // -------------------------------------------------------------------------------- // RenderTreeFrameType.Element // -------------------------------------------------------------------------------- + [FieldOffset(8)] internal int ElementSubtreeLengthField; + [FieldOffset(16)] internal string ElementNameField; + [FieldOffset(24)] internal object ElementKeyField; + /// /// If the property equals /// gets the number of frames in the subtree for which this frame is the root. /// The value is zero if the frame has not yet been closed. /// - [FieldOffset(8)] public readonly int ElementSubtreeLength; + public int ElementSubtreeLength => ElementSubtreeLengthField; /// /// If the property equals , /// gets a name representing the type of the element. Otherwise, the value is undefined. /// - [FieldOffset(16)] public readonly string ElementName; + public string ElementName => ElementNameField; /// /// If the property equals , /// gets the element's diffing key, or null if none was specified. /// - [FieldOffset(24)] public readonly object ElementKey; + public object ElementKey => ElementKeyField; // -------------------------------------------------------------------------------- // RenderTreeFrameType.Text // -------------------------------------------------------------------------------- + [FieldOffset(16)] internal string TextContentField; + /// /// If the property equals , /// gets the content of the text frame. Otherwise, the value is undefined. /// - [FieldOffset(16)] public readonly string TextContent; + public string TextContent => TextContentField; // -------------------------------------------------------------------------------- // RenderTreeFrameType.Attribute // -------------------------------------------------------------------------------- + [FieldOffset(8)] internal ulong AttributeEventHandlerIdField; + [FieldOffset(16)] internal string AttributeNameField; + [FieldOffset(24)] internal object AttributeValueField; + [FieldOffset(32)] internal string AttributeEventUpdatesAttributeNameField; + /// /// If the property equals /// gets the ID of the corresponding event handler, if any. /// - [FieldOffset(8)] public readonly ulong AttributeEventHandlerId; + public ulong AttributeEventHandlerId => AttributeEventHandlerIdField; /// /// If the property equals , /// gets the attribute name. Otherwise, the value is undefined. /// - [FieldOffset(16)] public readonly string AttributeName; + public string AttributeName => AttributeNameField; /// /// If the property equals , /// gets the attribute value. Otherwise, the value is undefined. /// - [FieldOffset(24)] public readonly object AttributeValue; + public object AttributeValue => AttributeValueField; /// /// If the property equals , @@ -121,80 +135,94 @@ namespace Microsoft.AspNetCore.Components.RenderTree /// can be updated to represent the UI state prior to executing the event handler. This is /// primarily used in two-way bindings. /// - [FieldOffset(32)] public readonly string AttributeEventUpdatesAttributeName; + public string AttributeEventUpdatesAttributeName => AttributeEventUpdatesAttributeNameField; // -------------------------------------------------------------------------------- // RenderTreeFrameType.Component // -------------------------------------------------------------------------------- + [FieldOffset(8)] internal int ComponentSubtreeLengthField; + [FieldOffset(12)] internal int ComponentIdField; + [FieldOffset(16)] internal Type ComponentTypeField; + [FieldOffset(24)] internal ComponentState ComponentStateField; + [FieldOffset(32)] internal object ComponentKeyField; + /// /// If the property equals /// gets the number of frames in the subtree for which this frame is the root. /// The value is zero if the frame has not yet been closed. /// - [FieldOffset(8)] public readonly int ComponentSubtreeLength; + public int ComponentSubtreeLength => ComponentSubtreeLengthField; /// /// If the property equals , /// gets the child component instance identifier. /// - [FieldOffset(12)] public readonly int ComponentId; + public int ComponentId => ComponentIdField; /// /// If the property equals , /// gets the type of the child component. /// - [FieldOffset(16)] public readonly Type ComponentType; + public Type ComponentType => ComponentTypeField; /// /// If the property equals , /// gets the child component state object. Otherwise, the value is undefined. /// - [FieldOffset(24)] internal readonly ComponentState ComponentState; + internal ComponentState ComponentState => ComponentStateField; /// /// If the property equals , /// gets the component's diffing key, or null if none was specified. /// - [FieldOffset(32)] public readonly object ComponentKey; + public object ComponentKey => ComponentKeyField; /// /// If the property equals , /// gets the child component instance. Otherwise, the value is undefined. /// - public IComponent Component => ComponentState?.Component; + public IComponent Component => ComponentStateField?.Component; // -------------------------------------------------------------------------------- // RenderTreeFrameType.Region // -------------------------------------------------------------------------------- + [FieldOffset(8)] internal int RegionSubtreeLengthField; + /// /// If the property equals /// gets the number of frames in the subtree for which this frame is the root. /// The value is zero if the frame has not yet been closed. /// - [FieldOffset(8)] public readonly int RegionSubtreeLength; + public int RegionSubtreeLength => RegionSubtreeLengthField; // -------------------------------------------------------------------------------- // RenderTreeFrameType.ElementReferenceCapture // -------------------------------------------------------------------------------- + [FieldOffset(16)] internal string ElementReferenceCaptureIdField; + [FieldOffset(24)] internal Action ElementReferenceCaptureActionField; + /// /// If the property equals , /// gets the ID of the reference capture. Otherwise, the value is undefined. /// - [FieldOffset(16)] public readonly string ElementReferenceCaptureId; + public string ElementReferenceCaptureId => ElementReferenceCaptureIdField; /// /// If the property equals , /// gets the action that writes the reference to its target. Otherwise, the value is undefined. /// - [FieldOffset(24)] public readonly Action ElementReferenceCaptureAction; + public Action ElementReferenceCaptureAction => ElementReferenceCaptureActionField; // -------------------------------------------------------------------------------- // RenderTreeFrameType.ComponentReferenceCapture // -------------------------------------------------------------------------------- + [FieldOffset(8)] internal int ComponentReferenceCaptureParentFrameIndexField; + [FieldOffset(16)] internal Action ComponentReferenceCaptureActionField; + /// /// If the property equals , /// gets the index of the parent frame representing the component being captured. Otherwise, the value is undefined. @@ -205,49 +233,51 @@ namespace Microsoft.AspNetCore.Components.RenderTree /// initialization logic in RenderTreeDiffBuilder to walk the frames hierarchically, then it would know /// the parent index at the point where it wants to initialize the ComponentReferenceCapture frame. /// - [FieldOffset(8)] public readonly int ComponentReferenceCaptureParentFrameIndex; + public int ComponentReferenceCaptureParentFrameIndex => ComponentReferenceCaptureParentFrameIndexField; /// /// If the property equals , /// gets the action that writes the reference to its target. Otherwise, the value is undefined. /// - [FieldOffset(16)] public readonly Action ComponentReferenceCaptureAction; + public Action ComponentReferenceCaptureAction => ComponentReferenceCaptureActionField; // -------------------------------------------------------------------------------- // RenderTreeFrameType.Markup // -------------------------------------------------------------------------------- + [FieldOffset(16)] internal string MarkupContentField; + /// /// If the property equals , /// gets the content of the markup frame. Otherwise, the value is undefined. /// - [FieldOffset(16)] public readonly string MarkupContent; + public string MarkupContent => MarkupContentField; // Element constructor private RenderTreeFrame(int sequence, int elementSubtreeLength, string elementName, object elementKey) : this() { - Sequence = sequence; - FrameType = RenderTreeFrameType.Element; - ElementSubtreeLength = elementSubtreeLength; - ElementName = elementName; - ElementKey = elementKey; + SequenceField = sequence; + FrameTypeField = RenderTreeFrameType.Element; + ElementSubtreeLengthField = elementSubtreeLength; + ElementNameField = elementName; + ElementKeyField = elementKey; } // Component constructor private RenderTreeFrame(int sequence, int componentSubtreeLength, Type componentType, ComponentState componentState, object componentKey) : this() { - Sequence = sequence; - FrameType = RenderTreeFrameType.Component; - ComponentSubtreeLength = componentSubtreeLength; - ComponentType = componentType; - ComponentKey = componentKey; + SequenceField = sequence; + FrameTypeField = RenderTreeFrameType.Component; + ComponentSubtreeLengthField = componentSubtreeLength; + ComponentTypeField = componentType; + ComponentKeyField = componentKey; if (componentState != null) { - ComponentState = componentState; - ComponentId = componentState.ComponentId; + ComponentStateField = componentState; + ComponentIdField = componentState.ComponentId; } } @@ -255,25 +285,25 @@ namespace Microsoft.AspNetCore.Components.RenderTree private RenderTreeFrame(int sequence, int regionSubtreeLength) : this() { - Sequence = sequence; - FrameType = RenderTreeFrameType.Region; - RegionSubtreeLength = regionSubtreeLength; + SequenceField = sequence; + FrameTypeField = RenderTreeFrameType.Region; + RegionSubtreeLengthField = regionSubtreeLength; } // Text/markup constructor private RenderTreeFrame(int sequence, bool isMarkup, string textOrMarkup) : this() { - Sequence = sequence; + SequenceField = sequence; if (isMarkup) { - FrameType = RenderTreeFrameType.Markup; - MarkupContent = textOrMarkup; + FrameTypeField = RenderTreeFrameType.Markup; + MarkupContentField = textOrMarkup; } else { - FrameType = RenderTreeFrameType.Text; - TextContent = textOrMarkup; + FrameTypeField = RenderTreeFrameType.Text; + TextContentField = textOrMarkup; } } @@ -281,32 +311,32 @@ namespace Microsoft.AspNetCore.Components.RenderTree private RenderTreeFrame(int sequence, string attributeName, object attributeValue, ulong attributeEventHandlerId, string attributeEventUpdatesAttributeName) : this() { - FrameType = RenderTreeFrameType.Attribute; - Sequence = sequence; - AttributeName = attributeName; - AttributeValue = attributeValue; - AttributeEventHandlerId = attributeEventHandlerId; - AttributeEventUpdatesAttributeName = attributeEventUpdatesAttributeName; + FrameTypeField = RenderTreeFrameType.Attribute; + SequenceField = sequence; + AttributeNameField = attributeName; + AttributeValueField = attributeValue; + AttributeEventHandlerIdField = attributeEventHandlerId; + AttributeEventUpdatesAttributeNameField = attributeEventUpdatesAttributeName; } // Element reference capture constructor private RenderTreeFrame(int sequence, Action elementReferenceCaptureAction, string elementReferenceCaptureId) : this() { - FrameType = RenderTreeFrameType.ElementReferenceCapture; - Sequence = sequence; - ElementReferenceCaptureAction = elementReferenceCaptureAction; - ElementReferenceCaptureId = elementReferenceCaptureId; + FrameTypeField = RenderTreeFrameType.ElementReferenceCapture; + SequenceField = sequence; + ElementReferenceCaptureActionField = elementReferenceCaptureAction; + ElementReferenceCaptureIdField = elementReferenceCaptureId; } // Component reference capture constructor private RenderTreeFrame(int sequence, Action componentReferenceCaptureAction, int parentFrameIndex) : this() { - FrameType = RenderTreeFrameType.ComponentReferenceCapture; - Sequence = sequence; - ComponentReferenceCaptureAction = componentReferenceCaptureAction; - ComponentReferenceCaptureParentFrameIndex = parentFrameIndex; + FrameTypeField = RenderTreeFrameType.ComponentReferenceCapture; + SequenceField = sequence; + ComponentReferenceCaptureActionField = componentReferenceCaptureAction; + ComponentReferenceCaptureParentFrameIndexField = parentFrameIndex; } internal static RenderTreeFrame Element(int sequence, string elementName) @@ -337,61 +367,61 @@ namespace Microsoft.AspNetCore.Components.RenderTree => new RenderTreeFrame(sequence, componentReferenceCaptureAction: componentReferenceCaptureAction, parentFrameIndex: parentFrameIndex); internal RenderTreeFrame WithElementSubtreeLength(int elementSubtreeLength) - => new RenderTreeFrame(Sequence, elementSubtreeLength: elementSubtreeLength, ElementName, ElementKey); + => new RenderTreeFrame(SequenceField, elementSubtreeLength: elementSubtreeLength, ElementNameField, ElementKeyField); internal RenderTreeFrame WithComponentSubtreeLength(int componentSubtreeLength) - => new RenderTreeFrame(Sequence, componentSubtreeLength: componentSubtreeLength, ComponentType, ComponentState, ComponentKey); + => new RenderTreeFrame(SequenceField, componentSubtreeLength: componentSubtreeLength, ComponentTypeField, ComponentStateField, ComponentKeyField); internal RenderTreeFrame WithAttributeSequence(int sequence) - => new RenderTreeFrame(sequence, attributeName: AttributeName, AttributeValue, AttributeEventHandlerId, AttributeEventUpdatesAttributeName); + => new RenderTreeFrame(sequence, attributeName: AttributeNameField, AttributeValueField, AttributeEventHandlerIdField, AttributeEventUpdatesAttributeNameField); internal RenderTreeFrame WithComponent(ComponentState componentState) - => new RenderTreeFrame(Sequence, componentSubtreeLength: ComponentSubtreeLength, ComponentType, componentState, ComponentKey); + => new RenderTreeFrame(SequenceField, componentSubtreeLength: ComponentSubtreeLengthField, ComponentTypeField, componentState, ComponentKeyField); internal RenderTreeFrame WithAttributeEventHandlerId(ulong eventHandlerId) - => new RenderTreeFrame(Sequence, attributeName: AttributeName, AttributeValue, eventHandlerId, AttributeEventUpdatesAttributeName); + => new RenderTreeFrame(SequenceField, attributeName: AttributeNameField, AttributeValueField, eventHandlerId, AttributeEventUpdatesAttributeNameField); internal RenderTreeFrame WithAttributeValue(object attributeValue) - => new RenderTreeFrame(Sequence, attributeName: AttributeName, attributeValue, AttributeEventHandlerId, AttributeEventUpdatesAttributeName); + => new RenderTreeFrame(SequenceField, attributeName: AttributeNameField, attributeValue, AttributeEventHandlerIdField, AttributeEventUpdatesAttributeNameField); internal RenderTreeFrame WithAttributeEventUpdatesAttributeName(string attributeUpdatesAttributeName) - => new RenderTreeFrame(Sequence, attributeName: AttributeName, AttributeValue, AttributeEventHandlerId, attributeUpdatesAttributeName); + => new RenderTreeFrame(SequenceField, attributeName: AttributeNameField, AttributeValueField, AttributeEventHandlerIdField, attributeUpdatesAttributeName); internal RenderTreeFrame WithRegionSubtreeLength(int regionSubtreeLength) - => new RenderTreeFrame(Sequence, regionSubtreeLength: regionSubtreeLength); + => new RenderTreeFrame(SequenceField, regionSubtreeLength: regionSubtreeLength); internal RenderTreeFrame WithElementReferenceCaptureId(string elementReferenceCaptureId) - => new RenderTreeFrame(Sequence, elementReferenceCaptureAction: ElementReferenceCaptureAction, elementReferenceCaptureId); + => new RenderTreeFrame(SequenceField, elementReferenceCaptureAction: ElementReferenceCaptureActionField, elementReferenceCaptureId); internal RenderTreeFrame WithElementKey(object elementKey) - => new RenderTreeFrame(Sequence, elementSubtreeLength: ElementSubtreeLength, ElementName, elementKey); + => new RenderTreeFrame(SequenceField, elementSubtreeLength: ElementSubtreeLengthField, ElementNameField, elementKey); internal RenderTreeFrame WithComponentKey(object componentKey) - => new RenderTreeFrame(Sequence, componentSubtreeLength: ComponentSubtreeLength, ComponentType, ComponentState, componentKey); + => new RenderTreeFrame(SequenceField, componentSubtreeLength: ComponentSubtreeLengthField, ComponentTypeField, ComponentStateField, componentKey); /// // Just to be nice for debugging and unit tests. public override string ToString() { - switch (FrameType) + switch (FrameTypeField) { case RenderTreeFrameType.Attribute: return $"Attribute: (seq={Sequence}, id={AttributeEventHandlerId}) '{AttributeName}'='{AttributeValue}'"; case RenderTreeFrameType.Component: - return $"Component: (seq={Sequence}, key={ComponentKey ?? "(none)"}, len={ComponentSubtreeLength}) {ComponentType}"; + return $"Component: (seq={Sequence}, key={ComponentKeyField ?? "(none)"}, len={ComponentSubtreeLength}) {ComponentType}"; case RenderTreeFrameType.Element: - return $"Element: (seq={Sequence}, key={ElementKey ?? "(none)"}, len={ElementSubtreeLength}) {ElementName}"; + return $"Element: (seq={Sequence}, key={ElementKeyField ?? "(none)"}, len={ElementSubtreeLength}) {ElementName}"; case RenderTreeFrameType.Region: return $"Region: (seq={Sequence}, len={RegionSubtreeLength})"; case RenderTreeFrameType.Text: - return $"Text: (seq={Sequence}, len=n/a) {EscapeNewlines(TextContent)}"; + return $"Text: (seq={Sequence}, len=n/a) {EscapeNewlines(TextContentField)}"; case RenderTreeFrameType.Markup: - return $"Markup: (seq={Sequence}, len=n/a) {EscapeNewlines(TextContent)}"; + return $"Markup: (seq={Sequence}, len=n/a) {EscapeNewlines(TextContentField)}"; case RenderTreeFrameType.ElementReferenceCapture: return $"ElementReferenceCapture: (seq={Sequence}, len=n/a) {ElementReferenceCaptureAction}"; diff --git a/src/Components/Components/src/RenderTree/RenderTreeFrameArrayBuilder.cs b/src/Components/Components/src/RenderTree/RenderTreeFrameArrayBuilder.cs new file mode 100644 index 0000000000..817a0fd1a5 --- /dev/null +++ b/src/Components/Components/src/RenderTree/RenderTreeFrameArrayBuilder.cs @@ -0,0 +1,137 @@ +// 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.Components.RenderTree +{ + /// + /// A special subclass of that contains methods optimized for appending entries. + /// + internal class RenderTreeFrameArrayBuilder : ArrayBuilder + { + // You may notice a repeated block at the top of each of these methods. This is intentionally inlined into each + // method because doing so improves intensive rendering scenarios by around 1% (based on the FastGrid benchmark). + + public void AppendElement(int sequence, string elementName) + { + if (_itemsInUse == _items.Length) + { + GrowBuffer(_items.Length * 2); + } + + _items[_itemsInUse++] = new RenderTreeFrame + { + SequenceField = sequence, + FrameTypeField = RenderTreeFrameType.Element, + ElementNameField = elementName, + }; + } + + public void AppendText(int sequence, string textContent) + { + if (_itemsInUse == _items.Length) + { + GrowBuffer(_items.Length * 2); + } + + _items[_itemsInUse++] = new RenderTreeFrame + { + SequenceField = sequence, + FrameTypeField = RenderTreeFrameType.Text, + TextContentField = textContent, + }; + } + + public void AppendMarkup(int sequence, string markupContent) + { + if (_itemsInUse == _items.Length) + { + GrowBuffer(_items.Length * 2); + } + + _items[_itemsInUse++] = new RenderTreeFrame + { + SequenceField = sequence, + FrameTypeField = RenderTreeFrameType.Markup, + MarkupContentField = markupContent, + }; + } + + public void AppendAttribute(int sequence, string attributeName, object? attributeValue) + { + if (_itemsInUse == _items.Length) + { + GrowBuffer(_items.Length * 2); + } + + _items[_itemsInUse++] = new RenderTreeFrame + { + SequenceField = sequence, + FrameTypeField = RenderTreeFrameType.Attribute, + AttributeNameField = attributeName, + AttributeValueField = attributeValue, + }; + } + + public void AppendComponent(int sequence, Type componentType) + { + if (_itemsInUse == _items.Length) + { + GrowBuffer(_items.Length * 2); + } + + _items[_itemsInUse++] = new RenderTreeFrame + { + SequenceField = sequence, + FrameTypeField = RenderTreeFrameType.Component, + ComponentTypeField = componentType, + }; + } + + public void AppendElementReferenceCapture(int sequence, Action elementReferenceCaptureAction) + { + if (_itemsInUse == _items.Length) + { + GrowBuffer(_items.Length * 2); + } + + _items[_itemsInUse++] = new RenderTreeFrame + { + SequenceField = sequence, + FrameTypeField = RenderTreeFrameType.ElementReferenceCapture, + ElementReferenceCaptureActionField = elementReferenceCaptureAction, + }; + } + + public void AppendComponentReferenceCapture(int sequence, Action componentReferenceCaptureAction, int parentFrameIndexValue) + { + if (_itemsInUse == _items.Length) + { + GrowBuffer(_items.Length * 2); + } + + _items[_itemsInUse++] = new RenderTreeFrame + { + SequenceField = sequence, + FrameTypeField = RenderTreeFrameType.ComponentReferenceCapture, + ComponentReferenceCaptureActionField = componentReferenceCaptureAction, + ComponentReferenceCaptureParentFrameIndexField = parentFrameIndexValue, + }; + } + + public void AppendRegion(int sequence) + { + if (_itemsInUse == _items.Length) + { + GrowBuffer(_items.Length * 2); + } + + _items[_itemsInUse++] = new RenderTreeFrame + { + SequenceField = sequence, + FrameTypeField = RenderTreeFrameType.Region, + }; + } + } +} diff --git a/src/Components/Components/src/RenderTree/Renderer.cs b/src/Components/Components/src/RenderTree/Renderer.cs index 446243201f..e61e46f65d 100644 --- a/src/Components/Components/src/RenderTree/Renderer.cs +++ b/src/Components/Components/src/RenderTree/Renderer.cs @@ -8,7 +8,6 @@ using System.Collections.Generic; using System.Diagnostics; using System.Threading; using System.Threading.Tasks; -using Microsoft.AspNetCore.Components.Profiling; using Microsoft.AspNetCore.Components.Rendering; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; @@ -247,7 +246,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree /// public virtual Task DispatchEventAsync(ulong eventHandlerId, EventFieldInfo fieldInfo, EventArgs eventArgs) { - ComponentsProfiling.Instance.Start(); Dispatcher.AssertAccess(); if (!_eventBindings.TryGetValue(eventHandlerId, out var callback)) @@ -275,7 +273,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree catch (Exception e) { HandleException(e); - ComponentsProfiling.Instance.End(); return Task.CompletedTask; } finally @@ -290,25 +287,25 @@ namespace Microsoft.AspNetCore.Components.RenderTree // Task completed synchronously or is still running. We already processed all of the rendering // work that was queued so let our error handler deal with it. var result = GetErrorHandledTask(task); - ComponentsProfiling.Instance.End(); return result; } internal void InstantiateChildComponentOnFrame(ref RenderTreeFrame frame, int parentComponentId) { - if (frame.FrameType != RenderTreeFrameType.Component) + if (frame.FrameTypeField != RenderTreeFrameType.Component) { throw new ArgumentException($"The frame's {nameof(RenderTreeFrame.FrameType)} property must equal {RenderTreeFrameType.Component}", nameof(frame)); } - if (frame.ComponentState != null) + if (frame.ComponentStateField != null) { throw new ArgumentException($"The frame already has a non-null component instance", nameof(frame)); } - var newComponent = InstantiateComponent(frame.ComponentType); + var newComponent = InstantiateComponent(frame.ComponentTypeField); var newComponentState = AttachAndInitComponent(newComponent, parentComponentId); - frame = frame.WithComponent(newComponentState); + frame.ComponentStateField = newComponentState; + frame.ComponentIdField = newComponentState.ComponentId; } internal void AddToPendingTasks(Task task) @@ -346,7 +343,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree { var id = ++_lastEventHandlerId; - if (frame.AttributeValue is EventCallback callback) + if (frame.AttributeValueField is EventCallback callback) { // We hit this case when a EventCallback object is produced that needs an explicit receiver. // Common cases for this are "chained bind" or "chained event handler" when a component @@ -356,7 +353,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree // the receiver. _eventBindings.Add(id, callback); } - else if (frame.AttributeValue is MulticastDelegate @delegate) + else if (frame.AttributeValueField is MulticastDelegate @delegate) { // This is the common case for a delegate, where the receiver of the event // is the same as delegate.Target. In this case since the receiver is implicit we can @@ -368,7 +365,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree // NOTE: we do not to handle EventCallback here. EventCallback is only used when passing // a callback to a component, and never when used to attaching a DOM event handler. - frame = frame.WithAttributeEventHandlerId(id); + frame.AttributeEventHandlerIdField = id; } /// @@ -441,7 +438,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree private void ProcessRenderQueue() { - ComponentsProfiling.Instance.Start(); Dispatcher.AssertAccess(); if (_isBatchInProgress) @@ -456,7 +452,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree { if (_batchBuilder.ComponentRenderQueue.Count == 0) { - ComponentsProfiling.Instance.End(); return; } @@ -468,9 +463,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree } var batch = _batchBuilder.ToBatch(); - ComponentsProfiling.Instance.Start(nameof(UpdateDisplayAsync)); updateDisplayTask = UpdateDisplayAsync(batch); - ComponentsProfiling.Instance.End(nameof(UpdateDisplayAsync)); // Fire off the execution of OnAfterRenderAsync, but don't wait for it // if there is async work to be done. @@ -480,7 +473,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree { // Ensure we catch errors while running the render functions of the components. HandleException(e); - ComponentsProfiling.Instance.End(); return; } finally @@ -498,7 +490,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree { ProcessRenderQueue(); } - ComponentsProfiling.Instance.End(); } private Task InvokeRenderCompletedCalls(ArrayRange updatedComponents, Task updateDisplayTask) @@ -634,11 +625,43 @@ namespace Microsoft.AspNetCore.Components.RenderTree var disposeComponentId = _batchBuilder.ComponentDisposalQueue.Dequeue(); var disposeComponentState = GetRequiredComponentState(disposeComponentId); Log.DisposingComponent(_logger, disposeComponentState); - if (!disposeComponentState.TryDisposeInBatch(_batchBuilder, out var exception)) + if (!(disposeComponentState.Component is IAsyncDisposable)) { - exceptions ??= new List(); - exceptions.Add(exception); + if (!disposeComponentState.TryDisposeInBatch(_batchBuilder, out var exception)) + { + exceptions ??= new List(); + exceptions.Add(exception); + } } + else + { + var result = disposeComponentState.DisposeInBatchAsync(_batchBuilder); + if (result.IsCompleted) + { + if (!result.IsCompletedSuccessfully) + { + exceptions ??= new List(); + exceptions.Add(result.Exception); + } + } + else + { + AddToPendingTasks(GetHandledAsynchronousDisposalErrorsTask(result)); + + async Task GetHandledAsynchronousDisposalErrorsTask(Task result) + { + try + { + await result; + } + catch (Exception e) + { + HandleException(e); + } + } + } + } + _componentStateById.Remove(disposeComponentId); _batchBuilder.DisposedComponentIds.Append(disposeComponentId); } diff --git a/src/Components/Components/src/Rendering/ComponentState.cs b/src/Components/Components/src/Rendering/ComponentState.cs index 7b755efd5d..3bff9bcfc8 100644 --- a/src/Components/Components/src/Rendering/ComponentState.cs +++ b/src/Components/Components/src/Rendering/ComponentState.cs @@ -5,7 +5,6 @@ using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Threading.Tasks; -using Microsoft.AspNetCore.Components.Profiling; using Microsoft.AspNetCore.Components.RenderTree; namespace Microsoft.AspNetCore.Components.Rendering @@ -57,7 +56,6 @@ namespace Microsoft.AspNetCore.Components.Rendering public void RenderIntoBatch(RenderBatchBuilder batchBuilder, RenderFragment renderFragment) { - ComponentsProfiling.Instance.Start(); // A component might be in the render queue already before getting disposed by an // earlier entry in the render queue. In that case, rendering is a no-op. if (_componentWasDisposed) @@ -69,9 +67,7 @@ namespace Microsoft.AspNetCore.Components.Rendering (CurrentRenderTree, _renderTreeBuilderPrevious) = (_renderTreeBuilderPrevious, CurrentRenderTree); CurrentRenderTree.Clear(); - ComponentsProfiling.Instance.Start("BuildRenderTree"); renderFragment(CurrentRenderTree); - ComponentsProfiling.Instance.End("BuildRenderTree"); var diff = RenderTreeDiffBuilder.ComputeDiff( _renderer, @@ -81,7 +77,6 @@ namespace Microsoft.AspNetCore.Components.Rendering CurrentRenderTree.GetFrames()); batchBuilder.UpdatedComponentDiffs.Append(diff); batchBuilder.InvalidateParameterViews(); - ComponentsProfiling.Instance.End(); } public bool TryDisposeInBatch(RenderBatchBuilder batchBuilder, [NotNullWhen(false)] out Exception? exception) @@ -101,6 +96,13 @@ namespace Microsoft.AspNetCore.Components.Rendering exception = ex; } + CleanupComponentStateResources(batchBuilder); + + return exception == null; + } + + private void CleanupComponentStateResources(RenderBatchBuilder batchBuilder) + { // We don't expect these things to throw. RenderTreeDiffBuilder.DisposeFrames(batchBuilder, CurrentRenderTree.GetFrames()); @@ -110,8 +112,6 @@ namespace Microsoft.AspNetCore.Components.Rendering } DisposeBuffers(); - - return exception == null; } // Callers expect this method to always return a faulted task. @@ -222,5 +222,31 @@ namespace Microsoft.AspNetCore.Components.Rendering ((IDisposable)CurrentRenderTree).Dispose(); _latestDirectParametersSnapshot?.Dispose(); } + + public Task DisposeInBatchAsync(RenderBatchBuilder batchBuilder) + { + _componentWasDisposed = true; + + CleanupComponentStateResources(batchBuilder); + + try + { + var result = ((IAsyncDisposable)Component).DisposeAsync(); + if (result.IsCompletedSuccessfully) + { + return Task.CompletedTask; + } + else + { + // We know we are dealing with an exception that happened asynchronously, so return a task + // to the caller so that he can unwrap it. + return result.AsTask(); + } + } + catch (Exception e) + { + return Task.FromException(e); + } + } } } diff --git a/src/Components/Components/src/Rendering/RenderTreeBuilder.cs b/src/Components/Components/src/Rendering/RenderTreeBuilder.cs index 4e9280c70f..c3d1edcd50 100644 --- a/src/Components/Components/src/Rendering/RenderTreeBuilder.cs +++ b/src/Components/Components/src/Rendering/RenderTreeBuilder.cs @@ -5,7 +5,6 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.CompilerServices; -using Microsoft.AspNetCore.Components.Profiling; using Microsoft.AspNetCore.Components.RenderTree; namespace Microsoft.AspNetCore.Components.Rendering @@ -24,7 +23,7 @@ namespace Microsoft.AspNetCore.Components.Rendering private readonly static object BoxedFalse = false; private readonly static string ComponentReferenceCaptureInvalidParentMessage = $"Component reference captures may only be added as children of frames of type {RenderTreeFrameType.Component}"; - private readonly ArrayBuilder _entries = new ArrayBuilder(); + private readonly RenderTreeFrameArrayBuilder _entries = new RenderTreeFrameArrayBuilder(); private readonly Stack _openElementIndices = new Stack(); private RenderTreeFrameType? _lastNonAttributeFrameType; private bool _hasSeenAddMultipleAttributes; @@ -45,7 +44,6 @@ namespace Microsoft.AspNetCore.Components.Rendering /// A value representing the type of the element. public void OpenElement(int sequence, string elementName) { - ProfilingStart(); // We are entering a new scope, since we track the "duplicate attributes" per // element/component we might need to clean them up now. if (_hasSeenAddMultipleAttributes) @@ -55,8 +53,8 @@ namespace Microsoft.AspNetCore.Components.Rendering } _openElementIndices.Push(_entries.Count); - Append(RenderTreeFrame.Element(sequence, elementName)); - ProfilingEnd(); + _entries.AppendElement(sequence, elementName); + _lastNonAttributeFrameType = RenderTreeFrameType.Element; } /// @@ -65,7 +63,6 @@ namespace Microsoft.AspNetCore.Components.Rendering /// public void CloseElement() { - ProfilingStart(); var indexOfEntryBeingClosed = _openElementIndices.Pop(); // We might be closing an element with only attributes, run the duplicate cleanup pass @@ -75,9 +72,7 @@ namespace Microsoft.AspNetCore.Components.Rendering ProcessDuplicateAttributes(first: indexOfEntryBeingClosed + 1); } - ref var entry = ref _entries.Buffer[indexOfEntryBeingClosed]; - entry = entry.WithElementSubtreeLength(_entries.Count - indexOfEntryBeingClosed); - ProfilingEnd(); + _entries.Buffer[indexOfEntryBeingClosed].ElementSubtreeLengthField = _entries.Count - indexOfEntryBeingClosed; } /// @@ -87,9 +82,8 @@ namespace Microsoft.AspNetCore.Components.Rendering /// Content for the new markup frame. public void AddMarkupContent(int sequence, string? markupContent) { - ProfilingStart(); - Append(RenderTreeFrame.Markup(sequence, markupContent ?? string.Empty)); - ProfilingEnd(); + _entries.AppendMarkup(sequence, markupContent ?? string.Empty); + _lastNonAttributeFrameType = RenderTreeFrameType.Markup; } /// @@ -99,9 +93,8 @@ namespace Microsoft.AspNetCore.Components.Rendering /// Content for the new text frame. public void AddContent(int sequence, string? textContent) { - ProfilingStart(); - Append(RenderTreeFrame.Text(sequence, textContent ?? string.Empty)); - ProfilingEnd(); + _entries.AppendText(sequence, textContent ?? string.Empty); + _lastNonAttributeFrameType = RenderTreeFrameType.Text; } /// @@ -111,7 +104,6 @@ namespace Microsoft.AspNetCore.Components.Rendering /// Content to append. public void AddContent(int sequence, RenderFragment? fragment) { - ProfilingStart(); if (fragment != null) { // We surround the fragment with a region delimiter to indicate that the @@ -122,7 +114,6 @@ namespace Microsoft.AspNetCore.Components.Rendering fragment(this); CloseRegion(); } - ProfilingEnd(); } /// @@ -133,12 +124,10 @@ namespace Microsoft.AspNetCore.Components.Rendering /// The value used by . public void AddContent(int sequence, RenderFragment? fragment, TValue value) { - ProfilingStart(); if (fragment != null) { AddContent(sequence, fragment(value)); } - ProfilingEnd(); } /// @@ -169,15 +158,13 @@ namespace Microsoft.AspNetCore.Components.Rendering /// The name of the attribute. public void AddAttribute(int sequence, string name) { - ProfilingStart(); - if (_lastNonAttributeFrameType != RenderTreeFrameType.Element) { throw new InvalidOperationException($"Valueless attributes may only be added immediately after frames of type {RenderTreeFrameType.Element}"); } - Append(RenderTreeFrame.Attribute(sequence, name, BoxedTrue)); - ProfilingEnd(); + + _entries.AppendAttribute(sequence, name, BoxedTrue); } /// @@ -194,23 +181,21 @@ namespace Microsoft.AspNetCore.Components.Rendering /// The value of the attribute. public void AddAttribute(int sequence, string name, bool value) { - ProfilingStart(); AssertCanAddAttribute(); if (_lastNonAttributeFrameType == RenderTreeFrameType.Component) { - Append(RenderTreeFrame.Attribute(sequence, name, value ? BoxedTrue : BoxedFalse)); + _entries.AppendAttribute(sequence, name, value ? BoxedTrue : BoxedFalse); } else if (value) { // Don't add 'false' attributes for elements. We want booleans to map to the presence // or absence of an attribute, and false => "False" which isn't falsy in js. - Append(RenderTreeFrame.Attribute(sequence, name, BoxedTrue)); + _entries.AppendAttribute(sequence, name, BoxedTrue); } else { TrackAttributeName(name); } - ProfilingEnd(); } /// @@ -227,17 +212,15 @@ namespace Microsoft.AspNetCore.Components.Rendering /// The value of the attribute. public void AddAttribute(int sequence, string name, string? value) { - ProfilingStart(); AssertCanAddAttribute(); if (value != null || _lastNonAttributeFrameType == RenderTreeFrameType.Component) { - Append(RenderTreeFrame.Attribute(sequence, name, value)); + _entries.AppendAttribute(sequence, name, value); } else { TrackAttributeName(name); } - ProfilingEnd(); } /// @@ -254,17 +237,15 @@ namespace Microsoft.AspNetCore.Components.Rendering /// The value of the attribute. public void AddAttribute(int sequence, string name, MulticastDelegate? value) { - ProfilingStart(); AssertCanAddAttribute(); if (value != null || _lastNonAttributeFrameType == RenderTreeFrameType.Component) { - Append(RenderTreeFrame.Attribute(sequence, name, value)); + _entries.AppendAttribute(sequence, name, value); } else { TrackAttributeName(name); } - ProfilingEnd(); } /// @@ -285,32 +266,30 @@ namespace Microsoft.AspNetCore.Components.Rendering /// public void AddAttribute(int sequence, string name, EventCallback value) { - ProfilingStart(); AssertCanAddAttribute(); if (_lastNonAttributeFrameType == RenderTreeFrameType.Component) { // Since this is a component, we need to preserve the type of the EventCallback, so we have // to box. - Append(RenderTreeFrame.Attribute(sequence, name, (object)value)); + _entries.AppendAttribute(sequence, name, value); } else if (value.RequiresExplicitReceiver) { // If we need to preserve the receiver, we just box the EventCallback // so we can get it out on the other side. - Append(RenderTreeFrame.Attribute(sequence, name, (object)value)); + _entries.AppendAttribute(sequence, name, value); } else if (value.HasDelegate) { // In the common case the receiver is also the delegate's target, so we // just need to retain the delegate. This allows us to avoid an allocation. - Append(RenderTreeFrame.Attribute(sequence, name, value.Delegate)); + _entries.AppendAttribute(sequence, name, value.Delegate); } else { // Track the attribute name if needed since we elided the frame. TrackAttributeName(name); } - ProfilingEnd(); } /// @@ -331,32 +310,30 @@ namespace Microsoft.AspNetCore.Components.Rendering /// public void AddAttribute(int sequence, string name, EventCallback value) { - ProfilingStart(); AssertCanAddAttribute(); if (_lastNonAttributeFrameType == RenderTreeFrameType.Component) { // Since this is a component, we need to preserve the type of the EventCallback, so we have // to box. - Append(RenderTreeFrame.Attribute(sequence, name, (object)value)); + _entries.AppendAttribute(sequence, name, value); } else if (value.RequiresExplicitReceiver) { // If we need to preserve the receiver - we convert this to an untyped EventCallback. We don't // need to preserve the type of an EventCallback when it's invoked from the DOM. - Append(RenderTreeFrame.Attribute(sequence, name, (object)value.AsUntyped())); + _entries.AppendAttribute(sequence, name, value.AsUntyped()); } else if (value.HasDelegate) { // In the common case the receiver is also the delegate's target, so we // just need to retain the delegate. This allows us to avoid an allocation. - Append(RenderTreeFrame.Attribute(sequence, name, value.Delegate)); + _entries.AppendAttribute(sequence, name, value.Delegate); } else { // Track the attribute name if needed since we elided the frame. TrackAttributeName(name); } - ProfilingEnd(); } /// @@ -370,7 +347,6 @@ namespace Microsoft.AspNetCore.Components.Rendering /// The value of the attribute. public void AddAttribute(int sequence, string name, object? value) { - ProfilingStart(); // This looks a bit daunting because we need to handle the boxed/object version of all of the // types that AddAttribute special cases. if (_lastNonAttributeFrameType == RenderTreeFrameType.Element) @@ -384,7 +360,7 @@ namespace Microsoft.AspNetCore.Components.Rendering { if (boolValue) { - Append(RenderTreeFrame.Attribute(sequence, name, BoxedTrue)); + _entries.AppendAttribute(sequence, name, BoxedTrue); } else { @@ -396,7 +372,7 @@ namespace Microsoft.AspNetCore.Components.Rendering { if (callbackValue.HasDelegate) { - Append(RenderTreeFrame.Attribute(sequence, name, callbackValue.UnpackForRenderTree())); + _entries.AppendAttribute(sequence, name, callbackValue.UnpackForRenderTree()); } else { @@ -405,25 +381,24 @@ namespace Microsoft.AspNetCore.Components.Rendering } else if (value is MulticastDelegate) { - Append(RenderTreeFrame.Attribute(sequence, name, value)); + _entries.AppendAttribute(sequence, name, value); } else { // The value is either a string, or should be treated as a string. - Append(RenderTreeFrame.Attribute(sequence, name, value.ToString())); + _entries.AppendAttribute(sequence, name, value.ToString()); } } else if (_lastNonAttributeFrameType == RenderTreeFrameType.Component) { // If this is a component, we always want to preserve the original type. - Append(RenderTreeFrame.Attribute(sequence, name, value)); + _entries.AppendAttribute(sequence, name, value); } else { // This is going to throw. Calling it just to get a consistent exception message. AssertCanAddAttribute(); } - ProfilingEnd(); } /// @@ -436,17 +411,16 @@ namespace Microsoft.AspNetCore.Components.Rendering /// /// An integer that represents the position of the instruction in the source code. /// A holding the name and value of the attribute. - public void AddAttribute(int sequence, in RenderTreeFrame frame) + public void AddAttribute(int sequence, RenderTreeFrame frame) { - ProfilingStart(); - if (frame.FrameType != RenderTreeFrameType.Attribute) + if (frame.FrameTypeField != RenderTreeFrameType.Attribute) { throw new ArgumentException($"The {nameof(frame.FrameType)} must be {RenderTreeFrameType.Attribute}."); } AssertCanAddAttribute(); - Append(frame.WithAttributeSequence(sequence)); - ProfilingEnd(); + frame.SequenceField = sequence; + _entries.Append(frame); } /// @@ -456,7 +430,6 @@ namespace Microsoft.AspNetCore.Components.Rendering /// A collection of key-value pairs representing attributes. public void AddMultipleAttributes(int sequence, IEnumerable>? attributes) { - ProfilingStart(); // Calling this up-front just to make sure we validate before mutating anything. AssertCanAddAttribute(); @@ -473,7 +446,6 @@ namespace Microsoft.AspNetCore.Components.Rendering AddAttribute(sequence, attribute.Key, attribute.Value); } } - ProfilingEnd(); } /// @@ -490,20 +462,18 @@ namespace Microsoft.AspNetCore.Components.Rendering /// The name of another attribute whose value can be updated when the event handler is executed. public void SetUpdatesAttributeName(string updatesAttributeName) { - ProfilingStart(); if (_entries.Count == 0) { throw new InvalidOperationException("No preceding attribute frame exists."); } ref var prevFrame = ref _entries.Buffer[_entries.Count - 1]; - if (prevFrame.FrameType != RenderTreeFrameType.Attribute) + if (prevFrame.FrameTypeField != RenderTreeFrameType.Attribute) { - throw new InvalidOperationException($"Incorrect frame type: '{prevFrame.FrameType}'"); + throw new InvalidOperationException($"Incorrect frame type: '{prevFrame.FrameTypeField}'"); } - prevFrame = prevFrame.WithAttributeEventUpdatesAttributeName(updatesAttributeName); - ProfilingEnd(); + prevFrame.AttributeEventUpdatesAttributeNameField = updatesAttributeName; } /// @@ -535,12 +505,10 @@ namespace Microsoft.AspNetCore.Components.Rendering /// The value for the key. public void SetKey(object? value) { - ProfilingStart(); if (value == null) { // Null is equivalent to not having set a key, which is valuable because Razor syntax doesn't have an // easy way to have conditional directive attributes - ProfilingEnd(); return; } @@ -552,23 +520,21 @@ namespace Microsoft.AspNetCore.Components.Rendering var parentFrameIndexValue = parentFrameIndex.Value; ref var parentFrame = ref _entries.Buffer[parentFrameIndexValue]; - switch (parentFrame.FrameType) + switch (parentFrame.FrameTypeField) { case RenderTreeFrameType.Element: - parentFrame = parentFrame.WithElementKey(value); // It's a ref var, so this writes to the array + parentFrame.ElementKeyField = value; // It's a ref var, so this writes to the array break; case RenderTreeFrameType.Component: - parentFrame = parentFrame.WithComponentKey(value); // It's a ref var, so this writes to the array + parentFrame.ComponentKeyField = value; // It's a ref var, so this writes to the array break; default: - throw new InvalidOperationException($"Cannot set a key on a frame of type {parentFrame.FrameType}."); + throw new InvalidOperationException($"Cannot set a key on a frame of type {parentFrame.FrameTypeField}."); } - ProfilingEnd(); } private void OpenComponentUnchecked(int sequence, Type componentType) { - ProfilingStart(); // We are entering a new scope, since we track the "duplicate attributes" per // element/component we might need to clean them up now. if (_hasSeenAddMultipleAttributes) @@ -578,8 +544,8 @@ namespace Microsoft.AspNetCore.Components.Rendering } _openElementIndices.Push(_entries.Count); - Append(RenderTreeFrame.ChildComponent(sequence, componentType)); - ProfilingEnd(); + _entries.AppendComponent(sequence, componentType); + _lastNonAttributeFrameType = RenderTreeFrameType.Component; } /// @@ -588,7 +554,6 @@ namespace Microsoft.AspNetCore.Components.Rendering /// public void CloseComponent() { - ProfilingStart(); var indexOfEntryBeingClosed = _openElementIndices.Pop(); // We might be closing a component with only attributes. Run the attribute cleanup pass @@ -598,9 +563,7 @@ namespace Microsoft.AspNetCore.Components.Rendering ProcessDuplicateAttributes(first: indexOfEntryBeingClosed + 1); } - ref var entry = ref _entries.Buffer[indexOfEntryBeingClosed]; - entry = entry.WithComponentSubtreeLength(_entries.Count - indexOfEntryBeingClosed); - ProfilingEnd(); + _entries.Buffer[indexOfEntryBeingClosed].ComponentSubtreeLengthField = _entries.Count - indexOfEntryBeingClosed; } /// @@ -610,14 +573,13 @@ namespace Microsoft.AspNetCore.Components.Rendering /// An action to be invoked whenever the reference value changes. public void AddElementReferenceCapture(int sequence, Action elementReferenceCaptureAction) { - ProfilingStart(); if (GetCurrentParentFrameType() != RenderTreeFrameType.Element) { throw new InvalidOperationException($"Element reference captures may only be added as children of frames of type {RenderTreeFrameType.Element}"); } - Append(RenderTreeFrame.ElementReferenceCapture(sequence, elementReferenceCaptureAction)); - ProfilingEnd(); + _entries.AppendElementReferenceCapture(sequence, elementReferenceCaptureAction); + _lastNonAttributeFrameType = RenderTreeFrameType.ElementReferenceCapture; } /// @@ -627,7 +589,6 @@ namespace Microsoft.AspNetCore.Components.Rendering /// An action to be invoked whenever the reference value changes. public void AddComponentReferenceCapture(int sequence, Action componentReferenceCaptureAction) { - ProfilingStart(); var parentFrameIndex = GetCurrentParentFrameIndex(); if (!parentFrameIndex.HasValue) { @@ -635,13 +596,13 @@ namespace Microsoft.AspNetCore.Components.Rendering } var parentFrameIndexValue = parentFrameIndex.Value; - if (_entries.Buffer[parentFrameIndexValue].FrameType != RenderTreeFrameType.Component) + if (_entries.Buffer[parentFrameIndexValue].FrameTypeField != RenderTreeFrameType.Component) { throw new InvalidOperationException(ComponentReferenceCaptureInvalidParentMessage); } - Append(RenderTreeFrame.ComponentReferenceCapture(sequence, componentReferenceCaptureAction, parentFrameIndexValue)); - ProfilingEnd(); + _entries.AppendComponentReferenceCapture(sequence, componentReferenceCaptureAction, parentFrameIndexValue); + _lastNonAttributeFrameType = RenderTreeFrameType.ComponentReferenceCapture; } /// @@ -650,7 +611,6 @@ namespace Microsoft.AspNetCore.Components.Rendering /// An integer that represents the position of the instruction in the source code. public void OpenRegion(int sequence) { - ProfilingStart(); // We are entering a new scope, since we track the "duplicate attributes" per // element/component we might need to clean them up now. if (_hasSeenAddMultipleAttributes) @@ -660,8 +620,8 @@ namespace Microsoft.AspNetCore.Components.Rendering } _openElementIndices.Push(_entries.Count); - Append(RenderTreeFrame.Region(sequence)); - ProfilingEnd(); + _entries.AppendRegion(sequence); + _lastNonAttributeFrameType = RenderTreeFrameType.Region; } /// @@ -670,11 +630,8 @@ namespace Microsoft.AspNetCore.Components.Rendering /// public void CloseRegion() { - ProfilingStart(); var indexOfEntryBeingClosed = _openElementIndices.Pop(); - ref var entry = ref _entries.Buffer[indexOfEntryBeingClosed]; - entry = entry.WithRegionSubtreeLength(_entries.Count - indexOfEntryBeingClosed); - ProfilingEnd(); + _entries.Buffer[indexOfEntryBeingClosed].RegionSubtreeLengthField = _entries.Count - indexOfEntryBeingClosed; } private void AssertCanAddAttribute() @@ -693,7 +650,7 @@ namespace Microsoft.AspNetCore.Components.Rendering { var parentIndex = GetCurrentParentFrameIndex(); return parentIndex.HasValue - ? _entries.Buffer[parentIndex.Value].FrameType + ? _entries.Buffer[parentIndex.Value].FrameTypeField : (RenderTreeFrameType?)null; } @@ -702,29 +659,24 @@ namespace Microsoft.AspNetCore.Components.Rendering /// public void Clear() { - ProfilingStart(); _entries.Clear(); _openElementIndices.Clear(); _lastNonAttributeFrameType = null; _hasSeenAddMultipleAttributes = false; _seenAttributeNames?.Clear(); - ProfilingEnd(); } // internal because this should only be used during the post-event tree patching logic // It's expensive because it involves copying all the subsequent memory in the array internal void InsertAttributeExpensive(int insertAtIndex, int sequence, string attributeName, object? attributeValue) { - ProfilingStart(); // Replicate the same attribute omission logic as used elsewhere if ((attributeValue == null) || (attributeValue is bool boolValue && !boolValue)) { - ProfilingEnd(); return; } _entries.InsertExpensive(insertAtIndex, RenderTreeFrame.Attribute(sequence, attributeName, attributeValue)); - ProfilingEnd(); } /// @@ -734,21 +686,9 @@ namespace Microsoft.AspNetCore.Components.Rendering public ArrayRange GetFrames() => _entries.ToRange(); - private void Append(in RenderTreeFrame frame) - { - var frameType = frame.FrameType; - _entries.Append(frame); - - if (frameType != RenderTreeFrameType.Attribute) - { - _lastNonAttributeFrameType = frame.FrameType; - } - } - // Internal for testing internal void ProcessDuplicateAttributes(int first) { - ProfilingStart(); Debug.Assert(_hasSeenAddMultipleAttributes); // When AddMultipleAttributes method has been called, we need to postprocess attributes while closing @@ -759,7 +699,7 @@ namespace Microsoft.AspNetCore.Components.Rendering for (var i = first; i <= last; i++) { - if (buffer[i].FrameType != RenderTreeFrameType.Attribute) + if (buffer[i].FrameTypeField != RenderTreeFrameType.Attribute) { last = i - 1; break; @@ -771,12 +711,12 @@ namespace Microsoft.AspNetCore.Components.Rendering for (var i = last; i >= first; i--) { ref var frame = ref buffer[i]; - Debug.Assert(frame.FrameType == RenderTreeFrameType.Attribute, $"Frame type is {frame.FrameType} at {i}"); + Debug.Assert(frame.FrameTypeField == RenderTreeFrameType.Attribute, $"Frame type is {frame.FrameTypeField} at {i}"); - if (!seenAttributeNames.TryGetValue(frame.AttributeName, out var index)) + if (!seenAttributeNames.TryGetValue(frame.AttributeNameField, out var index)) { // This is the first time seeing this attribute name. Add to the dictionary and move on. - seenAttributeNames.Add(frame.AttributeName, i); + seenAttributeNames.Add(frame.AttributeNameField, i); } else if (index < i) { @@ -784,7 +724,7 @@ namespace Microsoft.AspNetCore.Components.Rendering // This is the case for a null event handler, or bool false value. // // We need to update our tracking, in case the attribute appeared 3 or more times. - seenAttributeNames[frame.AttributeName] = i; + seenAttributeNames[frame.AttributeNameField] = i; } else if (index > i) { @@ -815,7 +755,7 @@ namespace Microsoft.AspNetCore.Components.Rendering for (var i = first; i < _entries.Count; i++) { ref var frame = ref buffer[i]; - if (frame.FrameType != RenderTreeFrameType.None) + if (frame.FrameTypeField != RenderTreeFrameType.None) { buffer[offset++] = frame; } @@ -830,7 +770,6 @@ namespace Microsoft.AspNetCore.Components.Rendering seenAttributeNames.Clear(); _hasSeenAddMultipleAttributes = false; - ProfilingEnd(); } // Internal for testing @@ -847,22 +786,7 @@ namespace Microsoft.AspNetCore.Components.Rendering void IDisposable.Dispose() { - ProfilingStart(); _entries.Dispose(); - ProfilingEnd(); } - - // Having too many calls to ComponentsProfiling.Instance.Start/End has a measurable perf impact - // even when capturing is disabled. So, to enable detailed profiling for this class, define the - // Profile_RenderTreeBuilder compiler symbol, otherwise the calls are compiled out entirely. - // Enabling detailed profiling adds about 5% to rendering benchmark times. - - [Conditional("Profile_RenderTreeBuilder")] - private static void ProfilingStart([CallerMemberName] string? name = null) - => ComponentsProfiling.Instance.Start(name); - - [Conditional("Profile_RenderTreeBuilder")] - private static void ProfilingEnd([CallerMemberName] string? name = null) - => ComponentsProfiling.Instance.End(name); } } diff --git a/src/Components/Components/src/Rendering/RenderTreeUpdater.cs b/src/Components/Components/src/Rendering/RenderTreeUpdater.cs index 139b3e09d7..2f5db8b146 100644 --- a/src/Components/Components/src/Rendering/RenderTreeUpdater.cs +++ b/src/Components/Components/src/Rendering/RenderTreeUpdater.cs @@ -24,21 +24,21 @@ namespace Microsoft.AspNetCore.Components.Rendering for (var frameIndex = 0; frameIndex < framesLength; frameIndex++) { ref var frame = ref framesArray[frameIndex]; - switch (frame.FrameType) + switch (frame.FrameTypeField) { case RenderTreeFrameType.Element: closestElementFrameIndex = frameIndex; break; case RenderTreeFrameType.Attribute: - if (frame.AttributeEventHandlerId == eventHandlerId) + if (frame.AttributeEventHandlerIdField == eventHandlerId) { - if (!string.IsNullOrEmpty(frame.AttributeEventUpdatesAttributeName)) + if (!string.IsNullOrEmpty(frame.AttributeEventUpdatesAttributeNameField)) { UpdateFrameToMatchClientState( renderTreeBuilder, framesArray, closestElementFrameIndex, - frame.AttributeEventUpdatesAttributeName, + frame.AttributeEventUpdatesAttributeNameField, newFieldValue); } @@ -55,20 +55,20 @@ namespace Microsoft.AspNetCore.Components.Rendering { // Find the attribute frame ref var elementFrame = ref framesArray[elementFrameIndex]; - var elementSubtreeEndIndexExcl = elementFrameIndex + elementFrame.ElementSubtreeLength; + var elementSubtreeEndIndexExcl = elementFrameIndex + elementFrame.ElementSubtreeLengthField; for (var attributeFrameIndex = elementFrameIndex + 1; attributeFrameIndex < elementSubtreeEndIndexExcl; attributeFrameIndex++) { ref var attributeFrame = ref framesArray[attributeFrameIndex]; - if (attributeFrame.FrameType != RenderTreeFrameType.Attribute) + if (attributeFrame.FrameTypeField != RenderTreeFrameType.Attribute) { // We're now looking at the descendants not attributes, so the search is over break; } - if (attributeFrame.AttributeName == attributeName) + if (attributeFrame.AttributeNameField == attributeName) { // Found an existing attribute we can update - attributeFrame = attributeFrame.WithAttributeValue(attributeValue); + attributeFrame.AttributeValueField = attributeValue; return; } } @@ -84,25 +84,25 @@ namespace Microsoft.AspNetCore.Components.Rendering for (var otherFrameIndex = elementFrameIndex; otherFrameIndex >= 0; otherFrameIndex--) { ref var otherFrame = ref framesArray[otherFrameIndex]; - switch (otherFrame.FrameType) + switch (otherFrame.FrameTypeField) { case RenderTreeFrameType.Element: { - var otherFrameSubtreeLength = otherFrame.ElementSubtreeLength; + var otherFrameSubtreeLength = otherFrame.ElementSubtreeLengthField; var otherFrameEndIndexExcl = otherFrameIndex + otherFrameSubtreeLength; if (otherFrameEndIndexExcl > elementFrameIndex) // i.e., contains the element we're inserting into { - otherFrame = otherFrame.WithElementSubtreeLength(otherFrameSubtreeLength + 1); + otherFrame.ElementSubtreeLengthField = otherFrameSubtreeLength + 1; } break; } case RenderTreeFrameType.Region: { - var otherFrameSubtreeLength = otherFrame.RegionSubtreeLength; + var otherFrameSubtreeLength = otherFrame.RegionSubtreeLengthField; var otherFrameEndIndexExcl = otherFrameIndex + otherFrameSubtreeLength; if (otherFrameEndIndexExcl > elementFrameIndex) // i.e., contains the element we're inserting into { - otherFrame = otherFrame.WithRegionSubtreeLength(otherFrameSubtreeLength + 1); + otherFrame.RegionSubtreeLengthField = otherFrameSubtreeLength + 1; } break; } diff --git a/src/Components/Components/src/Routing/OptionalTypeRouteConstraint.cs b/src/Components/Components/src/Routing/OptionalTypeRouteConstraint.cs index 426b26b8f2..dcd0238ea4 100644 --- a/src/Components/Components/src/Routing/OptionalTypeRouteConstraint.cs +++ b/src/Components/Components/src/Routing/OptionalTypeRouteConstraint.cs @@ -22,7 +22,7 @@ namespace Microsoft.AspNetCore.Components.Routing public override bool Match(string pathSegment, out object? convertedValue) { // Unset values are set to null in the Parameters object created in - // the RouteContext. To match this pattern, unset optional parmeters + // the RouteContext. To match this pattern, unset optional parameters // are converted to null. if (string.IsNullOrEmpty(pathSegment)) { diff --git a/src/Components/Components/src/Routing/RouteEntry.cs b/src/Components/Components/src/Routing/RouteEntry.cs index e21517daf1..e18b71f0ef 100644 --- a/src/Components/Components/src/Routing/RouteEntry.cs +++ b/src/Components/Components/src/Routing/RouteEntry.cs @@ -29,10 +29,20 @@ namespace Microsoft.AspNetCore.Components.Routing internal void Match(RouteContext context) { + string? catchAllValue = null; + + // If this template contains a catch-all parameter, we can concatenate the pathSegments + // at and beyond the catch-all segment's position. For example: + // Template: /foo/bar/{*catchAll} + // PathSegments: /foo/bar/one/two/three + if (Template.ContainsCatchAllSegment && context.Segments.Length >= Template.Segments.Length) + { + catchAllValue = string.Join('/', context.Segments[Range.StartAt(Template.Segments.Length - 1)]); + } // If there are no optional segments on the route and the length of the route // and the template do not match, then there is no chance of this matching and // we can bail early. - if (Template.OptionalSegmentsCount == 0 && Template.Segments.Length != context.Segments.Length) + else if (Template.OptionalSegmentsCount == 0 && Template.Segments.Length != context.Segments.Length) { return; } @@ -43,7 +53,15 @@ namespace Microsoft.AspNetCore.Components.Routing for (var i = 0; i < Template.Segments.Length; i++) { var segment = Template.Segments[i]; - + + if (segment.IsCatchAll) + { + numMatchingSegments += 1; + parameters ??= new Dictionary(StringComparer.Ordinal); + parameters[segment.Value] = catchAllValue; + break; + } + // If the template contains more segments than the path, then // we may need to break out of this for-loop. This can happen // in one of two cases: @@ -86,7 +104,7 @@ namespace Microsoft.AspNetCore.Components.Routing // In addition to extracting parameter values from the URL, each route entry // also knows which other parameters should be supplied with null values. These // are parameters supplied by other route entries matching the same handler. - if (UnusedRouteParameterNames.Length > 0) + if (!Template.ContainsCatchAllSegment && UnusedRouteParameterNames.Length > 0) { parameters ??= new Dictionary(StringComparer.Ordinal); for (var i = 0; i < UnusedRouteParameterNames.Length; i++) @@ -116,7 +134,7 @@ namespace Microsoft.AspNetCore.Components.Routing // `/this/is/a/template` and the route `/this/`. In that case, we want to ensure // that all non-optional segments have matched as well. var allNonOptionalSegmentsMatch = numMatchingSegments >= (Template.Segments.Length - Template.OptionalSegmentsCount); - if (allRouteSegmentsMatch && allNonOptionalSegmentsMatch) + if (Template.ContainsCatchAllSegment || (allRouteSegmentsMatch && allNonOptionalSegmentsMatch)) { context.Parameters = parameters; context.Handler = Handler; diff --git a/src/Components/Components/src/Routing/RouteTemplate.cs b/src/Components/Components/src/Routing/RouteTemplate.cs index 6f4541e896..eb37454f6f 100644 --- a/src/Components/Components/src/Routing/RouteTemplate.cs +++ b/src/Components/Components/src/Routing/RouteTemplate.cs @@ -15,6 +15,7 @@ namespace Microsoft.AspNetCore.Components.Routing TemplateText = templateText; Segments = segments; OptionalSegmentsCount = segments.Count(template => template.IsOptional); + ContainsCatchAllSegment = segments.Any(template => template.IsCatchAll); } public string TemplateText { get; } @@ -22,5 +23,7 @@ namespace Microsoft.AspNetCore.Components.Routing public TemplateSegment[] Segments { get; } public int OptionalSegmentsCount { get; } + + public bool ContainsCatchAllSegment { get; } } } diff --git a/src/Components/Components/src/Routing/Router.cs b/src/Components/Components/src/Routing/Router.cs index ab95ee2c63..8470101904 100644 --- a/src/Components/Components/src/Routing/Router.cs +++ b/src/Components/Components/src/Routing/Router.cs @@ -152,6 +152,19 @@ namespace Microsoft.AspNetCore.Components.Routing internal virtual void Refresh(bool isNavigationIntercepted) { + // If an `OnNavigateAsync` task is currently in progress, then wait + // for it to complete before rendering. Note: because _previousOnNavigateTask + // is initialized to a CompletedTask on initialization, this will still + // allow first-render to complete successfully. + if (_previousOnNavigateTask.Status != TaskStatus.RanToCompletion) + { + if (Navigating != null) + { + _renderHandle.Render(Navigating); + } + return; + } + RefreshRouteTable(); var locationPath = NavigationManager.ToBaseRelativePath(_locationAbsolute); @@ -248,19 +261,15 @@ namespace Microsoft.AspNetCore.Components.Routing var previousTask = _previousOnNavigateTask; var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); _previousOnNavigateTask = tcs.Task; - try + + // And pass an indicator for the previous task to the currently running one. + var shouldRefresh = await RunOnNavigateAsync(path, previousTask); + tcs.SetResult(); + if (shouldRefresh) { - // And pass an indicator for the previous task to the currently running one. - var shouldRefresh = await RunOnNavigateAsync(path, previousTask); - if (shouldRefresh) - { - Refresh(isNavigationIntercepted); - } - } - finally - { - tcs.SetResult(); + Refresh(isNavigationIntercepted); } + } private void OnLocationChanged(object sender, LocationChangedEventArgs args) diff --git a/src/Components/Components/src/Routing/TemplateParser.cs b/src/Components/Components/src/Routing/TemplateParser.cs index 3f9d5e1459..41bc8ede28 100644 --- a/src/Components/Components/src/Routing/TemplateParser.cs +++ b/src/Components/Components/src/Routing/TemplateParser.cs @@ -12,15 +12,15 @@ namespace Microsoft.AspNetCore.Components.Routing // The class in here just takes care of parsing a route and extracting // simple parameters from it. // Some differences with ASP.NET Core routes are: - // * We don't support catch all parameter segments. // * We don't support complex segments. // The things that we support are: // * Literal path segments. (Like /Path/To/Some/Page) // * Parameter path segments (Like /Customer/{Id}/Orders/{OrderId}) + // * Catch-all parameters (Like /blog/{*slug}) internal class TemplateParser { public static readonly char[] InvalidParameterNameCharacters = - new char[] { '*', '{', '}', '=', '.' }; + new char[] { '{', '}', '=', '.' }; internal static RouteTemplate ParseTemplate(string template) { @@ -80,6 +80,12 @@ namespace Microsoft.AspNetCore.Components.Routing for (int i = 0; i < templateSegments.Length; i++) { var currentSegment = templateSegments[i]; + + if (currentSegment.IsCatchAll && i != templateSegments.Length - 1) + { + throw new InvalidOperationException($"Invalid template '{template}'. A catch-all parameter can only appear as the last segment of the route template."); + } + if (!currentSegment.IsParameter) { continue; diff --git a/src/Components/Components/src/Routing/TemplateSegment.cs b/src/Components/Components/src/Routing/TemplateSegment.cs index ee2e58ceb4..c4d3519951 100644 --- a/src/Components/Components/src/Routing/TemplateSegment.cs +++ b/src/Components/Components/src/Routing/TemplateSegment.cs @@ -12,34 +12,48 @@ namespace Microsoft.AspNetCore.Components.Routing { IsParameter = isParameter; + IsCatchAll = segment.StartsWith('*'); + + if (IsCatchAll) + { + // Only one '*' currently allowed + Value = segment.Substring(1); + + var invalidCharacter = Value.IndexOf('*'); + if (Value.IndexOf('*') != -1) + { + throw new InvalidOperationException($"Invalid template '{template}'. A catch-all parameter may only have one '*' at the beginning of the segment."); + } + } + else + { + Value = segment; + } + // Process segments that are not parameters or do not contain // a token separating a type constraint. - if (!isParameter || segment.IndexOf(':') < 0) + if (!isParameter || Value.IndexOf(':') < 0) { // Set the IsOptional flag to true for segments that contain // a parameter with no type constraints but optionality set // via the '?' token. - if (segment.IndexOf('?') == segment.Length - 1) + if (Value.IndexOf('?') == Value.Length - 1) { IsOptional = true; - Value = segment.Substring(0, segment.Length - 1); + Value = Value.Substring(0, Value.Length - 1); } // If the `?` optional marker shows up in the segment but not at the very end, // then throw an error. - else if (segment.IndexOf('?') >= 0 && segment.IndexOf('?') != segment.Length - 1) + else if (Value.IndexOf('?') >= 0 && Value.IndexOf('?') != Value.Length - 1) { throw new ArgumentException($"Malformed parameter '{segment}' in route '{template}'. '?' character can only appear at the end of parameter name."); } - else - { - Value = segment; - } - + Constraints = Array.Empty(); } else { - var tokens = segment.Split(':'); + var tokens = Value.Split(':'); if (tokens[0].Length == 0) { throw new ArgumentException($"Malformed parameter '{segment}' in route '{template}' has no name before the constraints list."); @@ -54,6 +68,21 @@ namespace Microsoft.AspNetCore.Components.Routing .Select(token => RouteConstraint.Parse(template, segment, token)) .ToArray(); } + + if (IsParameter) + { + if (IsOptional && IsCatchAll) + { + throw new InvalidOperationException($"Invalid segment '{segment}' in route '{template}'. A catch-all parameter cannot be marked optional."); + } + + // Moving the check for this here instead of TemplateParser so we can allow catch-all. + // We checked for '*' up above specifically for catch-all segments, this one checks for all others + if (Value.IndexOf('*') != -1) + { + throw new InvalidOperationException($"Invalid template '{template}'. The character '*' in parameter segment '{{{segment}}}' is not allowed."); + } + } } // The value of the segment. The exact text to match when is a literal. @@ -64,6 +93,8 @@ namespace Microsoft.AspNetCore.Components.Routing public bool IsOptional { get; } + public bool IsCatchAll { get; } + public RouteConstraint[] Constraints { get; } public bool Match(string pathSegment, out object? matchedParameterValue) diff --git a/src/Components/Components/test/EventCallbackTest.cs b/src/Components/Components/test/EventCallbackTest.cs index 25405c2180..57c2538e48 100644 --- a/src/Components/Components/test/EventCallbackTest.cs +++ b/src/Components/Components/test/EventCallbackTest.cs @@ -17,7 +17,7 @@ namespace Microsoft.AspNetCore.Components var callback = default(EventCallback); // Act & Assert (Does not throw) - await callback.InvokeAsync(null); + await callback.InvokeAsync(); } [Fact] @@ -27,7 +27,7 @@ namespace Microsoft.AspNetCore.Components var callback = default(EventCallback); // Act & Assert (Does not throw) - await callback.InvokeAsync(null); + await callback.InvokeAsync(); } @@ -39,7 +39,7 @@ namespace Microsoft.AspNetCore.Components var callback = new EventCallback(null, (Action)(() => runCount++)); // Act - await callback.InvokeAsync(null); + await callback.InvokeAsync(); // Assert @@ -54,7 +54,7 @@ namespace Microsoft.AspNetCore.Components var callback = new EventCallback(null, (Action)(() => runCount++)); // Act - await callback.InvokeAsync(null); + await callback.InvokeAsync(); // Assert @@ -71,7 +71,7 @@ namespace Microsoft.AspNetCore.Components var callback = new EventCallback(component, (Action)(() => runCount++)); // Act - await callback.InvokeAsync(null); + await callback.InvokeAsync(); // Assert @@ -108,7 +108,7 @@ namespace Microsoft.AspNetCore.Components var callback = new EventCallback(component, (Action)((e) => { arg = e; runCount++; })); // Act - await callback.InvokeAsync(null); + await callback.InvokeAsync(); // Assert @@ -184,7 +184,7 @@ namespace Microsoft.AspNetCore.Components var callback = new EventCallback(component, (Func)(() => { runCount++; return Task.CompletedTask; })); // Act - await callback.InvokeAsync(null); + await callback.InvokeAsync(); // Assert @@ -221,7 +221,7 @@ namespace Microsoft.AspNetCore.Components var callback = new EventCallback(component, (Func)((e) => { arg = e; runCount++; return Task.CompletedTask; })); // Act - await callback.InvokeAsync(null); + await callback.InvokeAsync(); // Assert @@ -297,7 +297,7 @@ namespace Microsoft.AspNetCore.Components var callback = new EventCallback(component, (Action)(() => runCount++)); // Act - await callback.InvokeAsync(null); + await callback.InvokeAsync(); // Assert @@ -334,7 +334,7 @@ namespace Microsoft.AspNetCore.Components var callback = new EventCallback(component, (Action)((e) => { arg = e; runCount++; })); // Act - await callback.InvokeAsync(null); + await callback.InvokeAsync(); // Assert @@ -373,7 +373,7 @@ namespace Microsoft.AspNetCore.Components var callback = new EventCallback(component, (Func)(() => { runCount++; return Task.CompletedTask; })); // Act - await callback.InvokeAsync(null); + await callback.InvokeAsync(); // Assert @@ -410,7 +410,7 @@ namespace Microsoft.AspNetCore.Components var callback = new EventCallback(component, (Func)((e) => { arg = e; runCount++; return Task.CompletedTask; })); // Act - await callback.InvokeAsync(null); + await callback.InvokeAsync(); // Assert diff --git a/src/Components/Components/test/ParameterViewTest.Assignment.cs b/src/Components/Components/test/ParameterViewTest.Assignment.cs index 7dd8537f4c..8e2fb5d600 100644 --- a/src/Components/Components/test/ParameterViewTest.Assignment.cs +++ b/src/Components/Components/test/ParameterViewTest.Assignment.cs @@ -71,7 +71,7 @@ namespace Microsoft.AspNetCore.Components } [Fact] - public void IncomingParameterMatchesOverridenParameter_ThatDoesNotHasAttribute() + public void IncomingParameterMatchesOverriddenParameter_ThatDoesNotHaveAttribute() { // Test for https://github.com/dotnet/aspnetcore/issues/13162 // Arrange diff --git a/src/Components/Components/test/RenderTreeDiffBuilderTest.cs b/src/Components/Components/test/RenderTreeDiffBuilderTest.cs index 9f3ba71809..0ec9e95fa7 100644 --- a/src/Components/Components/test/RenderTreeDiffBuilderTest.cs +++ b/src/Components/Components/test/RenderTreeDiffBuilderTest.cs @@ -340,7 +340,7 @@ namespace Microsoft.AspNetCore.Components.Test // Act/Assert var ex = Assert.Throws(() => GetSingleUpdatedComponent()); - Assert.Equal("More than one sibling has the same key value, 'key1'. Key values must be unique.", ex.Message); + Assert.Equal("More than one sibling of element 'el' has the same key value, 'key1'. Key values must be unique.", ex.Message); } [Fact] @@ -357,7 +357,7 @@ namespace Microsoft.AspNetCore.Components.Test // Act/Assert var ex = Assert.Throws(() => GetSingleUpdatedComponent()); - Assert.Equal("More than one sibling has the same key value, 'key1'. Key values must be unique.", ex.Message); + Assert.Equal("More than one sibling of element 'el' has the same key value, 'key1'. Key values must be unique.", ex.Message); } [Fact] @@ -374,7 +374,7 @@ namespace Microsoft.AspNetCore.Components.Test // Act/Assert var ex = Assert.Throws(() => GetSingleUpdatedComponent()); - Assert.Equal("More than one sibling has the same key value, 'key1'. Key values must be unique.", ex.Message); + Assert.Equal("More than one sibling of element 'el' has the same key value, 'key1'. Key values must be unique.", ex.Message); } [Fact] diff --git a/src/Components/Components/test/RendererTest.cs b/src/Components/Components/test/RendererTest.cs index 07022b2edf..d1f8bb5623 100644 --- a/src/Components/Components/test/RendererTest.cs +++ b/src/Components/Components/test/RendererTest.cs @@ -487,7 +487,8 @@ namespace Microsoft.AspNetCore.Components.Test public void DispatchEventHandlesSynchronousExceptionsFromEventHandlers() { // Arrange: Render a component with an event handler - var renderer = new TestRenderer { + var renderer = new TestRenderer + { ShouldHandleExceptions = true }; @@ -2086,6 +2087,238 @@ namespace Microsoft.AspNetCore.Components.Test Assert.Contains(exception2, aex.InnerExceptions); } + [Fact] + public void RenderBatch_HandlesSynchronousExceptionsInAsyncDisposableComponents() + { + // Arrange + var renderer = new TestRenderer { ShouldHandleExceptions = true }; + var exception1 = new InvalidOperationException(); + + var firstRender = true; + var component = new TestComponent(builder => + { + if (firstRender) + { + builder.AddContent(0, "Hello"); + builder.OpenComponent(1); + builder.AddAttribute(1, nameof(AsyncDisposableComponent.AsyncDisposeAction), (Func)(() => throw exception1)); + builder.CloseComponent(); + } + }); + var componentId = renderer.AssignRootComponentId(component); + component.TriggerRender(); + + // Act: Second render + firstRender = false; + component.TriggerRender(); + + // Assert: Applicable children are included in disposal list + Assert.Equal(2, renderer.Batches.Count); + Assert.Equal(new[] { 1, }, renderer.Batches[1].DisposedComponentIDs); + + // Outer component is still alive and not disposed. + Assert.False(component.Disposed); + var aex = Assert.IsType(Assert.Single(renderer.HandledExceptions)); + var innerException = Assert.Single(aex.Flatten().InnerExceptions); + Assert.Same(exception1, innerException); + } + + [Fact] + public void RenderBatch_CanDisposeSynchronousAsyncDisposableImplementations() + { + // Arrange + var renderer = new TestRenderer { ShouldHandleExceptions = true }; + + var firstRender = true; + var component = new TestComponent(builder => + { + if (firstRender) + { + builder.AddContent(0, "Hello"); + builder.OpenComponent(1); + builder.AddAttribute(1, nameof(AsyncDisposableComponent.AsyncDisposeAction), (Func)(() => default)); + builder.CloseComponent(); + } + }); + var componentId = renderer.AssignRootComponentId(component); + component.TriggerRender(); + + // Act: Second render + firstRender = false; + component.TriggerRender(); + + // Assert: Applicable children are included in disposal list + Assert.Equal(2, renderer.Batches.Count); + Assert.Equal(new[] { 1, }, renderer.Batches[1].DisposedComponentIDs); + + // Outer component is still alive and not disposed. + Assert.False(component.Disposed); + Assert.Empty(renderer.HandledExceptions); + } + + [Fact] + public void RenderBatch_CanDisposeAsynchronousAsyncDisposables() + { + // Arrange + var semaphore = new Semaphore(0, 1); + var renderer = new TestRenderer { ShouldHandleExceptions = true }; + renderer.OnExceptionHandled = () => semaphore.Release(); + var exception1 = new InvalidOperationException(); + var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); + + var firstRender = true; + var component = new TestComponent(builder => + { + if (firstRender) + { + builder.AddContent(0, "Hello"); + builder.OpenComponent(1); + builder.AddAttribute(1, nameof(AsyncDisposableComponent.AsyncDisposeAction), (Func)(async () => { await tcs.Task; })); + builder.CloseComponent(); + } + }); + + var componentId = renderer.AssignRootComponentId(component); + component.TriggerRender(); + // Act: Second render + firstRender = false; + component.TriggerRender(); + + // Assert: Applicable children are included in disposal list + Assert.Equal(2, renderer.Batches.Count); + Assert.Equal(new[] { 1, }, renderer.Batches[1].DisposedComponentIDs); + + // Outer component is still alive and not disposed. + Assert.False(component.Disposed); + Assert.Empty(renderer.HandledExceptions); + + // Continue execution + tcs.SetResult(); + Assert.False(semaphore.WaitOne(10)); + Assert.Empty(renderer.HandledExceptions); + } + + [Fact] + public void RenderBatch_HandlesAsynchronousExceptionsInAsyncDisposableComponents() + { + // Arrange + var semaphore = new Semaphore(0, 1); + var renderer = new TestRenderer { ShouldHandleExceptions = true }; + renderer.OnExceptionHandled = () => semaphore.Release(); + var exception1 = new InvalidOperationException(); + var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); + + var firstRender = true; + var component = new TestComponent(builder => + { + if (firstRender) + { + builder.AddContent(0, "Hello"); + builder.OpenComponent(1); + builder.AddAttribute(1, nameof(AsyncDisposableComponent.AsyncDisposeAction), (Func)(async () => { await tcs.Task; throw exception1; })); + builder.CloseComponent(); + } + }); + var componentId = renderer.AssignRootComponentId(component); + component.TriggerRender(); + // Act: Second render + firstRender = false; + component.TriggerRender(); + + // Assert: Applicable children are included in disposal list + Assert.Equal(2, renderer.Batches.Count); + Assert.Equal(new[] { 1, }, renderer.Batches[1].DisposedComponentIDs); + + // Outer component is still alive and not disposed. + Assert.False(component.Disposed); + Assert.Empty(renderer.HandledExceptions); + + // Continue execution + tcs.SetResult(); + semaphore.WaitOne(); + var aex = Assert.IsType(Assert.Single(renderer.HandledExceptions)); + Assert.Same(exception1, aex); + } + + [Fact] + public void RenderBatch_ReportsSynchronousCancelationsAsErrors() + { + // Arrange + var renderer = new TestRenderer { ShouldHandleExceptions = true }; + var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); + + var firstRender = true; + var component = new TestComponent(builder => + { + if (firstRender) + { + builder.AddContent(0, "Hello"); + builder.OpenComponent(1); + builder.AddAttribute(1, nameof(AsyncDisposableComponent.AsyncDisposeAction), (Func)(() => throw new TaskCanceledException())); + builder.CloseComponent(); + } + }); + var componentId = renderer.AssignRootComponentId(component); + component.TriggerRender(); + + // Act: Second render + firstRender = false; + component.TriggerRender(); + + // Assert: Applicable children are included in disposal list + Assert.Equal(2, renderer.Batches.Count); + Assert.Equal(new[] { 1, }, renderer.Batches[1].DisposedComponentIDs); + + // Outer component is still alive and not disposed. + Assert.False(component.Disposed); + var aex = Assert.IsType(Assert.Single(renderer.HandledExceptions)); + Assert.IsType(Assert.Single(aex.Flatten().InnerExceptions)); + } + + [Fact] + public void RenderBatch_ReportsAsynchronousCancelationsAsErrors() + { + // Arrange + var semaphore = new Semaphore(0, 1); + var renderer = new TestRenderer { ShouldHandleExceptions = true }; + renderer.OnExceptionHandled += () => semaphore.Release(); + var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); + var firstRender = true; + var component = new TestComponent(builder => + { + if (firstRender) + { + builder.AddContent(0, "Hello"); + builder.OpenComponent(1); + builder.AddAttribute( + 1, + nameof(AsyncDisposableComponent.AsyncDisposeAction), + (Func)(() => new ValueTask(tcs.Task))); + builder.CloseComponent(); + } + }); + var componentId = renderer.AssignRootComponentId(component); + component.TriggerRender(); + + // Act: Second render + firstRender = false; + component.TriggerRender(); + + // Assert: Applicable children are included in disposal list + Assert.Equal(2, renderer.Batches.Count); + Assert.Equal(new[] { 1, }, renderer.Batches[1].DisposedComponentIDs); + + // Outer component is still alive and not disposed. + Assert.False(component.Disposed); + Assert.Empty(renderer.HandledExceptions); + + // Cancel execution + tcs.SetCanceled(); + + semaphore.WaitOne(); + var aex = Assert.IsType(Assert.Single(renderer.HandledExceptions)); + } + [Fact] public void RenderBatch_DoesNotDisposeComponentMultipleTimes() { @@ -2589,7 +2822,7 @@ namespace Microsoft.AspNetCore.Components.Test // Act: Toggle the checkbox var eventArgs = new ChangeEventArgs { Value = true }; - var renderTask = renderer.DispatchEventAsync(checkboxChangeEventHandlerId, eventArgs); + var renderTask = renderer.DispatchEventAsync(checkboxChangeEventHandlerId, eventArgs); Assert.True(renderTask.IsCompletedSuccessfully); var latestBatch = renderer.Batches.Last(); @@ -3768,7 +4001,7 @@ namespace Microsoft.AspNetCore.Components.Test requestedType => Assert.Equal(typeof(TestComponent), requestedType)); } - private class TestComponentActivator : IComponentActivator where TResult: IComponent, new() + private class TestComponentActivator : IComponentActivator where TResult : IComponent, new() { public List RequestedComponentTypes { get; } = new List(); @@ -4147,6 +4380,24 @@ namespace Microsoft.AspNetCore.Components.Test } } + private class AsyncDisposableComponent : AutoRenderComponent, IAsyncDisposable + { + public bool Disposed { get; private set; } + + [Parameter] + public Func AsyncDisposeAction { get; set; } + + public ValueTask DisposeAsync() + { + Disposed = true; + return AsyncDisposeAction == null ? default : AsyncDisposeAction.Invoke(); + } + + protected override void BuildRenderTree(RenderTreeBuilder builder) + { + } + } + class TestAsyncRenderer : TestRenderer { public Task NextUpdateDisplayReturnTask { get; set; } diff --git a/src/Components/Components/test/Routing/RouteTableFactoryTests.cs b/src/Components/Components/test/Routing/RouteTableFactoryTests.cs index ec5370d578..3a4887fba0 100644 --- a/src/Components/Components/test/Routing/RouteTableFactoryTests.cs +++ b/src/Components/Components/test/Routing/RouteTableFactoryTests.cs @@ -226,6 +226,23 @@ namespace Microsoft.AspNetCore.Components.Test.Routing Assert.Single(context.Parameters, p => p.Key == "parameter" && (string)p.Value == expectedValue); } + [Theory] + [InlineData("/blog/value1", "value1")] + [InlineData("/blog/value1/foo%20bar", "value1/foo bar")] + public void CanMatchCatchAllParameterTemplate(string path, string expectedValue) + { + // Arrange + var routeTable = new TestRouteTableBuilder().AddRoute("/blog/{*parameter}").Build(); + var context = new RouteContext(path); + + // Act + routeTable.Route(context); + + // Assert + Assert.NotNull(context.Handler); + Assert.Single(context.Parameters, p => p.Key == "parameter" && (string)p.Value == expectedValue); + } + [Fact] public void CanMatchTemplateWithMultipleParameters() { @@ -247,6 +264,29 @@ namespace Microsoft.AspNetCore.Components.Test.Routing Assert.Equal(expectedParameters, context.Parameters); } + + [Fact] + public void CanMatchTemplateWithMultipleParametersAndCatchAllParameter() + { + // Arrange + var routeTable = new TestRouteTableBuilder().AddRoute("/{some}/awesome/{route}/with/{*catchAll}").Build(); + var context = new RouteContext("/an/awesome/path/with/some/catch/all/stuff"); + + var expectedParameters = new Dictionary + { + ["some"] = "an", + ["route"] = "path", + ["catchAll"] = "some/catch/all/stuff" + }; + + // Act + routeTable.Route(context); + + // Assert + Assert.NotNull(context.Handler); + Assert.Equal(expectedParameters, context.Parameters); + } + public static IEnumerable CanMatchParameterWithConstraintCases() => new object[][] { new object[] { "/{value:bool}", "/true", true }, @@ -476,7 +516,7 @@ namespace Microsoft.AspNetCore.Components.Test.Routing [Fact] - public void PrefersLiteralTemplateOverParmeterizedTemplates() + public void PrefersLiteralTemplateOverParameterizedTemplates() { // Arrange var routeTable = new TestRouteTableBuilder() diff --git a/src/Components/Components/test/Routing/TemplateParserTests.cs b/src/Components/Components/test/Routing/TemplateParserTests.cs index aba3f0496a..1cd8ab88bf 100644 --- a/src/Components/Components/test/Routing/TemplateParserTests.cs +++ b/src/Components/Components/test/Routing/TemplateParserTests.cs @@ -83,6 +83,45 @@ namespace Microsoft.AspNetCore.Components.Routing Assert.Equal(expected, actual, RouteTemplateTestComparer.Instance); } + [Fact] + public void Parse_SingleCatchAllParameter() + { + // Arrange + var expected = new ExpectedTemplateBuilder().Parameter("p"); + + // Act + var actual = TemplateParser.ParseTemplate("{*p}"); + + // Assert + Assert.Equal(expected, actual, RouteTemplateTestComparer.Instance); + } + + [Fact] + public void Parse_MixedLiteralAndCatchAllParameter() + { + // Arrange + var expected = new ExpectedTemplateBuilder().Literal("awesome").Literal("wow").Parameter("p"); + + // Act + var actual = TemplateParser.ParseTemplate("awesome/wow/{*p}"); + + // Assert + Assert.Equal(expected, actual, RouteTemplateTestComparer.Instance); + } + + [Fact] + public void Parse_MixedLiteralParameterAndCatchAllParameter() + { + // Arrange + var expected = new ExpectedTemplateBuilder().Literal("awesome").Parameter("p1").Parameter("p2"); + + // Act + var actual = TemplateParser.ParseTemplate("awesome/{p1}/{*p2}"); + + // Assert + Assert.Equal(expected, actual, RouteTemplateTestComparer.Instance); + } + [Fact] public void InvalidTemplate_WithRepeatedParameter() { @@ -113,7 +152,8 @@ namespace Microsoft.AspNetCore.Components.Routing } [Theory] - [InlineData("{*}", "Invalid template '{*}'. The character '*' in parameter segment '{*}' is not allowed.")] + // * is only allowed at beginning for catch-all parameters + [InlineData("{p*}", "Invalid template '{p*}'. The character '*' in parameter segment '{p*}' is not allowed.")] [InlineData("{{}", "Invalid template '{{}'. The character '{' in parameter segment '{{}' is not allowed.")] [InlineData("{}}", "Invalid template '{}}'. The character '}' in parameter segment '{}}' is not allowed.")] [InlineData("{=}", "Invalid template '{=}'. The character '=' in parameter segment '{=}' is not allowed.")] @@ -166,6 +206,26 @@ namespace Microsoft.AspNetCore.Components.Routing Assert.Equal(expectedMessage, ex.Message); } + [Fact] + public void InvalidTemplate_CatchAllParamWithMultipleAsterisks() + { + var ex = Assert.Throws(() => TemplateParser.ParseTemplate("/test/{a}/{**b}")); + + var expectedMessage = "Invalid template '/test/{a}/{**b}'. A catch-all parameter may only have one '*' at the beginning of the segment."; + + Assert.Equal(expectedMessage, ex.Message); + } + + [Fact] + public void InvalidTemplate_CatchAllParamNotLast() + { + var ex = Assert.Throws(() => TemplateParser.ParseTemplate("/test/{*a}/{b}")); + + var expectedMessage = "Invalid template 'test/{*a}/{b}'. A catch-all parameter can only appear as the last segment of the route template."; + + Assert.Equal(expectedMessage, ex.Message); + } + [Fact] public void InvalidTemplate_BadOptionalCharacterPosition() { diff --git a/src/Components/ComponentsNoDeps.slnf b/src/Components/ComponentsNoDeps.slnf index dd08970d02..e9e921484d 100644 --- a/src/Components/ComponentsNoDeps.slnf +++ b/src/Components/ComponentsNoDeps.slnf @@ -37,6 +37,7 @@ "src\\Components\\WebAssembly\\Sdk\\integrationtests\\Microsoft.NET.Sdk.BlazorWebAssembly.IntegrationTests.csproj", "src\\Components\\Web\\src\\Microsoft.AspNetCore.Components.Web.csproj", "src\\Components\\Web\\test\\Microsoft.AspNetCore.Components.Web.Tests.csproj", + "src\\Components\\benchmarkapps\\Wasm.Performance\\ConsoleHost\\Wasm.Performance.ConsoleHost.csproj", "src\\Components\\benchmarkapps\\Wasm.Performance\\Driver\\Wasm.Performance.Driver.csproj", "src\\Components\\benchmarkapps\\Wasm.Performance\\TestApp\\Wasm.Performance.TestApp.csproj", "src\\Components\\test\\E2ETest\\Microsoft.AspNetCore.Components.E2ETests.csproj", diff --git a/src/Components/Samples/BlazorServerApp/wwwroot/css/site.css b/src/Components/Samples/BlazorServerApp/wwwroot/css/site.css index c15c2e1556..bdca6fbfcb 100644 --- a/src/Components/Samples/BlazorServerApp/wwwroot/css/site.css +++ b/src/Components/Samples/BlazorServerApp/wwwroot/css/site.css @@ -24,6 +24,7 @@ app { height: 3.5rem; display: flex; align-items: center; + z-index: 10; } .main { diff --git a/src/Components/Server/test/Circuits/RemoteRendererTest.cs b/src/Components/Server/test/Circuits/RemoteRendererTest.cs index 19f2ff0034..063685d80f 100644 --- a/src/Components/Server/test/Circuits/RemoteRendererTest.cs +++ b/src/Components/Server/test/Circuits/RemoteRendererTest.cs @@ -296,7 +296,7 @@ namespace Microsoft.AspNetCore.Components.Web.Rendering exceptions.Add(e); }; - // Receive the ack for the intial batch + // Receive the ack for the initial batch _ = renderer.OnRenderCompletedAsync(2, null); // Receive the ack for the second batch _ = renderer.OnRenderCompletedAsync(2, null); diff --git a/src/Components/Shared/src/ArrayBuilder.cs b/src/Components/Shared/src/ArrayBuilder.cs index 8efa1c7baf..afb7b01987 100644 --- a/src/Components/Shared/src/ArrayBuilder.cs +++ b/src/Components/Shared/src/ArrayBuilder.cs @@ -28,8 +28,8 @@ namespace Microsoft.AspNetCore.Components.RenderTree internal class ArrayBuilder : IDisposable { // The following fields are memory mapped to the WASM client. Do not re-order or use auto-properties. - private T[] _items; - private int _itemsInUse; + protected T[] _items; + protected int _itemsInUse; private static readonly T[] Empty = Array.Empty(); private readonly ArrayPool _arrayPool; @@ -139,7 +139,6 @@ namespace Microsoft.AspNetCore.Components.RenderTree ThrowIndexOutOfBoundsException(); } - // Same expansion logic as elsewhere if (_itemsInUse == _items.Length) { GrowBuffer(_items.Length * 2); @@ -162,7 +161,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree _itemsInUse = 0; } - private void GrowBuffer(int desiredCapacity) + protected void GrowBuffer(int desiredCapacity) { // When we dispose, we set the count back to zero and return the array. // diff --git a/src/Components/Shared/src/WebEventData.cs b/src/Components/Shared/src/WebEventData.cs index c0d5824e53..f809807fbe 100644 --- a/src/Components/Shared/src/WebEventData.cs +++ b/src/Components/Shared/src/WebEventData.cs @@ -71,6 +71,7 @@ namespace Microsoft.AspNetCore.Components.Web "touch" => Deserialize(eventArgsJson), "unknown" => EventArgs.Empty, "wheel" => Deserialize(eventArgsJson), + "toggle" => Deserialize(eventArgsJson), _ => throw new InvalidOperationException($"Unsupported event type '{eventArgsType}'. EventId: '{eventHandlerId}'."), }; } diff --git a/src/Components/Web.JS/dist/Release/blazor.server.js b/src/Components/Web.JS/dist/Release/blazor.server.js index 32c6455b20..57f7a141ef 100644 --- a/src/Components/Web.JS/dist/Release/blazor.server.js +++ b/src/Components/Web.JS/dist/Release/blazor.server.js @@ -1,19 +1,19 @@ -!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=53)}([function(e,t,n){"use strict";var r;n.d(t,"a",(function(){return r})),function(e){e[e.Trace=0]="Trace",e[e.Debug=1]="Debug",e[e.Information=2]="Information",e[e.Warning=3]="Warning",e[e.Error=4]="Error",e[e.Critical=5]="Critical",e[e.None=6]="None"}(r||(r={}))},function(e,t,n){"use strict";(function(e){n.d(t,"e",(function(){return c})),n.d(t,"a",(function(){return u})),n.d(t,"c",(function(){return l})),n.d(t,"g",(function(){return f})),n.d(t,"i",(function(){return h})),n.d(t,"j",(function(){return p})),n.d(t,"f",(function(){return d})),n.d(t,"d",(function(){return g})),n.d(t,"b",(function(){return y})),n.d(t,"h",(function(){return v}));var r=n(0),o=n(6),i=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]-1&&this.subject.observers.splice(e,1),0===this.subject.observers.length&&this.subject.cancelCallback&&this.subject.cancelCallback().catch((function(e){}))},e}(),y=function(){function e(e){this.minimumLogLevel=e,this.outputConsole=console}return e.prototype.log=function(e,t){if(e>=this.minimumLogLevel)switch(e){case r.a.Critical:case r.a.Error:this.outputConsole.error("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;case r.a.Warning:this.outputConsole.warn("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;case r.a.Information:this.outputConsole.info("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;default:this.outputConsole.log("["+(new Date).toISOString()+"] "+r.a[e]+": "+t)}},e}();function v(){var e="X-SignalR-User-Agent";return l.isNode&&(e="User-Agent"),[e,b(c,m(),E(),w())]}function b(e,t,n,r){var o="Microsoft SignalR/",i=e.split(".");return o+=i[0]+"."+i[1],o+=" ("+e+"; ",o+=t&&""!==t?t+"; ":"Unknown OS; ",o+=""+n,o+=r?"; "+r:"; Unknown Runtime Version",o+=")"}function m(){if(!l.isNode)return"";switch(e.platform){case"win32":return"Windows NT";case"darwin":return"macOS";case"linux":return"Linux";default:return e.platform}}function w(){if(l.isNode)return e.versions.node}function E(){return l.isNode?"NodeJS":"Browser"}}).call(this,n(14))},function(e,t,n){"use strict";n.r(t),n.d(t,"AbortError",(function(){return s})),n.d(t,"HttpError",(function(){return i})),n.d(t,"TimeoutError",(function(){return a})),n.d(t,"HttpClient",(function(){return l})),n.d(t,"HttpResponse",(function(){return u})),n.d(t,"DefaultHttpClient",(function(){return S})),n.d(t,"HubConnection",(function(){return O})),n.d(t,"HubConnectionState",(function(){return I})),n.d(t,"HubConnectionBuilder",(function(){return re})),n.d(t,"MessageType",(function(){return b})),n.d(t,"LogLevel",(function(){return f.a})),n.d(t,"HttpTransportType",(function(){return P})),n.d(t,"TransferFormat",(function(){return x})),n.d(t,"NullLogger",(function(){return $.a})),n.d(t,"JsonHubProtocol",(function(){return ee})),n.d(t,"Subject",(function(){return _})),n.d(t,"VERSION",(function(){return h.e}));var r,o=(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),i=function(e){function t(t,n){var r=this,o=this.constructor.prototype;return(r=e.call(this,t)||this).statusCode=n,r.__proto__=o,r}return o(t,e),t}(Error),a=function(e){function t(t){void 0===t&&(t="A timeout occurred.");var n=this,r=this.constructor.prototype;return(n=e.call(this,t)||this).__proto__=r,n}return o(t,e),t}(Error),s=function(e){function t(t){void 0===t&&(t="An abort occurred.");var n=this,r=this.constructor.prototype;return(n=e.call(this,t)||this).__proto__=r,n}return o(t,e),t}(Error),c=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]=200&&o.status<300?n(new u(o.status,o.statusText,o.response||o.responseText)):r(new i(o.statusText,o.status))},o.onerror=function(){t.logger.log(f.a.Warning,"Error from HTTP request. "+o.status+": "+o.statusText+"."),r(new i(o.statusText,o.status))},o.ontimeout=function(){t.logger.log(f.a.Warning,"Timeout from HTTP request."),r(new a)},o.send(e.content||"")})):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))},t}(l),E=function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),S=function(e){function t(t){var n=e.call(this)||this;if("undefined"!=typeof fetch||h.c.isNode)n.httpClient=new v(t);else{if("undefined"==typeof XMLHttpRequest)throw new Error("No usable HttpClient found.");n.httpClient=new w(t)}return n}return E(t,e),t.prototype.send=function(e){return e.abortSignal&&e.abortSignal.aborted?Promise.reject(new s):e.method?e.url?this.httpClient.send(e):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))},t.prototype.getCookieString=function(e){return this.httpClient.getCookieString(e)},t}(l),C=n(44);!function(e){e[e.Invocation=1]="Invocation",e[e.StreamItem=2]="StreamItem",e[e.Completion=3]="Completion",e[e.StreamInvocation=4]="StreamInvocation",e[e.CancelInvocation=5]="CancelInvocation",e[e.Ping=6]="Ping",e[e.Close=7]="Close"}(b||(b={}));var I,_=function(){function e(){this.observers=[]}return e.prototype.next=function(e){for(var t=0,n=this.observers;t0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0?[2,Promise.reject(new Error("Unable to connect to the server with any of the available transports. "+i.join(" ")))]:[2,Promise.reject(new Error("None of the transports supported by the client are supported by the server."))]}}))}))},e.prototype.constructTransport=function(e){switch(e){case P.WebSockets:if(!this.options.WebSocket)throw new Error("'WebSocket' is not supported in your environment.");return new Y(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.WebSocket,this.options.headers||{});case P.ServerSentEvents:if(!this.options.EventSource)throw new Error("'EventSource' is not supported in your environment.");return new H(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.EventSource,this.options.withCredentials,this.options.headers||{});case P.LongPolling:return new B(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.withCredentials,this.options.headers||{});default:throw new Error("Unknown transport: "+e+".")}},e.prototype.startTransport=function(e,t){var n=this;return this.transport.onreceive=this.onreceive,this.transport.onclose=function(e){return n.stopConnection(e)},this.transport.connect(e,t)},e.prototype.resolveTransportOrError=function(e,t,n){var r=P[e.transport];if(null==r)return this.logger.log(f.a.Debug,"Skipping transport '"+e.transport+"' because it is not supported by this client."),new Error("Skipping transport '"+e.transport+"' because it is not supported by this client.");if(!function(e,t){return!e||0!=(t&e)}(t,r))return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it was disabled by the client."),new Error("'"+P[r]+"' is disabled by the client.");if(!(e.transferFormats.map((function(e){return x[e]})).indexOf(n)>=0))return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it does not support the requested transfer format '"+x[n]+"'."),new Error("'"+P[r]+"' does not support "+x[n]+".");if(r===P.WebSockets&&!this.options.WebSocket||r===P.ServerSentEvents&&!this.options.EventSource)return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it is not supported in your environment.'"),new Error("'"+P[r]+"' is not supported in your environment.");this.logger.log(f.a.Debug,"Selecting transport '"+P[r]+"'.");try{return this.constructTransport(r)}catch(e){return e}},e.prototype.isITransport=function(e){return e&&"object"==typeof e&&"connect"in e},e.prototype.stopConnection=function(e){var t=this;if(this.logger.log(f.a.Debug,"HttpConnection.stopConnection("+e+") called while in state "+this.connectionState+"."),this.transport=void 0,e=this.stopError||e,this.stopError=void 0,"Disconnected"!==this.connectionState){if("Connecting"===this.connectionState)throw this.logger.log(f.a.Warning,"Call to HttpConnection.stopConnection("+e+") was ignored because the connection is still in the connecting state."),new Error("HttpConnection.stopConnection("+e+") was called while the connection is still in the connecting state.");if("Disconnecting"===this.connectionState&&this.stopPromiseResolver(),e?this.logger.log(f.a.Error,"Connection disconnected with error '"+e+"'."):this.logger.log(f.a.Information,"Connection disconnected."),this.sendQueue&&(this.sendQueue.stop().catch((function(e){t.logger.log(f.a.Error,"TransportSendQueue.stop() threw error '"+e+"'.")})),this.sendQueue=void 0),this.connectionId=void 0,this.connectionState="Disconnected",this.connectionStarted){this.connectionStarted=!1;try{this.onclose&&this.onclose(e)}catch(t){this.logger.log(f.a.Error,"HttpConnection.onclose("+e+") threw error '"+t+"'.")}}}else this.logger.log(f.a.Debug,"Call to HttpConnection.stopConnection("+e+") was ignored because the connection is already in the disconnected state.")},e.prototype.resolveUrl=function(e){if(0===e.lastIndexOf("https://",0)||0===e.lastIndexOf("http://",0))return e;if(!h.c.isBrowser||!window.document)throw new Error("Cannot resolve '"+e+"'.");var t=window.document.createElement("a");return t.href=e,this.logger.log(f.a.Information,"Normalizing '"+e+"' to '"+t.href+"'."),t.href},e.prototype.resolveNegotiateUrl=function(e){var t=e.indexOf("?"),n=e.substring(0,-1===t?e.length:t);return"/"!==n[n.length-1]&&(n+="/"),n+="negotiate",-1===(n+=-1===t?"":e.substring(t)).indexOf("negotiateVersion")&&(n+=-1===t?"?":"&",n+="negotiateVersion="+this.negotiateVersion),n},e}();var G=function(){function e(e){this.transport=e,this.buffer=[],this.executing=!0,this.sendBufferedData=new Q,this.transportResult=new Q,this.sendLoopPromise=this.sendLoop()}return e.prototype.send=function(e){return this.bufferData(e),this.transportResult||(this.transportResult=new Q),this.transportResult.promise},e.prototype.stop=function(){return this.executing=!1,this.sendBufferedData.resolve(),this.sendLoopPromise},e.prototype.bufferData=function(e){if(this.buffer.length&&typeof this.buffer[0]!=typeof e)throw new Error("Expected data to be of type "+typeof this.buffer+" but was of type "+typeof e);this.buffer.push(e),this.sendBufferedData.resolve()},e.prototype.sendLoop=function(){return K(this,void 0,void 0,(function(){var t,n,r;return V(this,(function(o){switch(o.label){case 0:return[4,this.sendBufferedData.promise];case 1:if(o.sent(),!this.executing)return this.transportResult&&this.transportResult.reject("Connection stopped."),[3,6];this.sendBufferedData=new Q,t=this.transportResult,this.transportResult=void 0,n="string"==typeof this.buffer[0]?this.buffer.join(""):e.concatBuffers(this.buffer),this.buffer.length=0,o.label=2;case 2:return o.trys.push([2,4,,5]),[4,this.transport.send(n)];case 3:return o.sent(),t.resolve(),[3,5];case 4:return r=o.sent(),t.reject(r),[3,5];case 5:return[3,0];case 6:return[2]}}))}))},e.concatBuffers=function(e){for(var t=e.map((function(e){return e.byteLength})).reduce((function(e,t){return e+t})),n=new Uint8Array(t),r=0,o=0,i=e;o0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]-1&&this.subject.observers.splice(e,1),0===this.subject.observers.length&&this.subject.cancelCallback&&this.subject.cancelCallback().catch((function(e){}))},e}(),y=function(){function e(e){this.minimumLogLevel=e,this.outputConsole=console}return e.prototype.log=function(e,t){if(e>=this.minimumLogLevel)switch(e){case r.a.Critical:case r.a.Error:this.outputConsole.error("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;case r.a.Warning:this.outputConsole.warn("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;case r.a.Information:this.outputConsole.info("["+(new Date).toISOString()+"] "+r.a[e]+": "+t);break;default:this.outputConsole.log("["+(new Date).toISOString()+"] "+r.a[e]+": "+t)}},e}();function v(){var e="X-SignalR-User-Agent";return l.isNode&&(e="User-Agent"),[e,b(c,m(),E(),w())]}function b(e,t,n,r){var o="Microsoft SignalR/",i=e.split(".");return o+=i[0]+"."+i[1],o+=" ("+e+"; ",o+=t&&""!==t?t+"; ":"Unknown OS; ",o+=""+n,o+=r?"; "+r:"; Unknown Runtime Version",o+=")"}function m(){if(!l.isNode)return"";switch(e.platform){case"win32":return"Windows NT";case"darwin":return"macOS";case"linux":return"Linux";default:return e.platform}}function w(){if(l.isNode)return e.versions.node}function E(){return l.isNode?"NodeJS":"Browser"}}).call(this,n(13))},function(e,t,n){"use strict";n.r(t),n.d(t,"AbortError",(function(){return s})),n.d(t,"HttpError",(function(){return i})),n.d(t,"TimeoutError",(function(){return a})),n.d(t,"HttpClient",(function(){return l})),n.d(t,"HttpResponse",(function(){return u})),n.d(t,"DefaultHttpClient",(function(){return S})),n.d(t,"HubConnection",(function(){return O})),n.d(t,"HubConnectionState",(function(){return I})),n.d(t,"HubConnectionBuilder",(function(){return re})),n.d(t,"MessageType",(function(){return b})),n.d(t,"LogLevel",(function(){return f.a})),n.d(t,"HttpTransportType",(function(){return P})),n.d(t,"TransferFormat",(function(){return x})),n.d(t,"NullLogger",(function(){return $.a})),n.d(t,"JsonHubProtocol",(function(){return ee})),n.d(t,"Subject",(function(){return _})),n.d(t,"VERSION",(function(){return h.e}));var r,o=(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),i=function(e){function t(t,n){var r=this,o=this.constructor.prototype;return(r=e.call(this,t)||this).statusCode=n,r.__proto__=o,r}return o(t,e),t}(Error),a=function(e){function t(t){void 0===t&&(t="A timeout occurred.");var n=this,r=this.constructor.prototype;return(n=e.call(this,t)||this).__proto__=r,n}return o(t,e),t}(Error),s=function(e){function t(t){void 0===t&&(t="An abort occurred.");var n=this,r=this.constructor.prototype;return(n=e.call(this,t)||this).__proto__=r,n}return o(t,e),t}(Error),c=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]=200&&o.status<300?n(new u(o.status,o.statusText,o.response||o.responseText)):r(new i(o.statusText,o.status))},o.onerror=function(){t.logger.log(f.a.Warning,"Error from HTTP request. "+o.status+": "+o.statusText+"."),r(new i(o.statusText,o.status))},o.ontimeout=function(){t.logger.log(f.a.Warning,"Timeout from HTTP request."),r(new a)},o.send(e.content||"")})):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))},t}(l),E=function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),S=function(e){function t(t){var n=e.call(this)||this;if("undefined"!=typeof fetch||h.c.isNode)n.httpClient=new v(t);else{if("undefined"==typeof XMLHttpRequest)throw new Error("No usable HttpClient found.");n.httpClient=new w(t)}return n}return E(t,e),t.prototype.send=function(e){return e.abortSignal&&e.abortSignal.aborted?Promise.reject(new s):e.method?e.url?this.httpClient.send(e):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))},t.prototype.getCookieString=function(e){return this.httpClient.getCookieString(e)},t}(l),C=n(44);!function(e){e[e.Invocation=1]="Invocation",e[e.StreamItem=2]="StreamItem",e[e.Completion=3]="Completion",e[e.StreamInvocation=4]="StreamInvocation",e[e.CancelInvocation=5]="CancelInvocation",e[e.Ping=6]="Ping",e[e.Close=7]="Close"}(b||(b={}));var I,_=function(){function e(){this.observers=[]}return e.prototype.next=function(e){for(var t=0,n=this.observers;t0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0?[2,Promise.reject(new Error("Unable to connect to the server with any of the available transports. "+i.join(" ")))]:[2,Promise.reject(new Error("None of the transports supported by the client are supported by the server."))]}}))}))},e.prototype.constructTransport=function(e){switch(e){case P.WebSockets:if(!this.options.WebSocket)throw new Error("'WebSocket' is not supported in your environment.");return new Y(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.WebSocket,this.options.headers||{});case P.ServerSentEvents:if(!this.options.EventSource)throw new Error("'EventSource' is not supported in your environment.");return new H(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.EventSource,this.options.withCredentials,this.options.headers||{});case P.LongPolling:return new B(this.httpClient,this.accessTokenFactory,this.logger,this.options.logMessageContent||!1,this.options.withCredentials,this.options.headers||{});default:throw new Error("Unknown transport: "+e+".")}},e.prototype.startTransport=function(e,t){var n=this;return this.transport.onreceive=this.onreceive,this.transport.onclose=function(e){return n.stopConnection(e)},this.transport.connect(e,t)},e.prototype.resolveTransportOrError=function(e,t,n){var r=P[e.transport];if(null==r)return this.logger.log(f.a.Debug,"Skipping transport '"+e.transport+"' because it is not supported by this client."),new Error("Skipping transport '"+e.transport+"' because it is not supported by this client.");if(!function(e,t){return!e||0!=(t&e)}(t,r))return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it was disabled by the client."),new Error("'"+P[r]+"' is disabled by the client.");if(!(e.transferFormats.map((function(e){return x[e]})).indexOf(n)>=0))return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it does not support the requested transfer format '"+x[n]+"'."),new Error("'"+P[r]+"' does not support "+x[n]+".");if(r===P.WebSockets&&!this.options.WebSocket||r===P.ServerSentEvents&&!this.options.EventSource)return this.logger.log(f.a.Debug,"Skipping transport '"+P[r]+"' because it is not supported in your environment.'"),new Error("'"+P[r]+"' is not supported in your environment.");this.logger.log(f.a.Debug,"Selecting transport '"+P[r]+"'.");try{return this.constructTransport(r)}catch(e){return e}},e.prototype.isITransport=function(e){return e&&"object"==typeof e&&"connect"in e},e.prototype.stopConnection=function(e){var t=this;if(this.logger.log(f.a.Debug,"HttpConnection.stopConnection("+e+") called while in state "+this.connectionState+"."),this.transport=void 0,e=this.stopError||e,this.stopError=void 0,"Disconnected"!==this.connectionState){if("Connecting"===this.connectionState)throw this.logger.log(f.a.Warning,"Call to HttpConnection.stopConnection("+e+") was ignored because the connection is still in the connecting state."),new Error("HttpConnection.stopConnection("+e+") was called while the connection is still in the connecting state.");if("Disconnecting"===this.connectionState&&this.stopPromiseResolver(),e?this.logger.log(f.a.Error,"Connection disconnected with error '"+e+"'."):this.logger.log(f.a.Information,"Connection disconnected."),this.sendQueue&&(this.sendQueue.stop().catch((function(e){t.logger.log(f.a.Error,"TransportSendQueue.stop() threw error '"+e+"'.")})),this.sendQueue=void 0),this.connectionId=void 0,this.connectionState="Disconnected",this.connectionStarted){this.connectionStarted=!1;try{this.onclose&&this.onclose(e)}catch(t){this.logger.log(f.a.Error,"HttpConnection.onclose("+e+") threw error '"+t+"'.")}}}else this.logger.log(f.a.Debug,"Call to HttpConnection.stopConnection("+e+") was ignored because the connection is already in the disconnected state.")},e.prototype.resolveUrl=function(e){if(0===e.lastIndexOf("https://",0)||0===e.lastIndexOf("http://",0))return e;if(!h.c.isBrowser||!window.document)throw new Error("Cannot resolve '"+e+"'.");var t=window.document.createElement("a");return t.href=e,this.logger.log(f.a.Information,"Normalizing '"+e+"' to '"+t.href+"'."),t.href},e.prototype.resolveNegotiateUrl=function(e){var t=e.indexOf("?"),n=e.substring(0,-1===t?e.length:t);return"/"!==n[n.length-1]&&(n+="/"),n+="negotiate",-1===(n+=-1===t?"":e.substring(t)).indexOf("negotiateVersion")&&(n+=-1===t?"?":"&",n+="negotiateVersion="+this.negotiateVersion),n},e}();var G=function(){function e(e){this.transport=e,this.buffer=[],this.executing=!0,this.sendBufferedData=new Q,this.transportResult=new Q,this.sendLoopPromise=this.sendLoop()}return e.prototype.send=function(e){return this.bufferData(e),this.transportResult||(this.transportResult=new Q),this.transportResult.promise},e.prototype.stop=function(){return this.executing=!1,this.sendBufferedData.resolve(),this.sendLoopPromise},e.prototype.bufferData=function(e){if(this.buffer.length&&typeof this.buffer[0]!=typeof e)throw new Error("Expected data to be of type "+typeof this.buffer+" but was of type "+typeof e);this.buffer.push(e),this.sendBufferedData.resolve()},e.prototype.sendLoop=function(){return V(this,void 0,void 0,(function(){var t,n,r;return K(this,(function(o){switch(o.label){case 0:return[4,this.sendBufferedData.promise];case 1:if(o.sent(),!this.executing)return this.transportResult&&this.transportResult.reject("Connection stopped."),[3,6];this.sendBufferedData=new Q,t=this.transportResult,this.transportResult=void 0,n="string"==typeof this.buffer[0]?this.buffer.join(""):e.concatBuffers(this.buffer),this.buffer.length=0,o.label=2;case 2:return o.trys.push([2,4,,5]),[4,this.transport.send(n)];case 3:return o.sent(),t.resolve(),[3,5];case 4:return r=o.sent(),t.reject(r),[3,5];case 5:return[3,0];case 6:return[2]}}))}))},e.concatBuffers=function(e){for(var t=e.map((function(e){return e.byteLength})).reduce((function(e,t){return e+t})),n=new Uint8Array(t),r=0,o=0,i=e;o0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1] * @license MIT */ -var r=n(54),o=n(55),i=n(56);function a(){return c.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(e,t){if(a()=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|e}function d(e,t){if(c.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return F(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return H(e).length;default:if(r)return F(e).length;t=(""+t).toLowerCase(),r=!0}}function g(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return x(this,t,n);case"utf8":case"utf-8":return k(this,t,n);case"ascii":return T(this,t,n);case"latin1":case"binary":return P(this,t,n);case"base64":return _(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function y(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function v(e,t,n,r,o){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof t&&(t=c.from(t,r)),c.isBuffer(t))return 0===t.length?-1:b(e,t,n,r,o);if("number"==typeof t)return t&=255,c.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,r,o);throw new TypeError("val must be string, number or Buffer")}function b(e,t,n,r,o){var i,a=1,s=e.length,c=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;a=2,s/=2,c/=2,n/=2}function u(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(o){var l=-1;for(i=n;is&&(n=s-c),i=n;i>=0;i--){for(var f=!0,h=0;ho&&(r=o):r=o;var i=t.length;if(i%2!=0)throw new TypeError("Invalid hex string");r>i/2&&(r=i/2);for(var a=0;a>8,o=n%256,i.push(o),i.push(r);return i}(t,e.length-n),e,n,r)}function _(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function k(e,t,n){n=Math.min(e.length,n);for(var r=[],o=t;o239?4:u>223?3:u>191?2:1;if(o+f<=n)switch(f){case 1:u<128&&(l=u);break;case 2:128==(192&(i=e[o+1]))&&(c=(31&u)<<6|63&i)>127&&(l=c);break;case 3:i=e[o+1],a=e[o+2],128==(192&i)&&128==(192&a)&&(c=(15&u)<<12|(63&i)<<6|63&a)>2047&&(c<55296||c>57343)&&(l=c);break;case 4:i=e[o+1],a=e[o+2],s=e[o+3],128==(192&i)&&128==(192&a)&&128==(192&s)&&(c=(15&u)<<18|(63&i)<<12|(63&a)<<6|63&s)>65535&&c<1114112&&(l=c)}null===l?(l=65533,f=1):l>65535&&(l-=65536,r.push(l>>>10&1023|55296),l=56320|1023&l),r.push(l),o+=f}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var n="",r=0;for(;r0&&(e=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(e+=" ... ")),""},c.prototype.compare=function(e,t,n,r,o){if(!c.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&t>=n)return 0;if(r>=o)return-1;if(t>=n)return 1;if(this===e)return 0;for(var i=(o>>>=0)-(r>>>=0),a=(n>>>=0)-(t>>>=0),s=Math.min(i,a),u=this.slice(r,o),l=e.slice(t,n),f=0;fo)&&(n=o),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var i=!1;;)switch(r){case"hex":return m(this,e,t,n);case"utf8":case"utf-8":return w(this,e,t,n);case"ascii":return E(this,e,t,n);case"latin1":case"binary":return S(this,e,t,n);case"base64":return C(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,e,t,n);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),i=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function T(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;or)&&(n=r);for(var o="",i=t;in)throw new RangeError("Trying to access beyond buffer length")}function L(e,t,n,r,o,i){if(!c.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||te.length)throw new RangeError("Index out of range")}function D(e,t,n,r){t<0&&(t=65535+t+1);for(var o=0,i=Math.min(e.length-n,2);o>>8*(r?o:1-o)}function M(e,t,n,r){t<0&&(t=4294967295+t+1);for(var o=0,i=Math.min(e.length-n,4);o>>8*(r?o:3-o)&255}function j(e,t,n,r,o,i){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function A(e,t,n,r,i){return i||j(e,0,n,4),o.write(e,t,n,r,23,4),n+4}function B(e,t,n,r,i){return i||j(e,0,n,8),o.write(e,t,n,r,52,8),n+8}c.prototype.slice=function(e,t){var n,r=this.length;if((e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t0&&(o*=256);)r+=this[e+--t]*o;return r},c.prototype.readUInt8=function(e,t){return t||R(e,1,this.length),this[e]},c.prototype.readUInt16LE=function(e,t){return t||R(e,2,this.length),this[e]|this[e+1]<<8},c.prototype.readUInt16BE=function(e,t){return t||R(e,2,this.length),this[e]<<8|this[e+1]},c.prototype.readUInt32LE=function(e,t){return t||R(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},c.prototype.readUInt32BE=function(e,t){return t||R(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},c.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=this[e],o=1,i=0;++i=(o*=128)&&(r-=Math.pow(2,8*t)),r},c.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=t,o=1,i=this[e+--r];r>0&&(o*=256);)i+=this[e+--r]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*t)),i},c.prototype.readInt8=function(e,t){return t||R(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},c.prototype.readInt16LE=function(e,t){t||R(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt16BE=function(e,t){t||R(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt32LE=function(e,t){return t||R(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},c.prototype.readInt32BE=function(e,t){return t||R(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},c.prototype.readFloatLE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!0,23,4)},c.prototype.readFloatBE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!1,23,4)},c.prototype.readDoubleLE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!0,52,8)},c.prototype.readDoubleBE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!1,52,8)},c.prototype.writeUIntLE=function(e,t,n,r){(e=+e,t|=0,n|=0,r)||L(this,e,t,n,Math.pow(2,8*n)-1,0);var o=1,i=0;for(this[t]=255&e;++i=0&&(i*=256);)this[t+o]=e/i&255;return t+n},c.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,255,0),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},c.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},c.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},c.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):M(this,e,t,!0),t+4},c.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):M(this,e,t,!1),t+4},c.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=0,a=1,s=0;for(this[t]=255&e;++i>0)-s&255;return t+n},c.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=n-1,a=1,s=0;for(this[t+i]=255&e;--i>=0&&(a*=256);)e<0&&0===s&&0!==this[t+i+1]&&(s=1),this[t+i]=(e/a>>0)-s&255;return t+n},c.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,127,-128),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},c.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},c.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},c.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):M(this,e,t,!0),t+4},c.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):M(this,e,t,!1),t+4},c.prototype.writeFloatLE=function(e,t,n){return A(this,e,t,!0,n)},c.prototype.writeFloatBE=function(e,t,n){return A(this,e,t,!1,n)},c.prototype.writeDoubleLE=function(e,t,n){return B(this,e,t,!0,n)},c.prototype.writeDoubleBE=function(e,t,n){return B(this,e,t,!1,n)},c.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t=0;--o)e[o+t]=this[o+n];else if(i<1e3||!c.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(i=t;i55295&&n<57344){if(!o){if(n>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===r){(t-=3)>-1&&i.push(239,191,189);continue}o=n;continue}if(n<56320){(t-=3)>-1&&i.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(t-=3)>-1&&i.push(239,191,189);if(o=null,n<128){if((t-=1)<0)break;i.push(n)}else if(n<2048){if((t-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function H(e){return r.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(U,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function q(e,t,n,r){for(var o=0;o=t.length||o>=e.length);++o)t[o+n]=e[o];return o}}).call(this,n(9))},function(e,t,n){"use strict";var r=n(15).Buffer,o=n(57),i=n(21),a=n(70),s=n(73),c=n(74);e.exports=function(e){var t=[],n=[];return{encode:c(t,(e=e||{forceFloat64:!1,compatibilityMode:!1,disableTimestampEncoding:!1}).forceFloat64,e.compatibilityMode,e.disableTimestampEncoding),decode:s(n),register:function(e,t,n,a){return o(t,"must have a constructor"),o(n,"must have an encode function"),o(e>=0,"must have a non-negative type"),o(a,"must have a decode function"),this.registerEncoder((function(e){return e instanceof t}),(function(t){var o=i(),a=r.allocUnsafe(1);return a.writeInt8(e,0),o.append(a),o.append(n(t)),o})),this.registerDecoder(e,a),this},registerEncoder:function(e,n){return o(e,"must have an encode function"),o(n,"must have an encode function"),t.push({check:e,encode:n}),this},registerDecoder:function(e,t){return o(e>=0,"must have a non-negative type"),o(t,"must have a decode function"),n.push({type:e,decode:t}),this},encoder:a.encoder,decoder:a.decoder,buffer:!0,type:"msgpack5",IncompleteBufferError:s.IncompleteBufferError}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=p("_blazorLogicalChildren"),o=p("_blazorLogicalParent"),i=p("_blazorLogicalEnd");function a(e,t){if(e.childNodes.length>0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return r in e||(e[r]=[]),e}function s(e,t,n){var i=e;if(e instanceof Comment&&(u(i)&&u(i).length>0))throw new Error("Not implemented: inserting non-empty logical container");if(c(i))throw new Error("Not implemented: moving existing logical children");var a=u(t);if(n0;)e(r,0)}var i=r;i.parentNode.removeChild(i)},t.getLogicalParent=c,t.getLogicalSiblingEnd=function(e){return e[i]||null},t.getLogicalChild=function(e,t){return u(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===l(e).namespaceURI},t.getLogicalChildrenArray=u,t.permuteLogicalChildren=function(e,t){var n=u(e);t.forEach((function(e){e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=function e(t){if(t instanceof Element)return t;var n=f(t);if(n)return n.previousSibling;var r=c(t);return r instanceof Element?r.lastChild:e(r)}(e.moveRangeStart)})),t.forEach((function(t){var r=t.moveToBeforeMarker=document.createComment("marker"),o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):h(r,e)})),t.forEach((function(e){for(var t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd,i=r;i;){var a=i.nextSibling;if(n.insertBefore(i,t),i===o)break;i=a}n.removeChild(t)})),t.forEach((function(e){n[e.toSiblingIndex]=e.moveRangeStart}))},t.getClosestDomElement=l},function(e,t){var n,r,o=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:i}catch(e){n=i}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var c,u=[],l=!1,f=-1;function h(){l&&c&&(l=!1,c.length?u=c.concat(u):f=-1,u.length&&p())}function p(){if(!l){var e=s(h);l=!0;for(var t=u.length;t;){for(c=u,u=[];++f1)for(var n=1;nthis.length)&&(r=this.length),n>=this.length)return e||i.alloc(0);if(r<=0)return e||i.alloc(0);var o,a,s=!!e,c=this._offset(n),u=r-n,l=u,f=s&&t||0,h=c[1];if(0===n&&r==this.length){if(!s)return 1===this._bufs.length?this._bufs[0]:i.concat(this._bufs,this.length);for(a=0;a(o=this._bufs[a].length-h))){this._bufs[a].copy(e,f,h,h+l);break}this._bufs[a].copy(e,f,h),f+=o,l-=o,h&&(h=0)}return e},a.prototype.shallowSlice=function(e,t){e=e||0,t=t||this.length,e<0&&(e+=this.length),t<0&&(t+=this.length);var n=this._offset(e),r=this._offset(t),o=this._bufs.slice(n[0],r[0]+1);return 0==r[1]?o.pop():o[o.length-1]=o[o.length-1].slice(0,r[1]),0!=n[1]&&(o[0]=o[0].slice(n[1])),new a(o)},a.prototype.toString=function(e,t,n){return this.slice(t,n).toString(e)},a.prototype.consume=function(e){for(;this._bufs.length;){if(!(e>=this._bufs[0].length)){this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift()}return this},a.prototype.duplicate=function(){for(var e=0,t=new a;e0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>>0)}t.readInt32LE=function(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24},t.readUint32LE=i,t.readUint64LE=function(e,t){var n=i(e,t+4);if(n>o)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*r+i(e,t)},t.readLEB128=function(e,t){for(var n=0,r=0,o=0;o<4;o++){var i=e[t+o];if(n|=(127&i)<65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u)}r.length>1024&&(o.push(String.fromCharCode.apply(null,r)),r.length=0)}return o.push(String.fromCharCode.apply(null,r)),o.join("")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shouldAutoStart=function(){return!(!document||!document.currentScript||"false"===document.currentScript.getAttribute("autostart"))}},function(e,t,n){(function(e){var r=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),n={},r=0;r=i)return e;switch(e){case"%s":return String(r[n++]);case"%d":return Number(r[n++]);case"%j":try{return JSON.stringify(r[n++])}catch(e){return"[Circular]"}default:return e}})),c=r[n];n=3&&(r.depth=arguments[2]),arguments.length>=4&&(r.colors=arguments[3]),d(n)?r.showHidden=n:n&&t._extend(r,n),b(r.showHidden)&&(r.showHidden=!1),b(r.depth)&&(r.depth=2),b(r.colors)&&(r.colors=!1),b(r.customInspect)&&(r.customInspect=!0),r.colors&&(r.stylize=c),l(r,e,r.depth)}function c(e,t){var n=s.styles[t];return n?"["+s.colors[n][0]+"m"+e+"["+s.colors[n][1]+"m":e}function u(e,t){return e}function l(e,n,r){if(e.customInspect&&n&&C(n.inspect)&&n.inspect!==t.inspect&&(!n.constructor||n.constructor.prototype!==n)){var o=n.inspect(r,e);return v(o)||(o=l(e,o,r)),o}var i=function(e,t){if(b(t))return e.stylize("undefined","undefined");if(v(t)){var n="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(n,"string")}if(y(t))return e.stylize(""+t,"number");if(d(t))return e.stylize(""+t,"boolean");if(g(t))return e.stylize("null","null")}(e,n);if(i)return i;var a=Object.keys(n),s=function(e){var t={};return e.forEach((function(e,n){t[e]=!0})),t}(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(n)),S(n)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return f(n);if(0===a.length){if(C(n)){var c=n.name?": "+n.name:"";return e.stylize("[Function"+c+"]","special")}if(m(n))return e.stylize(RegExp.prototype.toString.call(n),"regexp");if(E(n))return e.stylize(Date.prototype.toString.call(n),"date");if(S(n))return f(n)}var u,w="",I=!1,_=["{","}"];(p(n)&&(I=!0,_=["[","]"]),C(n))&&(w=" [Function"+(n.name?": "+n.name:"")+"]");return m(n)&&(w=" "+RegExp.prototype.toString.call(n)),E(n)&&(w=" "+Date.prototype.toUTCString.call(n)),S(n)&&(w=" "+f(n)),0!==a.length||I&&0!=n.length?r<0?m(n)?e.stylize(RegExp.prototype.toString.call(n),"regexp"):e.stylize("[Object]","special"):(e.seen.push(n),u=I?function(e,t,n,r,o){for(var i=[],a=0,s=t.length;a=0&&0,e+t.replace(/\u001b\[\d\d?m/g,"").length+1}),0)>60)return n[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+n[1];return n[0]+t+" "+e.join(", ")+" "+n[1]}(u,w,_)):_[0]+w+_[1]}function f(e){return"["+Error.prototype.toString.call(e)+"]"}function h(e,t,n,r,o,i){var a,s,c;if((c=Object.getOwnPropertyDescriptor(t,o)||{value:t[o]}).get?s=c.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):c.set&&(s=e.stylize("[Setter]","special")),P(r,o)||(a="["+o+"]"),s||(e.seen.indexOf(c.value)<0?(s=g(n)?l(e,c.value,null):l(e,c.value,n-1)).indexOf("\n")>-1&&(s=i?s.split("\n").map((function(e){return" "+e})).join("\n").substr(2):"\n"+s.split("\n").map((function(e){return" "+e})).join("\n")):s=e.stylize("[Circular]","special")),b(a)){if(i&&o.match(/^\d+$/))return s;(a=JSON.stringify(""+o)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+s}function p(e){return Array.isArray(e)}function d(e){return"boolean"==typeof e}function g(e){return null===e}function y(e){return"number"==typeof e}function v(e){return"string"==typeof e}function b(e){return void 0===e}function m(e){return w(e)&&"[object RegExp]"===I(e)}function w(e){return"object"==typeof e&&null!==e}function E(e){return w(e)&&"[object Date]"===I(e)}function S(e){return w(e)&&("[object Error]"===I(e)||e instanceof Error)}function C(e){return"function"==typeof e}function I(e){return Object.prototype.toString.call(e)}function _(e){return e<10?"0"+e.toString(10):e.toString(10)}t.debuglog=function(n){if(b(i)&&(i=e.env.NODE_DEBUG||""),n=n.toUpperCase(),!a[n])if(new RegExp("\\b"+n+"\\b","i").test(i)){var r=e.pid;a[n]=function(){var e=t.format.apply(t,arguments);console.error("%s %d: %s",n,r,e)}}else a[n]=function(){};return a[n]},t.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.isArray=p,t.isBoolean=d,t.isNull=g,t.isNullOrUndefined=function(e){return null==e},t.isNumber=y,t.isString=v,t.isSymbol=function(e){return"symbol"==typeof e},t.isUndefined=b,t.isRegExp=m,t.isObject=w,t.isDate=E,t.isError=S,t.isFunction=C,t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},t.isBuffer=n(59);var k=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function T(){var e=new Date,t=[_(e.getHours()),_(e.getMinutes()),_(e.getSeconds())].join(":");return[e.getDate(),k[e.getMonth()],t].join(" ")}function P(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){console.log("%s - %s",T(),t.format.apply(t,arguments))},t.inherits=n(60),t._extend=function(e,t){if(!t||!w(t))return e;for(var n=Object.keys(t),r=n.length;r--;)e[n[r]]=t[n[r]];return e};var x="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function O(e,t){if(!e){var n=new Error("Promise was rejected with a falsy value");n.reason=e,e=n}return t(e)}t.promisify=function(e){if("function"!=typeof e)throw new TypeError('The "original" argument must be of type Function');if(x&&e[x]){var t;if("function"!=typeof(t=e[x]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(t,x,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var t,n,r=new Promise((function(e,r){t=e,n=r})),o=[],i=0;i0?("string"==typeof t||a.objectMode||Object.getPrototypeOf(t)===u.prototype||(t=function(e){return u.from(e)}(t)),r?a.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):E(e,a,t,!0):a.ended?e.emit("error",new Error("stream.push() after EOF")):(a.reading=!1,a.decoder&&!n?(t=a.decoder.write(t),a.objectMode||0!==t.length?E(e,a,t,!1):_(e,a)):E(e,a,t,!1))):r||(a.reading=!1));return function(e){return!e.ended&&(e.needReadable||e.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=8388608?e=8388608:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function C(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(p("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?o.nextTick(I,e):I(e))}function I(e){p("emit readable"),e.emit("readable"),x(e)}function _(e,t){t.readingMore||(t.readingMore=!0,o.nextTick(k,e,t))}function k(e,t){for(var n=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(n=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):n=function(e,t,n){var r;ei.length?i.length:e;if(a===i.length?o+=i:o+=i.slice(0,e),0===(e-=a)){a===i.length?(++r,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=i.slice(a));break}++r}return t.length-=r,o}(e,t):function(e,t){var n=u.allocUnsafe(e),r=t.head,o=1;r.data.copy(n),e-=r.data.length;for(;r=r.next;){var i=r.data,a=e>i.length?i.length:e;if(i.copy(n,n.length-e,0,a),0===(e-=a)){a===i.length?(++o,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=i.slice(a));break}++o}return t.length-=o,n}(e,t);return r}(e,t.buffer,t.decoder),n);var n}function R(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,o.nextTick(L,t,e))}function L(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function D(e,t){for(var n=0,r=e.length;n=t.highWaterMark||t.ended))return p("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?R(this):C(this),null;if(0===(e=S(e,t))&&t.ended)return 0===t.length&&R(this),null;var r,o=t.needReadable;return p("need readable",o),(0===t.length||t.length-e0?O(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),n!==e&&t.ended&&R(this)),null!==r&&this.emit("data",r),r},m.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},m.prototype.pipe=function(e,t){var n=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=e;break;case 1:i.pipes=[i.pipes,e];break;default:i.pipes.push(e)}i.pipesCount+=1,p("pipe count=%d opts=%j",i.pipesCount,t);var c=(!t||!1!==t.end)&&e!==r.stdout&&e!==r.stderr?l:m;function u(t,r){p("onunpipe"),t===n&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,p("cleanup"),e.removeListener("close",v),e.removeListener("finish",b),e.removeListener("drain",f),e.removeListener("error",y),e.removeListener("unpipe",u),n.removeListener("end",l),n.removeListener("end",m),n.removeListener("data",g),h=!0,!i.awaitDrain||e._writableState&&!e._writableState.needDrain||f())}function l(){p("onend"),e.end()}i.endEmitted?o.nextTick(c):n.once("end",c),e.on("unpipe",u);var f=function(e){return function(){var t=e._readableState;p("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,"data")&&(t.flowing=!0,x(e))}}(n);e.on("drain",f);var h=!1;var d=!1;function g(t){p("ondata"),d=!1,!1!==e.write(t)||d||((1===i.pipesCount&&i.pipes===e||i.pipesCount>1&&-1!==D(i.pipes,e))&&!h&&(p("false write response, pause",n._readableState.awaitDrain),n._readableState.awaitDrain++,d=!0),n.pause())}function y(t){p("onerror",t),m(),e.removeListener("error",y),0===s(e,"error")&&e.emit("error",t)}function v(){e.removeListener("finish",b),m()}function b(){p("onfinish"),e.removeListener("close",v),m()}function m(){p("unpipe"),n.unpipe(e)}return n.on("data",g),function(e,t,n){if("function"==typeof e.prependListener)return e.prependListener(t,n);e._events&&e._events[t]?a(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]:e.on(t,n)}(e,"error",y),e.once("close",v),e.once("finish",b),e.emit("pipe",n),i.flowing||(p("pipe resume"),n.resume()),e},m.prototype.unpipe=function(e){var t=this._readableState,n={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,n)),this;if(!e){var r=t.pipes,o=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var i=0;i0&&a.length>o&&!a.warned){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,s=c,console&&console.warn&&console.warn(s)}return e}function h(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},o=h.bind(r);return o.listener=n,r.wrapFn=o,o}function d(e,t,n){var r=e._events;if(void 0===r)return[];var o=r[t];return void 0===o?[]:"function"==typeof o?n?[o.listener||o]:[o]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(a=t[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var c=o[e];if(void 0===c)return!1;if("function"==typeof c)i(c,this,t);else{var u=c.length,l=y(c,u);for(n=0;n=0;i--)if(n[i]===t||n[i].listener===t){a=n[i].listener,o=i;break}if(o<0)return this;0===o?n.shift():function(e,t){for(;t+1=0;r--)this.removeListener(e,t[r]);return this},s.prototype.listeners=function(e){return d(this,e,!0)},s.prototype.rawListeners=function(e){return d(this,e,!1)},s.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):g.call(e,t)},s.prototype.listenerCount=g,s.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]}},function(e,t,n){e.exports=n(38).EventEmitter},function(e,t,n){"use strict";var r=n(22);function o(e,t){e.emit("error",t)}e.exports={destroy:function(e,t){var n=this,i=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return i||a?(t?t(e):!e||this._writableState&&this._writableState.errorEmitted||r.nextTick(o,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!t&&e?(r.nextTick(o,n,e),n._writableState&&(n._writableState.errorEmitted=!0)):t&&t(e)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},function(e,t,n){"use strict";var r=n(66).Buffer,o=r.isEncoding||function(e){switch((e=""+e)&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function i(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}(e);if("string"!=typeof t&&(r.isEncoding===o||!o(e)))throw new Error("Unknown encoding: "+e);return t||e}(e),this.encoding){case"utf16le":this.text=c,this.end=u,t=4;break;case"utf8":this.fillLast=s,t=4;break;case"base64":this.text=l,this.end=f,t=3;break;default:return this.write=h,void(this.end=p)}this.lastNeed=0,this.lastTotal=0,this.lastChar=r.allocUnsafe(t)}function a(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function s(e){var t=this.lastTotal-this.lastNeed,n=function(e,t,n){if(128!=(192&t[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�"}}(this,e);return void 0!==n?n:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function c(e,t){if((e.length-t)%2==0){var n=e.toString("utf16le",t);if(n){var r=n.charCodeAt(n.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function u(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,n)}return t}function l(e,t){var n=(e.length-t)%3;return 0===n?e.toString("base64",t):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-n))}function f(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function h(e){return e.toString(this.encoding)}function p(e){return e&&e.length?this.write(e):""}t.StringDecoder=i,i.prototype.write=function(e){if(0===e.length)return"";var t,n;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";n=this.lastNeed,this.lastNeed=0}else n=0;return n=0)return o>0&&(e.lastNeed=o-1),o;if(--r=0)return o>0&&(e.lastNeed=o-2),o;if(--r=0)return o>0&&(2===o?o=0:e.lastNeed=o-3),o;return 0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=n;var r=e.length-(n-this.lastNeed);return e.copy(this.lastChar,0,r),e.toString("utf8",t,r)},i.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},function(e,t,n){"use strict";(function(t,r,o){var i=n(22);function a(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,n){var r=e.entry;e.entry=null;for(;r;){var o=r.callback;t.pendingcb--,o(n),r=r.next}t.corkedRequestsFree?t.corkedRequestsFree.next=e:t.corkedRequestsFree=e}(t,e)}}e.exports=b;var s,c=!t.browser&&["v0.10","v0.9."].indexOf(t.version.slice(0,5))>-1?r:i.nextTick;b.WritableState=v;var u=n(20);u.inherits=n(16);var l={deprecate:n(69)},f=n(39),h=n(15).Buffer,p=o.Uint8Array||function(){};var d,g=n(40);function y(){}function v(e,t){s=s||n(10),e=e||{};var r=t instanceof s;this.objectMode=!!e.objectMode,r&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var o=e.highWaterMark,u=e.writableHighWaterMark,l=this.objectMode?16:16384;this.highWaterMark=o||0===o?o:r&&(u||0===u)?u:l,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var f=!1===e.decodeStrings;this.decodeStrings=!f,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var n=e._writableState,r=n.sync,o=n.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(n),t)!function(e,t,n,r,o){--t.pendingcb,n?(i.nextTick(o,r),i.nextTick(I,e,t),e._writableState.errorEmitted=!0,e.emit("error",r)):(o(r),e._writableState.errorEmitted=!0,e.emit("error",r),I(e,t))}(e,n,r,t,o);else{var a=S(n);a||n.corked||n.bufferProcessing||!n.bufferedRequest||E(e,n),r?c(w,e,n,a,o):w(e,n,a,o)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}function b(e){if(s=s||n(10),!(d.call(b,this)||this instanceof s))return new b(e);this._writableState=new v(e,this),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final)),f.call(this)}function m(e,t,n,r,o,i,a){t.writelen=r,t.writecb=a,t.writing=!0,t.sync=!0,n?e._writev(o,t.onwrite):e._write(o,i,t.onwrite),t.sync=!1}function w(e,t,n,r){n||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}(e,t),t.pendingcb--,r(),I(e,t)}function E(e,t){t.bufferProcessing=!0;var n=t.bufferedRequest;if(e._writev&&n&&n.next){var r=t.bufferedRequestCount,o=new Array(r),i=t.corkedRequestsFree;i.entry=n;for(var s=0,c=!0;n;)o[s]=n,n.isBuf||(c=!1),n=n.next,s+=1;o.allBuffers=c,m(e,t,!0,t.length,o,"",i.finish),t.pendingcb++,t.lastBufferedRequest=null,i.next?(t.corkedRequestsFree=i.next,i.next=null):t.corkedRequestsFree=new a(t),t.bufferedRequestCount=0}else{for(;n;){var u=n.chunk,l=n.encoding,f=n.callback;if(m(e,t,!1,t.objectMode?1:u.length,u,l,f),n=n.next,t.bufferedRequestCount--,t.writing)break}null===n&&(t.lastBufferedRequest=null)}t.bufferedRequest=n,t.bufferProcessing=!1}function S(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function C(e,t){e._final((function(n){t.pendingcb--,n&&e.emit("error",n),t.prefinished=!0,e.emit("prefinish"),I(e,t)}))}function I(e,t){var n=S(t);return n&&(!function(e,t){t.prefinished||t.finalCalled||("function"==typeof e._final?(t.pendingcb++,t.finalCalled=!0,i.nextTick(C,e,t)):(t.prefinished=!0,e.emit("prefinish")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit("finish"))),n}u.inherits(b,f),v.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(v.prototype,"buffer",{get:l.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(d=Function.prototype[Symbol.hasInstance],Object.defineProperty(b,Symbol.hasInstance,{value:function(e){return!!d.call(this,e)||this===b&&(e&&e._writableState instanceof v)}})):d=function(e){return e instanceof this},b.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},b.prototype.write=function(e,t,n){var r,o=this._writableState,a=!1,s=!o.objectMode&&(r=e,h.isBuffer(r)||r instanceof p);return s&&!h.isBuffer(e)&&(e=function(e){return h.from(e)}(e)),"function"==typeof t&&(n=t,t=null),s?t="buffer":t||(t=o.defaultEncoding),"function"!=typeof n&&(n=y),o.ended?function(e,t){var n=new Error("write after end");e.emit("error",n),i.nextTick(t,n)}(this,n):(s||function(e,t,n,r){var o=!0,a=!1;return null===n?a=new TypeError("May not write null values to stream"):"string"==typeof n||void 0===n||t.objectMode||(a=new TypeError("Invalid non-string/buffer chunk")),a&&(e.emit("error",a),i.nextTick(r,a),o=!1),o}(this,o,e,n))&&(o.pendingcb++,a=function(e,t,n,r,o,i){if(!n){var a=function(e,t,n){e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=h.from(t,n));return t}(t,r,o);r!==a&&(n=!0,o="buffer",r=a)}var s=t.objectMode?1:r.length;t.length+=s;var c=t.length-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(b.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),b.prototype._write=function(e,t,n){n(new Error("_write() is not implemented"))},b.prototype._writev=null,b.prototype.end=function(e,t,n){var r=this._writableState;"function"==typeof e?(n=e,e=null,t=null):"function"==typeof t&&(n=t,t=null),null!=e&&this.write(e,t),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||function(e,t,n){t.ending=!0,I(e,t),n&&(t.finished?i.nextTick(n):e.once("finish",n));t.ended=!0,e.writable=!1}(this,r,n)},Object.defineProperty(b.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),b.prototype.destroy=g.destroy,b.prototype._undestroy=g.undestroy,b.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,n(14),n(67).setImmediate,n(9))},function(e,t,n){"use strict";e.exports=a;var r=n(10),o=n(20);function i(e,t){var n=this._transformState;n.transforming=!1;var r=n.writecb;if(!r)return this.emit("error",new Error("write callback called multiple times"));n.writechunk=null,n.writecb=null,null!=t&&this.push(t),r(e);var o=this._readableState;o.reading=!1,(o.needReadable||o.lengths?a.slice(s).buffer:null}else{var c,u=t;if(-1===(c=u.indexOf(r.a.RecordSeparator)))throw new Error("Message is incomplete.");s=c+1;n=u.substring(0,s),i=u.length>s?u.substring(s):null}var l=r.a.parse(n),f=JSON.parse(l[0]);if(f.type)throw new Error("Expected a handshake response from the server.");return[i,f]},t}()}).call(this,n(11).Buffer)},,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a},a=this&&this.__spread||function(){for(var e=[],t=0;t0?a-4:a;for(n=0;n>16&255,c[l++]=t>>8&255,c[l++]=255&t;2===s&&(t=o[e.charCodeAt(n)]<<2|o[e.charCodeAt(n+1)]>>4,c[l++]=255&t);1===s&&(t=o[e.charCodeAt(n)]<<10|o[e.charCodeAt(n+1)]<<4|o[e.charCodeAt(n+2)]>>2,c[l++]=t>>8&255,c[l++]=255&t);return c},t.fromByteArray=function(e){for(var t,n=e.length,o=n%3,i=[],a=0,s=n-o;as?s:a+16383));1===o?(t=e[n-1],i.push(r[t>>2]+r[t<<4&63]+"==")):2===o&&(t=(e[n-2]<<8)+e[n-1],i.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"="));return i.join("")};for(var r=[],o=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,c=a.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function l(e,t,n){for(var o,i,a=[],s=t;s>18&63]+r[i>>12&63]+r[i>>6&63]+r[63&i]);return a.join("")}o["-".charCodeAt(0)]=62,o["_".charCodeAt(0)]=63},function(e,t){t.read=function(e,t,n,r,o){var i,a,s=8*o-r-1,c=(1<>1,l=-7,f=n?o-1:0,h=n?-1:1,p=e[t+f];for(f+=h,i=p&(1<<-l)-1,p>>=-l,l+=s;l>0;i=256*i+e[t+f],f+=h,l-=8);for(a=i&(1<<-l)-1,i>>=-l,l+=r;l>0;a=256*a+e[t+f],f+=h,l-=8);if(0===i)i=1-u;else{if(i===c)return a?NaN:1/0*(p?-1:1);a+=Math.pow(2,r),i-=u}return(p?-1:1)*a*Math.pow(2,i-r)},t.write=function(e,t,n,r,o,i){var a,s,c,u=8*i-o-1,l=(1<>1,h=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=r?0:i-1,d=r?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=l):(a=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-a))<1&&(a--,c*=2),(t+=a+f>=1?h/c:h*Math.pow(2,1-f))*c>=2&&(a++,c/=2),a+f>=l?(s=0,a=l):a+f>=1?(s=(t*c-1)*Math.pow(2,o),a+=f):(s=t*Math.pow(2,f-1)*Math.pow(2,o),a=0));o>=8;e[n+p]=255&s,p+=d,s/=256,o-=8);for(a=a<0;e[n+p]=255&a,p+=d,a/=256,u-=8);e[n+p-d]|=128*g}},function(e,t){var n={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},function(e,t,n){"use strict";(function(t){var r=n(58); +var r=n(54),o=n(55),i=n(56);function a(){return c.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(e,t){if(a()=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|e}function d(e,t){if(c.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return F(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return H(e).length;default:if(r)return F(e).length;t=(""+t).toLowerCase(),r=!0}}function g(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return x(this,t,n);case"utf8":case"utf-8":return k(this,t,n);case"ascii":return T(this,t,n);case"latin1":case"binary":return P(this,t,n);case"base64":return _(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function y(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function v(e,t,n,r,o){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof t&&(t=c.from(t,r)),c.isBuffer(t))return 0===t.length?-1:b(e,t,n,r,o);if("number"==typeof t)return t&=255,c.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,r,o);throw new TypeError("val must be string, number or Buffer")}function b(e,t,n,r,o){var i,a=1,s=e.length,c=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;a=2,s/=2,c/=2,n/=2}function u(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(o){var l=-1;for(i=n;is&&(n=s-c),i=n;i>=0;i--){for(var f=!0,h=0;ho&&(r=o):r=o;var i=t.length;if(i%2!=0)throw new TypeError("Invalid hex string");r>i/2&&(r=i/2);for(var a=0;a>8,o=n%256,i.push(o),i.push(r);return i}(t,e.length-n),e,n,r)}function _(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function k(e,t,n){n=Math.min(e.length,n);for(var r=[],o=t;o239?4:u>223?3:u>191?2:1;if(o+f<=n)switch(f){case 1:u<128&&(l=u);break;case 2:128==(192&(i=e[o+1]))&&(c=(31&u)<<6|63&i)>127&&(l=c);break;case 3:i=e[o+1],a=e[o+2],128==(192&i)&&128==(192&a)&&(c=(15&u)<<12|(63&i)<<6|63&a)>2047&&(c<55296||c>57343)&&(l=c);break;case 4:i=e[o+1],a=e[o+2],s=e[o+3],128==(192&i)&&128==(192&a)&&128==(192&s)&&(c=(15&u)<<18|(63&i)<<12|(63&a)<<6|63&s)>65535&&c<1114112&&(l=c)}null===l?(l=65533,f=1):l>65535&&(l-=65536,r.push(l>>>10&1023|55296),l=56320|1023&l),r.push(l),o+=f}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var n="",r=0;for(;r0&&(e=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(e+=" ... ")),""},c.prototype.compare=function(e,t,n,r,o){if(!c.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&t>=n)return 0;if(r>=o)return-1;if(t>=n)return 1;if(this===e)return 0;for(var i=(o>>>=0)-(r>>>=0),a=(n>>>=0)-(t>>>=0),s=Math.min(i,a),u=this.slice(r,o),l=e.slice(t,n),f=0;fo)&&(n=o),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var i=!1;;)switch(r){case"hex":return m(this,e,t,n);case"utf8":case"utf-8":return w(this,e,t,n);case"ascii":return E(this,e,t,n);case"latin1":case"binary":return S(this,e,t,n);case"base64":return C(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,e,t,n);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),i=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function T(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;or)&&(n=r);for(var o="",i=t;in)throw new RangeError("Trying to access beyond buffer length")}function L(e,t,n,r,o,i){if(!c.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||te.length)throw new RangeError("Index out of range")}function D(e,t,n,r){t<0&&(t=65535+t+1);for(var o=0,i=Math.min(e.length-n,2);o>>8*(r?o:1-o)}function M(e,t,n,r){t<0&&(t=4294967295+t+1);for(var o=0,i=Math.min(e.length-n,4);o>>8*(r?o:3-o)&255}function j(e,t,n,r,o,i){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function A(e,t,n,r,i){return i||j(e,0,n,4),o.write(e,t,n,r,23,4),n+4}function B(e,t,n,r,i){return i||j(e,0,n,8),o.write(e,t,n,r,52,8),n+8}c.prototype.slice=function(e,t){var n,r=this.length;if((e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t0&&(o*=256);)r+=this[e+--t]*o;return r},c.prototype.readUInt8=function(e,t){return t||R(e,1,this.length),this[e]},c.prototype.readUInt16LE=function(e,t){return t||R(e,2,this.length),this[e]|this[e+1]<<8},c.prototype.readUInt16BE=function(e,t){return t||R(e,2,this.length),this[e]<<8|this[e+1]},c.prototype.readUInt32LE=function(e,t){return t||R(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},c.prototype.readUInt32BE=function(e,t){return t||R(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},c.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=this[e],o=1,i=0;++i=(o*=128)&&(r-=Math.pow(2,8*t)),r},c.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=t,o=1,i=this[e+--r];r>0&&(o*=256);)i+=this[e+--r]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*t)),i},c.prototype.readInt8=function(e,t){return t||R(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},c.prototype.readInt16LE=function(e,t){t||R(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt16BE=function(e,t){t||R(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt32LE=function(e,t){return t||R(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},c.prototype.readInt32BE=function(e,t){return t||R(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},c.prototype.readFloatLE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!0,23,4)},c.prototype.readFloatBE=function(e,t){return t||R(e,4,this.length),o.read(this,e,!1,23,4)},c.prototype.readDoubleLE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!0,52,8)},c.prototype.readDoubleBE=function(e,t){return t||R(e,8,this.length),o.read(this,e,!1,52,8)},c.prototype.writeUIntLE=function(e,t,n,r){(e=+e,t|=0,n|=0,r)||L(this,e,t,n,Math.pow(2,8*n)-1,0);var o=1,i=0;for(this[t]=255&e;++i=0&&(i*=256);)this[t+o]=e/i&255;return t+n},c.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,255,0),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},c.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},c.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},c.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):M(this,e,t,!0),t+4},c.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):M(this,e,t,!1),t+4},c.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=0,a=1,s=0;for(this[t]=255&e;++i>0)-s&255;return t+n},c.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);L(this,e,t,n,o-1,-o)}var i=n-1,a=1,s=0;for(this[t+i]=255&e;--i>=0&&(a*=256);)e<0&&0===s&&0!==this[t+i+1]&&(s=1),this[t+i]=(e/a>>0)-s&255;return t+n},c.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,127,-128),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},c.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},c.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},c.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):M(this,e,t,!0),t+4},c.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):M(this,e,t,!1),t+4},c.prototype.writeFloatLE=function(e,t,n){return A(this,e,t,!0,n)},c.prototype.writeFloatBE=function(e,t,n){return A(this,e,t,!1,n)},c.prototype.writeDoubleLE=function(e,t,n){return B(this,e,t,!0,n)},c.prototype.writeDoubleBE=function(e,t,n){return B(this,e,t,!1,n)},c.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t=0;--o)e[o+t]=this[o+n];else if(i<1e3||!c.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(i=t;i55295&&n<57344){if(!o){if(n>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===r){(t-=3)>-1&&i.push(239,191,189);continue}o=n;continue}if(n<56320){(t-=3)>-1&&i.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(t-=3)>-1&&i.push(239,191,189);if(o=null,n<128){if((t-=1)<0)break;i.push(n)}else if(n<2048){if((t-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function H(e){return r.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(N,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function q(e,t,n,r){for(var o=0;o=t.length||o>=e.length);++o)t[o+n]=e[o];return o}}).call(this,n(8))},function(e,t,n){"use strict";var r=n(14).Buffer,o=n(57),i=n(20),a=n(70),s=n(73),c=n(74);e.exports=function(e){var t=[],n=[];return{encode:c(t,(e=e||{forceFloat64:!1,compatibilityMode:!1,disableTimestampEncoding:!1}).forceFloat64,e.compatibilityMode,e.disableTimestampEncoding),decode:s(n),register:function(e,t,n,a){return o(t,"must have a constructor"),o(n,"must have an encode function"),o(e>=0,"must have a non-negative type"),o(a,"must have a decode function"),this.registerEncoder((function(e){return e instanceof t}),(function(t){var o=i(),a=r.allocUnsafe(1);return a.writeInt8(e,0),o.append(a),o.append(n(t)),o})),this.registerDecoder(e,a),this},registerEncoder:function(e,n){return o(e,"must have an encode function"),o(n,"must have an encode function"),t.push({check:e,encode:n}),this},registerDecoder:function(e,t){return o(e>=0,"must have a non-negative type"),o(t,"must have a decode function"),n.push({type:e,decode:t}),this},encoder:a.encoder,decoder:a.decoder,buffer:!0,type:"msgpack5",IncompleteBufferError:s.IncompleteBufferError}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=p("_blazorLogicalChildren"),o=p("_blazorLogicalParent"),i=p("_blazorLogicalEnd");function a(e,t){if(e.childNodes.length>0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return r in e||(e[r]=[]),e}function s(e,t,n){var i=e;if(e instanceof Comment&&(u(i)&&u(i).length>0))throw new Error("Not implemented: inserting non-empty logical container");if(c(i))throw new Error("Not implemented: moving existing logical children");var a=u(t);if(n0;)e(r,0)}var i=r;i.parentNode.removeChild(i)},t.getLogicalParent=c,t.getLogicalSiblingEnd=function(e){return e[i]||null},t.getLogicalChild=function(e,t){return u(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===l(e).namespaceURI},t.getLogicalChildrenArray=u,t.permuteLogicalChildren=function(e,t){var n=u(e);t.forEach((function(e){e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=function e(t){if(t instanceof Element)return t;var n=f(t);if(n)return n.previousSibling;var r=c(t);return r instanceof Element?r.lastChild:e(r)}(e.moveRangeStart)})),t.forEach((function(t){var r=t.moveToBeforeMarker=document.createComment("marker"),o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):h(r,e)})),t.forEach((function(e){for(var t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd,i=r;i;){var a=i.nextSibling;if(n.insertBefore(i,t),i===o)break;i=a}n.removeChild(t)})),t.forEach((function(e){n[e.toSiblingIndex]=e.moveRangeStart}))},t.getClosestDomElement=l},function(e,t){var n,r,o=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:i}catch(e){n=i}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var c,u=[],l=!1,f=-1;function h(){l&&c&&(l=!1,c.length?u=c.concat(u):f=-1,u.length&&p())}function p(){if(!l){var e=s(h);l=!0;for(var t=u.length;t;){for(c=u,u=[];++f1)for(var n=1;nthis.length)&&(r=this.length),n>=this.length)return e||i.alloc(0);if(r<=0)return e||i.alloc(0);var o,a,s=!!e,c=this._offset(n),u=r-n,l=u,f=s&&t||0,h=c[1];if(0===n&&r==this.length){if(!s)return 1===this._bufs.length?this._bufs[0]:i.concat(this._bufs,this.length);for(a=0;a(o=this._bufs[a].length-h))){this._bufs[a].copy(e,f,h,h+l);break}this._bufs[a].copy(e,f,h),f+=o,l-=o,h&&(h=0)}return e},a.prototype.shallowSlice=function(e,t){e=e||0,t=t||this.length,e<0&&(e+=this.length),t<0&&(t+=this.length);var n=this._offset(e),r=this._offset(t),o=this._bufs.slice(n[0],r[0]+1);return 0==r[1]?o.pop():o[o.length-1]=o[o.length-1].slice(0,r[1]),0!=n[1]&&(o[0]=o[0].slice(n[1])),new a(o)},a.prototype.toString=function(e,t,n){return this.slice(t,n).toString(e)},a.prototype.consume=function(e){for(;this._bufs.length;){if(!(e>=this._bufs[0].length)){this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift()}return this},a.prototype.duplicate=function(){for(var e=0,t=new a;e0&&e.invokeMethodAsync("OnSpacerAfterVisible",r.boundingClientRect.bottom-r.intersectionRect.bottom,i)}}))}),{root:o(t),rootMargin:i+"px"});a.observe(t),a.observe(n);var s=u(t),c=u(n);function u(e){var t=new MutationObserver((function(){a.unobserve(e),a.observe(e)}));return t.observe(e,{attributes:!0}),t}r[e._id]={intersectionObserver:a,mutationObserverBefore:s,mutationObserverAfter:c}},dispose:function(e){var t=r[e._id];t&&(t.intersectionObserver.disconnect(),t.mutationObserverBefore.disconnect(),t.mutationObserverAfter.disconnect(),e.dispose(),delete r[e._id])}};var r={};function o(e){return e?"visible"!==getComputedStyle(e).overflowY?e:o(e.parentElement):null}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>>0)}t.readInt32LE=function(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24},t.readUint32LE=i,t.readUint64LE=function(e,t){var n=i(e,t+4);if(n>o)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*r+i(e,t)},t.readLEB128=function(e,t){for(var n=0,r=0,o=0;o<4;o++){var i=e[t+o];if(n|=(127&i)<65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u)}r.length>1024&&(o.push(String.fromCharCode.apply(null,r)),r.length=0)}return o.push(String.fromCharCode.apply(null,r)),o.join("")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shouldAutoStart=function(){return!(!document||!document.currentScript||"false"===document.currentScript.getAttribute("autostart"))}},function(e,t,n){(function(e){var r=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),n={},r=0;r=i)return e;switch(e){case"%s":return String(r[n++]);case"%d":return Number(r[n++]);case"%j":try{return JSON.stringify(r[n++])}catch(e){return"[Circular]"}default:return e}})),c=r[n];n=3&&(r.depth=arguments[2]),arguments.length>=4&&(r.colors=arguments[3]),d(n)?r.showHidden=n:n&&t._extend(r,n),b(r.showHidden)&&(r.showHidden=!1),b(r.depth)&&(r.depth=2),b(r.colors)&&(r.colors=!1),b(r.customInspect)&&(r.customInspect=!0),r.colors&&(r.stylize=c),l(r,e,r.depth)}function c(e,t){var n=s.styles[t];return n?"["+s.colors[n][0]+"m"+e+"["+s.colors[n][1]+"m":e}function u(e,t){return e}function l(e,n,r){if(e.customInspect&&n&&C(n.inspect)&&n.inspect!==t.inspect&&(!n.constructor||n.constructor.prototype!==n)){var o=n.inspect(r,e);return v(o)||(o=l(e,o,r)),o}var i=function(e,t){if(b(t))return e.stylize("undefined","undefined");if(v(t)){var n="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(n,"string")}if(y(t))return e.stylize(""+t,"number");if(d(t))return e.stylize(""+t,"boolean");if(g(t))return e.stylize("null","null")}(e,n);if(i)return i;var a=Object.keys(n),s=function(e){var t={};return e.forEach((function(e,n){t[e]=!0})),t}(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(n)),S(n)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return f(n);if(0===a.length){if(C(n)){var c=n.name?": "+n.name:"";return e.stylize("[Function"+c+"]","special")}if(m(n))return e.stylize(RegExp.prototype.toString.call(n),"regexp");if(E(n))return e.stylize(Date.prototype.toString.call(n),"date");if(S(n))return f(n)}var u,w="",I=!1,_=["{","}"];(p(n)&&(I=!0,_=["[","]"]),C(n))&&(w=" [Function"+(n.name?": "+n.name:"")+"]");return m(n)&&(w=" "+RegExp.prototype.toString.call(n)),E(n)&&(w=" "+Date.prototype.toUTCString.call(n)),S(n)&&(w=" "+f(n)),0!==a.length||I&&0!=n.length?r<0?m(n)?e.stylize(RegExp.prototype.toString.call(n),"regexp"):e.stylize("[Object]","special"):(e.seen.push(n),u=I?function(e,t,n,r,o){for(var i=[],a=0,s=t.length;a=0&&0,e+t.replace(/\u001b\[\d\d?m/g,"").length+1}),0)>60)return n[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+n[1];return n[0]+t+" "+e.join(", ")+" "+n[1]}(u,w,_)):_[0]+w+_[1]}function f(e){return"["+Error.prototype.toString.call(e)+"]"}function h(e,t,n,r,o,i){var a,s,c;if((c=Object.getOwnPropertyDescriptor(t,o)||{value:t[o]}).get?s=c.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):c.set&&(s=e.stylize("[Setter]","special")),P(r,o)||(a="["+o+"]"),s||(e.seen.indexOf(c.value)<0?(s=g(n)?l(e,c.value,null):l(e,c.value,n-1)).indexOf("\n")>-1&&(s=i?s.split("\n").map((function(e){return" "+e})).join("\n").substr(2):"\n"+s.split("\n").map((function(e){return" "+e})).join("\n")):s=e.stylize("[Circular]","special")),b(a)){if(i&&o.match(/^\d+$/))return s;(a=JSON.stringify(""+o)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+s}function p(e){return Array.isArray(e)}function d(e){return"boolean"==typeof e}function g(e){return null===e}function y(e){return"number"==typeof e}function v(e){return"string"==typeof e}function b(e){return void 0===e}function m(e){return w(e)&&"[object RegExp]"===I(e)}function w(e){return"object"==typeof e&&null!==e}function E(e){return w(e)&&"[object Date]"===I(e)}function S(e){return w(e)&&("[object Error]"===I(e)||e instanceof Error)}function C(e){return"function"==typeof e}function I(e){return Object.prototype.toString.call(e)}function _(e){return e<10?"0"+e.toString(10):e.toString(10)}t.debuglog=function(n){if(b(i)&&(i=e.env.NODE_DEBUG||""),n=n.toUpperCase(),!a[n])if(new RegExp("\\b"+n+"\\b","i").test(i)){var r=e.pid;a[n]=function(){var e=t.format.apply(t,arguments);console.error("%s %d: %s",n,r,e)}}else a[n]=function(){};return a[n]},t.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.isArray=p,t.isBoolean=d,t.isNull=g,t.isNullOrUndefined=function(e){return null==e},t.isNumber=y,t.isString=v,t.isSymbol=function(e){return"symbol"==typeof e},t.isUndefined=b,t.isRegExp=m,t.isObject=w,t.isDate=E,t.isError=S,t.isFunction=C,t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},t.isBuffer=n(59);var k=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function T(){var e=new Date,t=[_(e.getHours()),_(e.getMinutes()),_(e.getSeconds())].join(":");return[e.getDate(),k[e.getMonth()],t].join(" ")}function P(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){console.log("%s - %s",T(),t.format.apply(t,arguments))},t.inherits=n(60),t._extend=function(e,t){if(!t||!w(t))return e;for(var n=Object.keys(t),r=n.length;r--;)e[n[r]]=t[n[r]];return e};var x="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function O(e,t){if(!e){var n=new Error("Promise was rejected with a falsy value");n.reason=e,e=n}return t(e)}t.promisify=function(e){if("function"!=typeof e)throw new TypeError('The "original" argument must be of type Function');if(x&&e[x]){var t;if("function"!=typeof(t=e[x]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(t,x,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var t,n,r=new Promise((function(e,r){t=e,n=r})),o=[],i=0;i0?("string"==typeof t||a.objectMode||Object.getPrototypeOf(t)===u.prototype||(t=function(e){return u.from(e)}(t)),r?a.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):E(e,a,t,!0):a.ended?e.emit("error",new Error("stream.push() after EOF")):(a.reading=!1,a.decoder&&!n?(t=a.decoder.write(t),a.objectMode||0!==t.length?E(e,a,t,!1):_(e,a)):E(e,a,t,!1))):r||(a.reading=!1));return function(e){return!e.ended&&(e.needReadable||e.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=8388608?e=8388608:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function C(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(p("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?o.nextTick(I,e):I(e))}function I(e){p("emit readable"),e.emit("readable"),x(e)}function _(e,t){t.readingMore||(t.readingMore=!0,o.nextTick(k,e,t))}function k(e,t){for(var n=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(n=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):n=function(e,t,n){var r;ei.length?i.length:e;if(a===i.length?o+=i:o+=i.slice(0,e),0===(e-=a)){a===i.length?(++r,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=i.slice(a));break}++r}return t.length-=r,o}(e,t):function(e,t){var n=u.allocUnsafe(e),r=t.head,o=1;r.data.copy(n),e-=r.data.length;for(;r=r.next;){var i=r.data,a=e>i.length?i.length:e;if(i.copy(n,n.length-e,0,a),0===(e-=a)){a===i.length?(++o,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=i.slice(a));break}++o}return t.length-=o,n}(e,t);return r}(e,t.buffer,t.decoder),n);var n}function R(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,o.nextTick(L,t,e))}function L(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function D(e,t){for(var n=0,r=e.length;n=t.highWaterMark||t.ended))return p("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?R(this):C(this),null;if(0===(e=S(e,t))&&t.ended)return 0===t.length&&R(this),null;var r,o=t.needReadable;return p("need readable",o),(0===t.length||t.length-e0?O(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),n!==e&&t.ended&&R(this)),null!==r&&this.emit("data",r),r},m.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},m.prototype.pipe=function(e,t){var n=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=e;break;case 1:i.pipes=[i.pipes,e];break;default:i.pipes.push(e)}i.pipesCount+=1,p("pipe count=%d opts=%j",i.pipesCount,t);var c=(!t||!1!==t.end)&&e!==r.stdout&&e!==r.stderr?l:m;function u(t,r){p("onunpipe"),t===n&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,p("cleanup"),e.removeListener("close",v),e.removeListener("finish",b),e.removeListener("drain",f),e.removeListener("error",y),e.removeListener("unpipe",u),n.removeListener("end",l),n.removeListener("end",m),n.removeListener("data",g),h=!0,!i.awaitDrain||e._writableState&&!e._writableState.needDrain||f())}function l(){p("onend"),e.end()}i.endEmitted?o.nextTick(c):n.once("end",c),e.on("unpipe",u);var f=function(e){return function(){var t=e._readableState;p("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,"data")&&(t.flowing=!0,x(e))}}(n);e.on("drain",f);var h=!1;var d=!1;function g(t){p("ondata"),d=!1,!1!==e.write(t)||d||((1===i.pipesCount&&i.pipes===e||i.pipesCount>1&&-1!==D(i.pipes,e))&&!h&&(p("false write response, pause",n._readableState.awaitDrain),n._readableState.awaitDrain++,d=!0),n.pause())}function y(t){p("onerror",t),m(),e.removeListener("error",y),0===s(e,"error")&&e.emit("error",t)}function v(){e.removeListener("finish",b),m()}function b(){p("onfinish"),e.removeListener("close",v),m()}function m(){p("unpipe"),n.unpipe(e)}return n.on("data",g),function(e,t,n){if("function"==typeof e.prependListener)return e.prependListener(t,n);e._events&&e._events[t]?a(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]:e.on(t,n)}(e,"error",y),e.once("close",v),e.once("finish",b),e.emit("pipe",n),i.flowing||(p("pipe resume"),n.resume()),e},m.prototype.unpipe=function(e){var t=this._readableState,n={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,n)),this;if(!e){var r=t.pipes,o=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var i=0;i0&&a.length>o&&!a.warned){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,s=c,console&&console.warn&&console.warn(s)}return e}function h(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},o=h.bind(r);return o.listener=n,r.wrapFn=o,o}function d(e,t,n){var r=e._events;if(void 0===r)return[];var o=r[t];return void 0===o?[]:"function"==typeof o?n?[o.listener||o]:[o]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(a=t[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var c=o[e];if(void 0===c)return!1;if("function"==typeof c)i(c,this,t);else{var u=c.length,l=y(c,u);for(n=0;n=0;i--)if(n[i]===t||n[i].listener===t){a=n[i].listener,o=i;break}if(o<0)return this;0===o?n.shift():function(e,t){for(;t+1=0;r--)this.removeListener(e,t[r]);return this},s.prototype.listeners=function(e){return d(this,e,!0)},s.prototype.rawListeners=function(e){return d(this,e,!1)},s.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):g.call(e,t)},s.prototype.listenerCount=g,s.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]}},function(e,t,n){e.exports=n(38).EventEmitter},function(e,t,n){"use strict";var r=n(21);function o(e,t){e.emit("error",t)}e.exports={destroy:function(e,t){var n=this,i=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return i||a?(t?t(e):!e||this._writableState&&this._writableState.errorEmitted||r.nextTick(o,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!t&&e?(r.nextTick(o,n,e),n._writableState&&(n._writableState.errorEmitted=!0)):t&&t(e)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},function(e,t,n){"use strict";var r=n(66).Buffer,o=r.isEncoding||function(e){switch((e=""+e)&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function i(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}(e);if("string"!=typeof t&&(r.isEncoding===o||!o(e)))throw new Error("Unknown encoding: "+e);return t||e}(e),this.encoding){case"utf16le":this.text=c,this.end=u,t=4;break;case"utf8":this.fillLast=s,t=4;break;case"base64":this.text=l,this.end=f,t=3;break;default:return this.write=h,void(this.end=p)}this.lastNeed=0,this.lastTotal=0,this.lastChar=r.allocUnsafe(t)}function a(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function s(e){var t=this.lastTotal-this.lastNeed,n=function(e,t,n){if(128!=(192&t[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�"}}(this,e);return void 0!==n?n:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function c(e,t){if((e.length-t)%2==0){var n=e.toString("utf16le",t);if(n){var r=n.charCodeAt(n.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function u(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,n)}return t}function l(e,t){var n=(e.length-t)%3;return 0===n?e.toString("base64",t):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-n))}function f(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function h(e){return e.toString(this.encoding)}function p(e){return e&&e.length?this.write(e):""}t.StringDecoder=i,i.prototype.write=function(e){if(0===e.length)return"";var t,n;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";n=this.lastNeed,this.lastNeed=0}else n=0;return n=0)return o>0&&(e.lastNeed=o-1),o;if(--r=0)return o>0&&(e.lastNeed=o-2),o;if(--r=0)return o>0&&(2===o?o=0:e.lastNeed=o-3),o;return 0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=n;var r=e.length-(n-this.lastNeed);return e.copy(this.lastChar,0,r),e.toString("utf8",t,r)},i.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},function(e,t,n){"use strict";(function(t,r,o){var i=n(21);function a(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,n){var r=e.entry;e.entry=null;for(;r;){var o=r.callback;t.pendingcb--,o(n),r=r.next}t.corkedRequestsFree?t.corkedRequestsFree.next=e:t.corkedRequestsFree=e}(t,e)}}e.exports=b;var s,c=!t.browser&&["v0.10","v0.9."].indexOf(t.version.slice(0,5))>-1?r:i.nextTick;b.WritableState=v;var u=n(19);u.inherits=n(15);var l={deprecate:n(69)},f=n(39),h=n(14).Buffer,p=o.Uint8Array||function(){};var d,g=n(40);function y(){}function v(e,t){s=s||n(9),e=e||{};var r=t instanceof s;this.objectMode=!!e.objectMode,r&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var o=e.highWaterMark,u=e.writableHighWaterMark,l=this.objectMode?16:16384;this.highWaterMark=o||0===o?o:r&&(u||0===u)?u:l,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var f=!1===e.decodeStrings;this.decodeStrings=!f,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var n=e._writableState,r=n.sync,o=n.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(n),t)!function(e,t,n,r,o){--t.pendingcb,n?(i.nextTick(o,r),i.nextTick(I,e,t),e._writableState.errorEmitted=!0,e.emit("error",r)):(o(r),e._writableState.errorEmitted=!0,e.emit("error",r),I(e,t))}(e,n,r,t,o);else{var a=S(n);a||n.corked||n.bufferProcessing||!n.bufferedRequest||E(e,n),r?c(w,e,n,a,o):w(e,n,a,o)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}function b(e){if(s=s||n(9),!(d.call(b,this)||this instanceof s))return new b(e);this._writableState=new v(e,this),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final)),f.call(this)}function m(e,t,n,r,o,i,a){t.writelen=r,t.writecb=a,t.writing=!0,t.sync=!0,n?e._writev(o,t.onwrite):e._write(o,i,t.onwrite),t.sync=!1}function w(e,t,n,r){n||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}(e,t),t.pendingcb--,r(),I(e,t)}function E(e,t){t.bufferProcessing=!0;var n=t.bufferedRequest;if(e._writev&&n&&n.next){var r=t.bufferedRequestCount,o=new Array(r),i=t.corkedRequestsFree;i.entry=n;for(var s=0,c=!0;n;)o[s]=n,n.isBuf||(c=!1),n=n.next,s+=1;o.allBuffers=c,m(e,t,!0,t.length,o,"",i.finish),t.pendingcb++,t.lastBufferedRequest=null,i.next?(t.corkedRequestsFree=i.next,i.next=null):t.corkedRequestsFree=new a(t),t.bufferedRequestCount=0}else{for(;n;){var u=n.chunk,l=n.encoding,f=n.callback;if(m(e,t,!1,t.objectMode?1:u.length,u,l,f),n=n.next,t.bufferedRequestCount--,t.writing)break}null===n&&(t.lastBufferedRequest=null)}t.bufferedRequest=n,t.bufferProcessing=!1}function S(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function C(e,t){e._final((function(n){t.pendingcb--,n&&e.emit("error",n),t.prefinished=!0,e.emit("prefinish"),I(e,t)}))}function I(e,t){var n=S(t);return n&&(!function(e,t){t.prefinished||t.finalCalled||("function"==typeof e._final?(t.pendingcb++,t.finalCalled=!0,i.nextTick(C,e,t)):(t.prefinished=!0,e.emit("prefinish")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit("finish"))),n}u.inherits(b,f),v.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(v.prototype,"buffer",{get:l.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(d=Function.prototype[Symbol.hasInstance],Object.defineProperty(b,Symbol.hasInstance,{value:function(e){return!!d.call(this,e)||this===b&&(e&&e._writableState instanceof v)}})):d=function(e){return e instanceof this},b.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},b.prototype.write=function(e,t,n){var r,o=this._writableState,a=!1,s=!o.objectMode&&(r=e,h.isBuffer(r)||r instanceof p);return s&&!h.isBuffer(e)&&(e=function(e){return h.from(e)}(e)),"function"==typeof t&&(n=t,t=null),s?t="buffer":t||(t=o.defaultEncoding),"function"!=typeof n&&(n=y),o.ended?function(e,t){var n=new Error("write after end");e.emit("error",n),i.nextTick(t,n)}(this,n):(s||function(e,t,n,r){var o=!0,a=!1;return null===n?a=new TypeError("May not write null values to stream"):"string"==typeof n||void 0===n||t.objectMode||(a=new TypeError("Invalid non-string/buffer chunk")),a&&(e.emit("error",a),i.nextTick(r,a),o=!1),o}(this,o,e,n))&&(o.pendingcb++,a=function(e,t,n,r,o,i){if(!n){var a=function(e,t,n){e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=h.from(t,n));return t}(t,r,o);r!==a&&(n=!0,o="buffer",r=a)}var s=t.objectMode?1:r.length;t.length+=s;var c=t.length-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(b.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),b.prototype._write=function(e,t,n){n(new Error("_write() is not implemented"))},b.prototype._writev=null,b.prototype.end=function(e,t,n){var r=this._writableState;"function"==typeof e?(n=e,e=null,t=null):"function"==typeof t&&(n=t,t=null),null!=e&&this.write(e,t),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||function(e,t,n){t.ending=!0,I(e,t),n&&(t.finished?i.nextTick(n):e.once("finish",n));t.ended=!0,e.writable=!1}(this,r,n)},Object.defineProperty(b.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),b.prototype.destroy=g.destroy,b.prototype._undestroy=g.undestroy,b.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,n(13),n(67).setImmediate,n(8))},function(e,t,n){"use strict";e.exports=a;var r=n(9),o=n(19);function i(e,t){var n=this._transformState;n.transforming=!1;var r=n.writecb;if(!r)return this.emit("error",new Error("write callback called multiple times"));n.writechunk=null,n.writecb=null,null!=t&&this.push(t),r(e);var o=this._readableState;o.reading=!1,(o.needReadable||o.lengths?a.slice(s).buffer:null}else{var c,u=t;if(-1===(c=u.indexOf(r.a.RecordSeparator)))throw new Error("Message is incomplete.");s=c+1;n=u.substring(0,s),i=u.length>s?u.substring(s):null}var l=r.a.parse(n),f=JSON.parse(l[0]);if(f.type)throw new Error("Expected a handshake response from the server.");return[i,f]},t}()}).call(this,n(10).Buffer)},,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a},a=this&&this.__spread||function(){for(var e=[],t=0;t0?a-4:a;for(n=0;n>16&255,c[l++]=t>>8&255,c[l++]=255&t;2===s&&(t=o[e.charCodeAt(n)]<<2|o[e.charCodeAt(n+1)]>>4,c[l++]=255&t);1===s&&(t=o[e.charCodeAt(n)]<<10|o[e.charCodeAt(n+1)]<<4|o[e.charCodeAt(n+2)]>>2,c[l++]=t>>8&255,c[l++]=255&t);return c},t.fromByteArray=function(e){for(var t,n=e.length,o=n%3,i=[],a=0,s=n-o;as?s:a+16383));1===o?(t=e[n-1],i.push(r[t>>2]+r[t<<4&63]+"==")):2===o&&(t=(e[n-2]<<8)+e[n-1],i.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"="));return i.join("")};for(var r=[],o=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,c=a.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function l(e,t,n){for(var o,i,a=[],s=t;s>18&63]+r[i>>12&63]+r[i>>6&63]+r[63&i]);return a.join("")}o["-".charCodeAt(0)]=62,o["_".charCodeAt(0)]=63},function(e,t){t.read=function(e,t,n,r,o){var i,a,s=8*o-r-1,c=(1<>1,l=-7,f=n?o-1:0,h=n?-1:1,p=e[t+f];for(f+=h,i=p&(1<<-l)-1,p>>=-l,l+=s;l>0;i=256*i+e[t+f],f+=h,l-=8);for(a=i&(1<<-l)-1,i>>=-l,l+=r;l>0;a=256*a+e[t+f],f+=h,l-=8);if(0===i)i=1-u;else{if(i===c)return a?NaN:1/0*(p?-1:1);a+=Math.pow(2,r),i-=u}return(p?-1:1)*a*Math.pow(2,i-r)},t.write=function(e,t,n,r,o,i){var a,s,c,u=8*i-o-1,l=(1<>1,h=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=r?0:i-1,d=r?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=l):(a=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-a))<1&&(a--,c*=2),(t+=a+f>=1?h/c:h*Math.pow(2,1-f))*c>=2&&(a++,c/=2),a+f>=l?(s=0,a=l):a+f>=1?(s=(t*c-1)*Math.pow(2,o),a+=f):(s=t*Math.pow(2,f-1)*Math.pow(2,o),a=0));o>=8;e[n+p]=255&s,p+=d,s/=256,o-=8);for(a=a<0;e[n+p]=255&a,p+=d,a/=256,u-=8);e[n+p-d]|=128*g}},function(e,t){var n={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},function(e,t,n){"use strict";(function(t){var r=n(58); /*! * The buffer module from node.js, for the browser. * * @author Feross Aboukhadijeh * @license MIT - */function o(e,t){if(e===t)return 0;for(var n=e.length,r=t.length,o=0,i=Math.min(n,r);o=0;u--)if(l[u]!==f[u])return!1;for(u=l.length-1;u>=0;u--)if(s=l[u],!m(e[s],t[s],n,r))return!1;return!0}(e,t,n,r))}return n?e===t:e==t}function w(e){return"[object Arguments]"==Object.prototype.toString.call(e)}function E(e,t){if(!e||!t)return!1;if("[object RegExp]"==Object.prototype.toString.call(t))return t.test(e);try{if(e instanceof t)return!0}catch(e){}return!Error.isPrototypeOf(t)&&!0===t.call({},e)}function S(e,t,n,r){var o;if("function"!=typeof t)throw new TypeError('"block" argument must be a function');"string"==typeof n&&(r=n,n=null),o=function(e){var t;try{e()}catch(e){t=e}return t}(t),r=(n&&n.name?" ("+n.name+").":".")+(r?" "+r:"."),e&&!o&&v(o,n,"Missing expected exception"+r);var i="string"==typeof r,s=!e&&o&&!n;if((!e&&a.isError(o)&&i&&E(o,n)||s)&&v(o,n,"Got unwanted exception"+r),e&&o&&n&&!E(o,n)||!e&&o)throw o}h.AssertionError=function(e){this.name="AssertionError",this.actual=e.actual,this.expected=e.expected,this.operator=e.operator,e.message?(this.message=e.message,this.generatedMessage=!1):(this.message=function(e){return g(y(e.actual),128)+" "+e.operator+" "+g(y(e.expected),128)}(this),this.generatedMessage=!0);var t=e.stackStartFunction||v;if(Error.captureStackTrace)Error.captureStackTrace(this,t);else{var n=new Error;if(n.stack){var r=n.stack,o=d(t),i=r.indexOf("\n"+o);if(i>=0){var a=r.indexOf("\n",i+1);r=r.substring(a+1)}this.stack=r}}},a.inherits(h.AssertionError,Error),h.fail=v,h.ok=b,h.equal=function(e,t,n){e!=t&&v(e,t,n,"==",h.equal)},h.notEqual=function(e,t,n){e==t&&v(e,t,n,"!=",h.notEqual)},h.deepEqual=function(e,t,n){m(e,t,!1)||v(e,t,n,"deepEqual",h.deepEqual)},h.deepStrictEqual=function(e,t,n){m(e,t,!0)||v(e,t,n,"deepStrictEqual",h.deepStrictEqual)},h.notDeepEqual=function(e,t,n){m(e,t,!1)&&v(e,t,n,"notDeepEqual",h.notDeepEqual)},h.notDeepStrictEqual=function e(t,n,r){m(t,n,!0)&&v(t,n,r,"notDeepStrictEqual",e)},h.strictEqual=function(e,t,n){e!==t&&v(e,t,n,"===",h.strictEqual)},h.notStrictEqual=function(e,t,n){e===t&&v(e,t,n,"!==",h.notStrictEqual)},h.throws=function(e,t,n){S(!0,e,t,n)},h.doesNotThrow=function(e,t,n){S(!1,e,t,n)},h.ifError=function(e){if(e)throw e},h.strict=r((function e(t,n){t||v(t,!0,n,"==",e)}),h,{equal:h.strictEqual,deepEqual:h.deepStrictEqual,notEqual:h.notStrictEqual,notDeepEqual:h.notDeepStrictEqual}),h.strict.strict=h.strict;var C=Object.keys||function(e){var t=[];for(var n in e)s.call(e,n)&&t.push(n);return t}}).call(this,n(9))},function(e,t,n){"use strict"; + */function o(e,t){if(e===t)return 0;for(var n=e.length,r=t.length,o=0,i=Math.min(n,r);o=0;u--)if(l[u]!==f[u])return!1;for(u=l.length-1;u>=0;u--)if(s=l[u],!m(e[s],t[s],n,r))return!1;return!0}(e,t,n,r))}return n?e===t:e==t}function w(e){return"[object Arguments]"==Object.prototype.toString.call(e)}function E(e,t){if(!e||!t)return!1;if("[object RegExp]"==Object.prototype.toString.call(t))return t.test(e);try{if(e instanceof t)return!0}catch(e){}return!Error.isPrototypeOf(t)&&!0===t.call({},e)}function S(e,t,n,r){var o;if("function"!=typeof t)throw new TypeError('"block" argument must be a function');"string"==typeof n&&(r=n,n=null),o=function(e){var t;try{e()}catch(e){t=e}return t}(t),r=(n&&n.name?" ("+n.name+").":".")+(r?" "+r:"."),e&&!o&&v(o,n,"Missing expected exception"+r);var i="string"==typeof r,s=!e&&o&&!n;if((!e&&a.isError(o)&&i&&E(o,n)||s)&&v(o,n,"Got unwanted exception"+r),e&&o&&n&&!E(o,n)||!e&&o)throw o}h.AssertionError=function(e){this.name="AssertionError",this.actual=e.actual,this.expected=e.expected,this.operator=e.operator,e.message?(this.message=e.message,this.generatedMessage=!1):(this.message=function(e){return g(y(e.actual),128)+" "+e.operator+" "+g(y(e.expected),128)}(this),this.generatedMessage=!0);var t=e.stackStartFunction||v;if(Error.captureStackTrace)Error.captureStackTrace(this,t);else{var n=new Error;if(n.stack){var r=n.stack,o=d(t),i=r.indexOf("\n"+o);if(i>=0){var a=r.indexOf("\n",i+1);r=r.substring(a+1)}this.stack=r}}},a.inherits(h.AssertionError,Error),h.fail=v,h.ok=b,h.equal=function(e,t,n){e!=t&&v(e,t,n,"==",h.equal)},h.notEqual=function(e,t,n){e==t&&v(e,t,n,"!=",h.notEqual)},h.deepEqual=function(e,t,n){m(e,t,!1)||v(e,t,n,"deepEqual",h.deepEqual)},h.deepStrictEqual=function(e,t,n){m(e,t,!0)||v(e,t,n,"deepStrictEqual",h.deepStrictEqual)},h.notDeepEqual=function(e,t,n){m(e,t,!1)&&v(e,t,n,"notDeepEqual",h.notDeepEqual)},h.notDeepStrictEqual=function e(t,n,r){m(t,n,!0)&&v(t,n,r,"notDeepStrictEqual",e)},h.strictEqual=function(e,t,n){e!==t&&v(e,t,n,"===",h.strictEqual)},h.notStrictEqual=function(e,t,n){e===t&&v(e,t,n,"!==",h.notStrictEqual)},h.throws=function(e,t,n){S(!0,e,t,n)},h.doesNotThrow=function(e,t,n){S(!1,e,t,n)},h.ifError=function(e){if(e)throw e},h.strict=r((function e(t,n){t||v(t,!0,n,"==",e)}),h,{equal:h.strictEqual,deepEqual:h.deepStrictEqual,notEqual:h.notStrictEqual,notDeepEqual:h.notDeepStrictEqual}),h.strict.strict=h.strict;var C=Object.keys||function(e){var t=[];for(var n in e)s.call(e,n)&&t.push(n);return t}}).call(this,n(8))},function(e,t,n){"use strict"; /* object-assign (c) Sindre Sorhus @license MIT -*/var r=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;function a(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,s,c=a(e),u=1;u0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,n=""+t.data;t=t.next;)n+=e+t.data;return n},e.prototype.concat=function(e){if(0===this.length)return r.alloc(0);if(1===this.length)return this.head.data;for(var t,n,o,i=r.allocUnsafe(e>>>0),a=this.head,s=0;a;)t=a.data,n=i,o=s,t.copy(n,o),s+=a.data.length,a=a.next;return i},e}(),o&&o.inspect&&o.inspect.custom&&(e.exports.prototype[o.inspect.custom]=function(){var e=o.inspect({length:this.length});return this.constructor.name+" "+e})},function(e,t){},function(e,t,n){var r=n(11),o=r.Buffer;function i(e,t){for(var n in e)t[n]=e[n]}function a(e,t,n){return o(e,t,n)}o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?e.exports=r:(i(r,t),t.Buffer=a),a.prototype=Object.create(o.prototype),i(o,a),a.from=function(e,t,n){if("number"==typeof e)throw new TypeError("Argument must not be a number");return o(e,t,n)},a.alloc=function(e,t,n){if("number"!=typeof e)throw new TypeError("Argument must be a number");var r=o(e);return void 0!==t?"string"==typeof n?r.fill(t,n):r.fill(t):r.fill(0),r},a.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return o(e)},a.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r.SlowBuffer(e)}},function(e,t,n){(function(e){var r=void 0!==e&&e||"undefined"!=typeof self&&self||window,o=Function.prototype.apply;function i(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new i(o.call(setTimeout,r,arguments),clearTimeout)},t.setInterval=function(){return new i(o.call(setInterval,r,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(r,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n(68),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n(9))},function(e,t,n){(function(e,t){!function(e,n){"use strict";if(!e.setImmediate){var r,o,i,a,s,c=1,u={},l=!1,f=e.document,h=Object.getPrototypeOf&&Object.getPrototypeOf(e);h=h&&h.setTimeout?h:e,"[object process]"==={}.toString.call(e.process)?r=function(e){t.nextTick((function(){d(e)}))}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?e.MessageChannel?((i=new MessageChannel).port1.onmessage=function(e){d(e.data)},r=function(e){i.port2.postMessage(e)}):f&&"onreadystatechange"in f.createElement("script")?(o=f.documentElement,r=function(e){var t=f.createElement("script");t.onreadystatechange=function(){d(e),t.onreadystatechange=null,o.removeChild(t),t=null},o.appendChild(t)}):r=function(e){setTimeout(d,0,e)}:(a="setImmediate$"+Math.random()+"$",s=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(a)&&d(+t.data.slice(a.length))},e.addEventListener?e.addEventListener("message",s,!1):e.attachEvent("onmessage",s),r=function(t){e.postMessage(a+t,"*")}),h.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n0?this._transform(null,t,n):n()},e.exports.decoder=c,e.exports.encoder=s},function(e,t,n){(t=e.exports=n(37)).Stream=t,t.Readable=t,t.Writable=n(42),t.Duplex=n(10),t.Transform=n(43),t.PassThrough=n(72)},function(e,t,n){"use strict";e.exports=i;var r=n(43),o=n(20);function i(e){if(!(this instanceof i))return new i(e);r.call(this,e)}o.inherits=n(16),o.inherits(i,r),i.prototype._transform=function(e,t,n){n(null,e)}},function(e,t,n){var r=n(21);function o(e){Error.call(this),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.message=e||"unable to decode"}n(36).inherits(o,Error),e.exports=function(e){return function(e){e instanceof r||(e=r().append(e));var t=i(e);if(t)return e.consume(t.bytesConsumed),t.value;throw new o};function t(e,t,n){return t>=n+e}function n(e,t){return{value:e,bytesConsumed:t}}function i(e,r){r=void 0===r?0:r;var o=e.length-r;if(o<=0)return null;var i,l,f,h=e.readUInt8(r),p=0;if(!function(e,t){var n=function(e){switch(e){case 196:return 2;case 197:return 3;case 198:return 5;case 199:return 3;case 200:return 4;case 201:return 6;case 202:return 5;case 203:return 9;case 204:return 2;case 205:return 3;case 206:return 5;case 207:return 9;case 208:return 2;case 209:return 3;case 210:return 5;case 211:return 9;case 212:return 3;case 213:return 4;case 214:return 6;case 215:return 10;case 216:return 18;case 217:return 2;case 218:return 3;case 219:return 5;case 222:return 3;default:return-1}}(e);return!(-1!==n&&t=0;f--)p+=e.readUInt8(r+f+1)*Math.pow(2,8*(7-f));return n(p,9);case 208:return n(p=e.readInt8(r+1),2);case 209:return n(p=e.readInt16BE(r+1),3);case 210:return n(p=e.readInt32BE(r+1),5);case 211:return n(p=function(e,t){var n=128==(128&e[t]);if(n)for(var r=1,o=t+7;o>=t;o--){var i=(255^e[o])+r;e[o]=255&i,r=i>>8}var a=e.readUInt32BE(t+0),s=e.readUInt32BE(t+4);return(4294967296*a+s)*(n?-1:1)}(e.slice(r+1,r+9),0),9);case 202:return n(p=e.readFloatBE(r+1),5);case 203:return n(p=e.readDoubleBE(r+1),9);case 217:return t(i=e.readUInt8(r+1),o,2)?n(p=e.toString("utf8",r+2,r+2+i),2+i):null;case 218:return t(i=e.readUInt16BE(r+1),o,3)?n(p=e.toString("utf8",r+3,r+3+i),3+i):null;case 219:return t(i=e.readUInt32BE(r+1),o,5)?n(p=e.toString("utf8",r+5,r+5+i),5+i):null;case 196:return t(i=e.readUInt8(r+1),o,2)?n(p=e.slice(r+2,r+2+i),2+i):null;case 197:return t(i=e.readUInt16BE(r+1),o,3)?n(p=e.slice(r+3,r+3+i),3+i):null;case 198:return t(i=e.readUInt32BE(r+1),o,5)?n(p=e.slice(r+5,r+5+i),5+i):null;case 220:return o<3?null:(i=e.readUInt16BE(r+1),a(e,r,i,3));case 221:return o<5?null:(i=e.readUInt32BE(r+1),a(e,r,i,5));case 222:return i=e.readUInt16BE(r+1),s(e,r,i,3);case 223:throw new Error("map too big to decode in JS");case 212:return c(e,r,1);case 213:return c(e,r,2);case 214:return c(e,r,4);case 215:return c(e,r,8);case 216:return c(e,r,16);case 199:return i=e.readUInt8(r+1),l=e.readUInt8(r+2),t(i,o,3)?u(e,r,l,i,3):null;case 200:return i=e.readUInt16BE(r+1),l=e.readUInt8(r+3),t(i,o,4)?u(e,r,l,i,4):null;case 201:return i=e.readUInt32BE(r+1),l=e.readUInt8(r+5),t(i,o,6)?u(e,r,l,i,6):null}if(144==(240&h))return a(e,r,i=15&h,1);if(128==(240&h))return s(e,r,i=15&h,1);if(160==(224&h))return t(i=31&h,o,1)?n(p=e.toString("utf8",r+1,r+i+1),i+1):null;if(h>=224)return n(p=h-256,1);if(h<128)return n(h,1);throw new Error("not implemented yet")}function a(e,t,r,o){var a,s=[],c=0;for(t+=o,a=0;a.1)&&((n=r.allocUnsafe(9))[0]=203,n.writeDoubleBE(e,1)),n}e.exports=function(e,t,n,a){function s(c,u){var l,f,h;if(void 0===c)throw new Error("undefined is not encodable in msgpack!");if(null===c)(l=r.allocUnsafe(1))[0]=192;else if(!0===c)(l=r.allocUnsafe(1))[0]=195;else if(!1===c)(l=r.allocUnsafe(1))[0]=194;else if("string"==typeof c)(f=r.byteLength(c))<32?((l=r.allocUnsafe(1+f))[0]=160|f,f>0&&l.write(c,1)):f<=255&&!n?((l=r.allocUnsafe(2+f))[0]=217,l[1]=f,l.write(c,2)):f<=65535?((l=r.allocUnsafe(3+f))[0]=218,l.writeUInt16BE(f,1),l.write(c,3)):((l=r.allocUnsafe(5+f))[0]=219,l.writeUInt32BE(f,1),l.write(c,5));else if(c&&(c.readUInt32LE||c instanceof Uint8Array))c instanceof Uint8Array&&(c=r.from(c)),c.length<=255?((l=r.allocUnsafe(2))[0]=196,l[1]=c.length):c.length<=65535?((l=r.allocUnsafe(3))[0]=197,l.writeUInt16BE(c.length,1)):((l=r.allocUnsafe(5))[0]=198,l.writeUInt32BE(c.length,1)),l=o([l,c]);else if(Array.isArray(c))c.length<16?(l=r.allocUnsafe(1))[0]=144|c.length:c.length<65536?((l=r.allocUnsafe(3))[0]=220,l.writeUInt16BE(c.length,1)):((l=r.allocUnsafe(5))[0]=221,l.writeUInt32BE(c.length,1)),l=c.reduce((function(e,t){return e.append(s(t,!0)),e}),o().append(l));else{if(!a&&"function"==typeof c.getDate)return function(e){var t,n=1*e,i=Math.floor(n/1e3),a=1e6*(n-1e3*i);if(a||i>4294967295){(t=new r(10))[0]=215,t[1]=-1;var s=4*a,c=i/Math.pow(2,32),u=s+c&4294967295,l=4294967295&i;t.writeInt32BE(u,2),t.writeInt32BE(l,6)}else(t=new r(6))[0]=214,t[1]=-1,t.writeUInt32BE(Math.floor(n/1e3),2);return o().append(t)}(c);if("object"==typeof c)l=function(t){var n,i,a,s=[];for(n=0;n>8),s.push(255&a)):(s.push(201),s.push(a>>24),s.push(a>>16&255),s.push(a>>8&255),s.push(255&a));return o().append(r.from(s)).append(i)}(c)||function(e){var t,n,i=[],a=0;for(t in e)e.hasOwnProperty(t)&&void 0!==e[t]&&"function"!=typeof e[t]&&(++a,i.push(s(t,!0)),i.push(s(e[t],!0)));a<16?(n=r.allocUnsafe(1))[0]=128|a:((n=r.allocUnsafe(3))[0]=222,n.writeUInt16BE(a,1));return i.unshift(n),i.reduce((function(e,t){return e.append(t)}),o())}(c);else if("number"==typeof c){if((h=c)!==Math.floor(h))return i(c,t);if(c>=0)if(c<128)(l=r.allocUnsafe(1))[0]=c;else if(c<256)(l=r.allocUnsafe(2))[0]=204,l[1]=c;else if(c<65536)(l=r.allocUnsafe(3))[0]=205,l.writeUInt16BE(c,1);else if(c<=4294967295)(l=r.allocUnsafe(5))[0]=206,l.writeUInt32BE(c,1);else{if(!(c<=9007199254740991))return i(c,!0);(l=r.allocUnsafe(9))[0]=207,function(e,t){for(var n=7;n>=0;n--)e[n+1]=255&t,t/=256}(l,c)}else if(c>=-32)(l=r.allocUnsafe(1))[0]=256+c;else if(c>=-128)(l=r.allocUnsafe(2))[0]=208,l.writeInt8(c,1);else if(c>=-32768)(l=r.allocUnsafe(3))[0]=209,l.writeInt16BE(c,1);else if(c>-214748365)(l=r.allocUnsafe(5))[0]=210,l.writeInt32BE(c,1);else{if(!(c>=-9007199254740991))return i(c,!0);(l=r.allocUnsafe(9))[0]=211,function(e,t,n){var r=n<0;r&&(n=Math.abs(n));var o=n%4294967296,i=n/4294967296;if(e.writeUInt32BE(Math.floor(i),t+0),e.writeUInt32BE(o,t+4),r)for(var a=1,s=t+7;s>=t;s--){var c=(255^e[s])+a;e[s]=255&c,a=c>>8}}(l,1,c)}}}if(!l)throw new Error("not implemented yet");return u?l:l.slice()}return s}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]this.nextBatchId?this.fatalError?(this.logger.log(s.LogLevel.Debug,"Received a new batch "+e+" but errored out on a previous batch "+(this.nextBatchId-1)),[4,n.send("OnRenderCompleted",this.nextBatchId-1,this.fatalError.toString())]):[3,4]:[3,5];case 3:return o.sent(),[2];case 4:return this.logger.log(s.LogLevel.Debug,"Waiting for batch "+this.nextBatchId+". Batch "+e+" not processed."),[2];case 5:return o.trys.push([5,7,,8]),this.nextBatchId++,this.logger.log(s.LogLevel.Debug,"Applying batch "+e+"."),i.renderBatch(this.browserRendererId,new a.OutOfProcessRenderBatch(t)),[4,this.completeBatch(n,e)];case 6:return o.sent(),[3,8];case 7:throw r=o.sent(),this.fatalError=r.toString(),this.logger.log(s.LogLevel.Error,"There was an error applying batch "+e+"."),n.send("OnRenderCompleted",e,r.toString()),r;case 8:return[2]}}))}))},e.prototype.getLastBatchid=function(){return this.nextBatchId-1},e.prototype.completeBatch=function(e,t){return r(this,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,e.send("OnRenderCompleted",t,null)];case 1:return n.sent(),[3,3];case 2:return n.sent(),this.logger.log(s.LogLevel.Warning,"Failed to deliver completion notification for render '"+t+"'."),[3,3];case 3:return[2]}}))}))},e}();t.RenderQueue=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(34),o=n(33),i=function(){function e(e){this.batchData=e;var t=new u(e);this.arrayRangeReader=new l(e),this.arrayBuilderSegmentReader=new f(e),this.diffReader=new a(e),this.editReader=new s(e,t),this.frameReader=new c(e,t)}return e.prototype.updatedComponents=function(){return o.readInt32LE(this.batchData,this.batchData.length-20)},e.prototype.referenceFrames=function(){return o.readInt32LE(this.batchData,this.batchData.length-16)},e.prototype.disposedComponentIds=function(){return o.readInt32LE(this.batchData,this.batchData.length-12)},e.prototype.disposedEventHandlerIds=function(){return o.readInt32LE(this.batchData,this.batchData.length-8)},e.prototype.updatedComponentsEntry=function(e,t){var n=e+4*t;return o.readInt32LE(this.batchData,n)},e.prototype.referenceFramesEntry=function(e,t){return e+20*t},e.prototype.disposedComponentIdsEntry=function(e,t){var n=e+4*t;return o.readInt32LE(this.batchData,n)},e.prototype.disposedEventHandlerIdsEntry=function(e,t){var n=e+8*t;return o.readUint64LE(this.batchData,n)},e}();t.OutOfProcessRenderBatch=i;var a=function(){function e(e){this.batchDataUint8=e}return e.prototype.componentId=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.edits=function(e){return e+4},e.prototype.editsEntry=function(e,t){return e+16*t},e}(),s=function(){function e(e,t){this.batchDataUint8=e,this.stringReader=t}return e.prototype.editType=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.siblingIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+4)},e.prototype.newTreeIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.moveToSiblingIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.removedAttributeName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+12);return this.stringReader.readString(t)},e}(),c=function(){function e(e,t){this.batchDataUint8=e,this.stringReader=t}return e.prototype.frameType=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.subtreeLength=function(e){return o.readInt32LE(this.batchDataUint8,e+4)},e.prototype.elementReferenceCaptureId=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.componentId=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.elementName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+8);return this.stringReader.readString(t)},e.prototype.textContent=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.markupContent=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.attributeName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.attributeValue=function(e){var t=o.readInt32LE(this.batchDataUint8,e+8);return this.stringReader.readString(t)},e.prototype.attributeEventHandlerId=function(e){return o.readUint64LE(this.batchDataUint8,e+12)},e}(),u=function(){function e(e){this.batchDataUint8=e,this.stringTableStartIndex=o.readInt32LE(e,e.length-4)}return e.prototype.readString=function(e){if(-1===e)return null;var t=o.readInt32LE(this.batchDataUint8,this.stringTableStartIndex+4*e),n=o.readLEB128(this.batchDataUint8,t),i=t+o.numLEB128Bytes(n),a=new Uint8Array(this.batchDataUint8.buffer,this.batchDataUint8.byteOffset+i,n);return r.decodeUtf8(a)},e}(),l=function(){function e(e){this.batchDataUint8=e}return e.prototype.count=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.values=function(e){return e+4},e}(),f=function(){function e(e){this.batchDataUint8=e}return e.prototype.offset=function(e){return 0},e.prototype.count=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.values=function(e){return e+4},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(17),o=function(){function e(){}return e.prototype.log=function(e,t){},e.instance=new e,e}();t.NullLogger=o;var i=function(){function e(e){this.minimumLogLevel=e}return e.prototype.log=function(e,t){if(e>=this.minimumLogLevel)switch(e){case r.LogLevel.Critical:case r.LogLevel.Error:console.error("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;case r.LogLevel.Warning:console.warn("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;case r.LogLevel.Information:console.info("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;default:console.log("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t)}},e}();t.ConsoleLogger=i},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]reloading the page if you're unable to reconnect.",this.message.querySelector("a").addEventListener("click",(function(){return location.reload()}))},e.prototype.rejected=function(){this.button.style.display="none",this.reloadParagraph.style.display="none",this.message.innerHTML="Could not reconnect to the server. Reload the page to restore functionality.",this.message.querySelector("a").addEventListener("click",(function(){return location.reload()}))},e}();t.DefaultReconnectDisplay=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e){this.dialog=e}return e.prototype.show=function(){this.removeClasses(),this.dialog.classList.add(e.ShowClassName)},e.prototype.hide=function(){this.removeClasses(),this.dialog.classList.add(e.HideClassName)},e.prototype.failed=function(){this.removeClasses(),this.dialog.classList.add(e.FailedClassName)},e.prototype.rejected=function(){this.removeClasses(),this.dialog.classList.add(e.RejectedClassName)},e.prototype.removeClasses=function(){this.dialog.classList.remove(e.ShowClassName,e.HideClassName,e.FailedClassName,e.RejectedClassName)},e.ShowClassName="components-reconnect-show",e.HideClassName="components-reconnect-hide",e.FailedClassName="components-reconnect-failed",e.RejectedClassName="components-reconnect-rejected",e}();t.UserSpecifiedDisplay=r},function(e,t,n){"use strict";n.r(t),n.d(t,"VERSION",(function(){return l})),n.d(t,"MessagePackHubProtocol",(function(){return u}));var r=n(11),o=n(12),i=n(2),a=function(){function e(){}return e.write=function(e){var t=e.byteLength||e.length,n=[];do{var r=127&t;(t>>=7)>0&&(r|=128),n.push(r)}while(t>0);t=e.byteLength||e.length;var o=new Uint8Array(n.length+t);return o.set(n,0),o.set(e,n.length),o.buffer},e.parse=function(e){for(var t=[],n=new Uint8Array(e),r=[0,7,14,21,28],o=0;o7)throw new Error("Messages bigger than 2GB are not supported.");if(!(n.byteLength>=o+i+a))throw new Error("Incomplete message.");t.push(n.slice?n.slice(o+i,o+i+a):n.subarray(o+i,o+i+a)),o=o+i+a}return t},e}();var s=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=3?e[2]:void 0,error:e[1],type:i.MessageType.Close}},e.prototype.createPingMessage=function(e){if(e.length<1)throw new Error("Invalid payload for Ping message.");return{type:i.MessageType.Ping}},e.prototype.createInvocationMessage=function(e,t){if(t.length<5)throw new Error("Invalid payload for Invocation message.");var n=t[2];return n?{arguments:t[4],headers:e,invocationId:n,streamIds:[],target:t[3],type:i.MessageType.Invocation}:{arguments:t[4],headers:e,streamIds:[],target:t[3],type:i.MessageType.Invocation}},e.prototype.createStreamItemMessage=function(e,t){if(t.length<4)throw new Error("Invalid payload for StreamItem message.");return{headers:e,invocationId:t[2],item:t[3],type:i.MessageType.StreamItem}},e.prototype.createCompletionMessage=function(e,t){if(t.length<4)throw new Error("Invalid payload for Completion message.");var n,r,o=t[3];if(o!==this.voidResult&&t.length<5)throw new Error("Invalid payload for Completion message.");switch(o){case this.errorResult:n=t[4];break;case this.nonVoidResult:r=t[4]}return{error:n,headers:e,invocationId:t[2],result:r,type:i.MessageType.Completion}},e.prototype.writeInvocation=function(e){var t,n=o(this.messagePackOptions);return t=e.streamIds?n.encode([i.MessageType.Invocation,e.headers||{},e.invocationId||null,e.target,e.arguments,e.streamIds]):n.encode([i.MessageType.Invocation,e.headers||{},e.invocationId||null,e.target,e.arguments]),a.write(t.slice())},e.prototype.writeStreamInvocation=function(e){var t,n=o(this.messagePackOptions);return t=e.streamIds?n.encode([i.MessageType.StreamInvocation,e.headers||{},e.invocationId,e.target,e.arguments,e.streamIds]):n.encode([i.MessageType.StreamInvocation,e.headers||{},e.invocationId,e.target,e.arguments]),a.write(t.slice())},e.prototype.writeStreamItem=function(e){var t=o(this.messagePackOptions).encode([i.MessageType.StreamItem,e.headers||{},e.invocationId,e.item]);return a.write(t.slice())},e.prototype.writeCompletion=function(e){var t,n=o(this.messagePackOptions),r=e.error?this.errorResult:e.result?this.nonVoidResult:this.voidResult;switch(r){case this.errorResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r,e.error]);break;case this.voidResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r]);break;case this.nonVoidResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r,e.result])}return a.write(t.slice())},e.prototype.writeCancelInvocation=function(e){var t=o(this.messagePackOptions).encode([i.MessageType.CancelInvocation,e.headers||{},e.invocationId]);return a.write(t.slice())},e.prototype.readHeaders=function(e){var t=e[1];if("object"!=typeof t)throw new Error("Invalid headers.");return t},e}(),l="0.0.0-DEV_BUILD"}]); \ No newline at end of file +*/var r=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;function a(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,s,c=a(e),u=1;u0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,n=""+t.data;t=t.next;)n+=e+t.data;return n},e.prototype.concat=function(e){if(0===this.length)return r.alloc(0);if(1===this.length)return this.head.data;for(var t,n,o,i=r.allocUnsafe(e>>>0),a=this.head,s=0;a;)t=a.data,n=i,o=s,t.copy(n,o),s+=a.data.length,a=a.next;return i},e}(),o&&o.inspect&&o.inspect.custom&&(e.exports.prototype[o.inspect.custom]=function(){var e=o.inspect({length:this.length});return this.constructor.name+" "+e})},function(e,t){},function(e,t,n){var r=n(10),o=r.Buffer;function i(e,t){for(var n in e)t[n]=e[n]}function a(e,t,n){return o(e,t,n)}o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?e.exports=r:(i(r,t),t.Buffer=a),a.prototype=Object.create(o.prototype),i(o,a),a.from=function(e,t,n){if("number"==typeof e)throw new TypeError("Argument must not be a number");return o(e,t,n)},a.alloc=function(e,t,n){if("number"!=typeof e)throw new TypeError("Argument must be a number");var r=o(e);return void 0!==t?"string"==typeof n?r.fill(t,n):r.fill(t):r.fill(0),r},a.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return o(e)},a.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r.SlowBuffer(e)}},function(e,t,n){(function(e){var r=void 0!==e&&e||"undefined"!=typeof self&&self||window,o=Function.prototype.apply;function i(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new i(o.call(setTimeout,r,arguments),clearTimeout)},t.setInterval=function(){return new i(o.call(setInterval,r,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(r,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n(68),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n(8))},function(e,t,n){(function(e,t){!function(e,n){"use strict";if(!e.setImmediate){var r,o,i,a,s,c=1,u={},l=!1,f=e.document,h=Object.getPrototypeOf&&Object.getPrototypeOf(e);h=h&&h.setTimeout?h:e,"[object process]"==={}.toString.call(e.process)?r=function(e){t.nextTick((function(){d(e)}))}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?e.MessageChannel?((i=new MessageChannel).port1.onmessage=function(e){d(e.data)},r=function(e){i.port2.postMessage(e)}):f&&"onreadystatechange"in f.createElement("script")?(o=f.documentElement,r=function(e){var t=f.createElement("script");t.onreadystatechange=function(){d(e),t.onreadystatechange=null,o.removeChild(t),t=null},o.appendChild(t)}):r=function(e){setTimeout(d,0,e)}:(a="setImmediate$"+Math.random()+"$",s=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(a)&&d(+t.data.slice(a.length))},e.addEventListener?e.addEventListener("message",s,!1):e.attachEvent("onmessage",s),r=function(t){e.postMessage(a+t,"*")}),h.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n0?this._transform(null,t,n):n()},e.exports.decoder=c,e.exports.encoder=s},function(e,t,n){(t=e.exports=n(37)).Stream=t,t.Readable=t,t.Writable=n(42),t.Duplex=n(9),t.Transform=n(43),t.PassThrough=n(72)},function(e,t,n){"use strict";e.exports=i;var r=n(43),o=n(19);function i(e){if(!(this instanceof i))return new i(e);r.call(this,e)}o.inherits=n(15),o.inherits(i,r),i.prototype._transform=function(e,t,n){n(null,e)}},function(e,t,n){var r=n(20);function o(e){Error.call(this),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.message=e||"unable to decode"}n(36).inherits(o,Error),e.exports=function(e){return function(e){e instanceof r||(e=r().append(e));var t=i(e);if(t)return e.consume(t.bytesConsumed),t.value;throw new o};function t(e,t,n){return t>=n+e}function n(e,t){return{value:e,bytesConsumed:t}}function i(e,r){r=void 0===r?0:r;var o=e.length-r;if(o<=0)return null;var i,l,f,h=e.readUInt8(r),p=0;if(!function(e,t){var n=function(e){switch(e){case 196:return 2;case 197:return 3;case 198:return 5;case 199:return 3;case 200:return 4;case 201:return 6;case 202:return 5;case 203:return 9;case 204:return 2;case 205:return 3;case 206:return 5;case 207:return 9;case 208:return 2;case 209:return 3;case 210:return 5;case 211:return 9;case 212:return 3;case 213:return 4;case 214:return 6;case 215:return 10;case 216:return 18;case 217:return 2;case 218:return 3;case 219:return 5;case 222:return 3;default:return-1}}(e);return!(-1!==n&&t=0;f--)p+=e.readUInt8(r+f+1)*Math.pow(2,8*(7-f));return n(p,9);case 208:return n(p=e.readInt8(r+1),2);case 209:return n(p=e.readInt16BE(r+1),3);case 210:return n(p=e.readInt32BE(r+1),5);case 211:return n(p=function(e,t){var n=128==(128&e[t]);if(n)for(var r=1,o=t+7;o>=t;o--){var i=(255^e[o])+r;e[o]=255&i,r=i>>8}var a=e.readUInt32BE(t+0),s=e.readUInt32BE(t+4);return(4294967296*a+s)*(n?-1:1)}(e.slice(r+1,r+9),0),9);case 202:return n(p=e.readFloatBE(r+1),5);case 203:return n(p=e.readDoubleBE(r+1),9);case 217:return t(i=e.readUInt8(r+1),o,2)?n(p=e.toString("utf8",r+2,r+2+i),2+i):null;case 218:return t(i=e.readUInt16BE(r+1),o,3)?n(p=e.toString("utf8",r+3,r+3+i),3+i):null;case 219:return t(i=e.readUInt32BE(r+1),o,5)?n(p=e.toString("utf8",r+5,r+5+i),5+i):null;case 196:return t(i=e.readUInt8(r+1),o,2)?n(p=e.slice(r+2,r+2+i),2+i):null;case 197:return t(i=e.readUInt16BE(r+1),o,3)?n(p=e.slice(r+3,r+3+i),3+i):null;case 198:return t(i=e.readUInt32BE(r+1),o,5)?n(p=e.slice(r+5,r+5+i),5+i):null;case 220:return o<3?null:(i=e.readUInt16BE(r+1),a(e,r,i,3));case 221:return o<5?null:(i=e.readUInt32BE(r+1),a(e,r,i,5));case 222:return i=e.readUInt16BE(r+1),s(e,r,i,3);case 223:throw new Error("map too big to decode in JS");case 212:return c(e,r,1);case 213:return c(e,r,2);case 214:return c(e,r,4);case 215:return c(e,r,8);case 216:return c(e,r,16);case 199:return i=e.readUInt8(r+1),l=e.readUInt8(r+2),t(i,o,3)?u(e,r,l,i,3):null;case 200:return i=e.readUInt16BE(r+1),l=e.readUInt8(r+3),t(i,o,4)?u(e,r,l,i,4):null;case 201:return i=e.readUInt32BE(r+1),l=e.readUInt8(r+5),t(i,o,6)?u(e,r,l,i,6):null}if(144==(240&h))return a(e,r,i=15&h,1);if(128==(240&h))return s(e,r,i=15&h,1);if(160==(224&h))return t(i=31&h,o,1)?n(p=e.toString("utf8",r+1,r+i+1),i+1):null;if(h>=224)return n(p=h-256,1);if(h<128)return n(h,1);throw new Error("not implemented yet")}function a(e,t,r,o){var a,s=[],c=0;for(t+=o,a=0;a.1)&&((n=r.allocUnsafe(9))[0]=203,n.writeDoubleBE(e,1)),n}e.exports=function(e,t,n,a){function s(c,u){var l,f,h;if(void 0===c)throw new Error("undefined is not encodable in msgpack!");if(null===c)(l=r.allocUnsafe(1))[0]=192;else if(!0===c)(l=r.allocUnsafe(1))[0]=195;else if(!1===c)(l=r.allocUnsafe(1))[0]=194;else if("string"==typeof c)(f=r.byteLength(c))<32?((l=r.allocUnsafe(1+f))[0]=160|f,f>0&&l.write(c,1)):f<=255&&!n?((l=r.allocUnsafe(2+f))[0]=217,l[1]=f,l.write(c,2)):f<=65535?((l=r.allocUnsafe(3+f))[0]=218,l.writeUInt16BE(f,1),l.write(c,3)):((l=r.allocUnsafe(5+f))[0]=219,l.writeUInt32BE(f,1),l.write(c,5));else if(c&&(c.readUInt32LE||c instanceof Uint8Array))c instanceof Uint8Array&&(c=r.from(c)),c.length<=255?((l=r.allocUnsafe(2))[0]=196,l[1]=c.length):c.length<=65535?((l=r.allocUnsafe(3))[0]=197,l.writeUInt16BE(c.length,1)):((l=r.allocUnsafe(5))[0]=198,l.writeUInt32BE(c.length,1)),l=o([l,c]);else if(Array.isArray(c))c.length<16?(l=r.allocUnsafe(1))[0]=144|c.length:c.length<65536?((l=r.allocUnsafe(3))[0]=220,l.writeUInt16BE(c.length,1)):((l=r.allocUnsafe(5))[0]=221,l.writeUInt32BE(c.length,1)),l=c.reduce((function(e,t){return e.append(s(t,!0)),e}),o().append(l));else{if(!a&&"function"==typeof c.getDate)return function(e){var t,n=1*e,i=Math.floor(n/1e3),a=1e6*(n-1e3*i);if(a||i>4294967295){(t=new r(10))[0]=215,t[1]=-1;var s=4*a,c=i/Math.pow(2,32),u=s+c&4294967295,l=4294967295&i;t.writeInt32BE(u,2),t.writeInt32BE(l,6)}else(t=new r(6))[0]=214,t[1]=-1,t.writeUInt32BE(Math.floor(n/1e3),2);return o().append(t)}(c);if("object"==typeof c)l=function(t){var n,i,a,s=[];for(n=0;n>8),s.push(255&a)):(s.push(201),s.push(a>>24),s.push(a>>16&255),s.push(a>>8&255),s.push(255&a));return o().append(r.from(s)).append(i)}(c)||function(e){var t,n,i=[],a=0;for(t in e)e.hasOwnProperty(t)&&void 0!==e[t]&&"function"!=typeof e[t]&&(++a,i.push(s(t,!0)),i.push(s(e[t],!0)));a<16?(n=r.allocUnsafe(1))[0]=128|a:((n=r.allocUnsafe(3))[0]=222,n.writeUInt16BE(a,1));return i.unshift(n),i.reduce((function(e,t){return e.append(t)}),o())}(c);else if("number"==typeof c){if((h=c)!==Math.floor(h))return i(c,t);if(c>=0)if(c<128)(l=r.allocUnsafe(1))[0]=c;else if(c<256)(l=r.allocUnsafe(2))[0]=204,l[1]=c;else if(c<65536)(l=r.allocUnsafe(3))[0]=205,l.writeUInt16BE(c,1);else if(c<=4294967295)(l=r.allocUnsafe(5))[0]=206,l.writeUInt32BE(c,1);else{if(!(c<=9007199254740991))return i(c,!0);(l=r.allocUnsafe(9))[0]=207,function(e,t){for(var n=7;n>=0;n--)e[n+1]=255&t,t/=256}(l,c)}else if(c>=-32)(l=r.allocUnsafe(1))[0]=256+c;else if(c>=-128)(l=r.allocUnsafe(2))[0]=208,l.writeInt8(c,1);else if(c>=-32768)(l=r.allocUnsafe(3))[0]=209,l.writeInt16BE(c,1);else if(c>-214748365)(l=r.allocUnsafe(5))[0]=210,l.writeInt32BE(c,1);else{if(!(c>=-9007199254740991))return i(c,!0);(l=r.allocUnsafe(9))[0]=211,function(e,t,n){var r=n<0;r&&(n=Math.abs(n));var o=n%4294967296,i=n/4294967296;if(e.writeUInt32BE(Math.floor(i),t+0),e.writeUInt32BE(o,t+4),r)for(var a=1,s=t+7;s>=t;s--){var c=(255^e[s])+a;e[s]=255&c,a=c>>8}}(l,1,c)}}}if(!l)throw new Error("not implemented yet");return u?l:l.slice()}return s}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]this.nextBatchId?this.fatalError?(this.logger.log(s.LogLevel.Debug,"Received a new batch "+e+" but errored out on a previous batch "+(this.nextBatchId-1)),[4,n.send("OnRenderCompleted",this.nextBatchId-1,this.fatalError.toString())]):[3,4]:[3,5];case 3:return o.sent(),[2];case 4:return this.logger.log(s.LogLevel.Debug,"Waiting for batch "+this.nextBatchId+". Batch "+e+" not processed."),[2];case 5:return o.trys.push([5,7,,8]),this.nextBatchId++,this.logger.log(s.LogLevel.Debug,"Applying batch "+e+"."),i.renderBatch(this.browserRendererId,new a.OutOfProcessRenderBatch(t)),[4,this.completeBatch(n,e)];case 6:return o.sent(),[3,8];case 7:throw r=o.sent(),this.fatalError=r.toString(),this.logger.log(s.LogLevel.Error,"There was an error applying batch "+e+"."),n.send("OnRenderCompleted",e,r.toString()),r;case 8:return[2]}}))}))},e.prototype.getLastBatchid=function(){return this.nextBatchId-1},e.prototype.completeBatch=function(e,t){return r(this,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,e.send("OnRenderCompleted",t,null)];case 1:return n.sent(),[3,3];case 2:return n.sent(),this.logger.log(s.LogLevel.Warning,"Failed to deliver completion notification for render '"+t+"'."),[3,3];case 3:return[2]}}))}))},e}();t.RenderQueue=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(34),o=n(33),i=function(){function e(e){this.batchData=e;var t=new u(e);this.arrayRangeReader=new l(e),this.arrayBuilderSegmentReader=new f(e),this.diffReader=new a(e),this.editReader=new s(e,t),this.frameReader=new c(e,t)}return e.prototype.updatedComponents=function(){return o.readInt32LE(this.batchData,this.batchData.length-20)},e.prototype.referenceFrames=function(){return o.readInt32LE(this.batchData,this.batchData.length-16)},e.prototype.disposedComponentIds=function(){return o.readInt32LE(this.batchData,this.batchData.length-12)},e.prototype.disposedEventHandlerIds=function(){return o.readInt32LE(this.batchData,this.batchData.length-8)},e.prototype.updatedComponentsEntry=function(e,t){var n=e+4*t;return o.readInt32LE(this.batchData,n)},e.prototype.referenceFramesEntry=function(e,t){return e+20*t},e.prototype.disposedComponentIdsEntry=function(e,t){var n=e+4*t;return o.readInt32LE(this.batchData,n)},e.prototype.disposedEventHandlerIdsEntry=function(e,t){var n=e+8*t;return o.readUint64LE(this.batchData,n)},e}();t.OutOfProcessRenderBatch=i;var a=function(){function e(e){this.batchDataUint8=e}return e.prototype.componentId=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.edits=function(e){return e+4},e.prototype.editsEntry=function(e,t){return e+16*t},e}(),s=function(){function e(e,t){this.batchDataUint8=e,this.stringReader=t}return e.prototype.editType=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.siblingIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+4)},e.prototype.newTreeIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.moveToSiblingIndex=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.removedAttributeName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+12);return this.stringReader.readString(t)},e}(),c=function(){function e(e,t){this.batchDataUint8=e,this.stringReader=t}return e.prototype.frameType=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.subtreeLength=function(e){return o.readInt32LE(this.batchDataUint8,e+4)},e.prototype.elementReferenceCaptureId=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.componentId=function(e){return o.readInt32LE(this.batchDataUint8,e+8)},e.prototype.elementName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+8);return this.stringReader.readString(t)},e.prototype.textContent=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.markupContent=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.attributeName=function(e){var t=o.readInt32LE(this.batchDataUint8,e+4);return this.stringReader.readString(t)},e.prototype.attributeValue=function(e){var t=o.readInt32LE(this.batchDataUint8,e+8);return this.stringReader.readString(t)},e.prototype.attributeEventHandlerId=function(e){return o.readUint64LE(this.batchDataUint8,e+12)},e}(),u=function(){function e(e){this.batchDataUint8=e,this.stringTableStartIndex=o.readInt32LE(e,e.length-4)}return e.prototype.readString=function(e){if(-1===e)return null;var t=o.readInt32LE(this.batchDataUint8,this.stringTableStartIndex+4*e),n=o.readLEB128(this.batchDataUint8,t),i=t+o.numLEB128Bytes(n),a=new Uint8Array(this.batchDataUint8.buffer,this.batchDataUint8.byteOffset+i,n);return r.decodeUtf8(a)},e}(),l=function(){function e(e){this.batchDataUint8=e}return e.prototype.count=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.values=function(e){return e+4},e}(),f=function(){function e(e){this.batchDataUint8=e}return e.prototype.offset=function(e){return 0},e.prototype.count=function(e){return o.readInt32LE(this.batchDataUint8,e)},e.prototype.values=function(e){return e+4},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(16),o=function(){function e(){}return e.prototype.log=function(e,t){},e.instance=new e,e}();t.NullLogger=o;var i=function(){function e(e){this.minimumLogLevel=e}return e.prototype.log=function(e,t){if(e>=this.minimumLogLevel)switch(e){case r.LogLevel.Critical:case r.LogLevel.Error:console.error("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;case r.LogLevel.Warning:console.warn("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;case r.LogLevel.Information:console.info("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t);break;default:console.log("["+(new Date).toISOString()+"] "+r.LogLevel[e]+": "+t)}},e}();t.ConsoleLogger=i},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]reloading the page if you're unable to reconnect.",this.message.querySelector("a").addEventListener("click",(function(){return location.reload()}))},e.prototype.rejected=function(){this.button.style.display="none",this.reloadParagraph.style.display="none",this.message.innerHTML="Could not reconnect to the server. Reload the page to restore functionality.",this.message.querySelector("a").addEventListener("click",(function(){return location.reload()}))},e}();t.DefaultReconnectDisplay=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e){this.dialog=e}return e.prototype.show=function(){this.removeClasses(),this.dialog.classList.add(e.ShowClassName)},e.prototype.hide=function(){this.removeClasses(),this.dialog.classList.add(e.HideClassName)},e.prototype.failed=function(){this.removeClasses(),this.dialog.classList.add(e.FailedClassName)},e.prototype.rejected=function(){this.removeClasses(),this.dialog.classList.add(e.RejectedClassName)},e.prototype.removeClasses=function(){this.dialog.classList.remove(e.ShowClassName,e.HideClassName,e.FailedClassName,e.RejectedClassName)},e.ShowClassName="components-reconnect-show",e.HideClassName="components-reconnect-hide",e.FailedClassName="components-reconnect-failed",e.RejectedClassName="components-reconnect-rejected",e}();t.UserSpecifiedDisplay=r},function(e,t,n){"use strict";n.r(t),n.d(t,"VERSION",(function(){return l})),n.d(t,"MessagePackHubProtocol",(function(){return u}));var r=n(10),o=n(11),i=n(2),a=function(){function e(){}return e.write=function(e){var t=e.byteLength||e.length,n=[];do{var r=127&t;(t>>=7)>0&&(r|=128),n.push(r)}while(t>0);t=e.byteLength||e.length;var o=new Uint8Array(n.length+t);return o.set(n,0),o.set(e,n.length),o.buffer},e.parse=function(e){for(var t=[],n=new Uint8Array(e),r=[0,7,14,21,28],o=0;o7)throw new Error("Messages bigger than 2GB are not supported.");if(!(n.byteLength>=o+i+a))throw new Error("Incomplete message.");t.push(n.slice?n.slice(o+i,o+i+a):n.subarray(o+i,o+i+a)),o=o+i+a}return t},e}();var s=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=3?e[2]:void 0,error:e[1],type:i.MessageType.Close}},e.prototype.createPingMessage=function(e){if(e.length<1)throw new Error("Invalid payload for Ping message.");return{type:i.MessageType.Ping}},e.prototype.createInvocationMessage=function(e,t){if(t.length<5)throw new Error("Invalid payload for Invocation message.");var n=t[2];return n?{arguments:t[4],headers:e,invocationId:n,streamIds:[],target:t[3],type:i.MessageType.Invocation}:{arguments:t[4],headers:e,streamIds:[],target:t[3],type:i.MessageType.Invocation}},e.prototype.createStreamItemMessage=function(e,t){if(t.length<4)throw new Error("Invalid payload for StreamItem message.");return{headers:e,invocationId:t[2],item:t[3],type:i.MessageType.StreamItem}},e.prototype.createCompletionMessage=function(e,t){if(t.length<4)throw new Error("Invalid payload for Completion message.");var n,r,o=t[3];if(o!==this.voidResult&&t.length<5)throw new Error("Invalid payload for Completion message.");switch(o){case this.errorResult:n=t[4];break;case this.nonVoidResult:r=t[4]}return{error:n,headers:e,invocationId:t[2],result:r,type:i.MessageType.Completion}},e.prototype.writeInvocation=function(e){var t,n=o(this.messagePackOptions);return t=e.streamIds?n.encode([i.MessageType.Invocation,e.headers||{},e.invocationId||null,e.target,e.arguments,e.streamIds]):n.encode([i.MessageType.Invocation,e.headers||{},e.invocationId||null,e.target,e.arguments]),a.write(t.slice())},e.prototype.writeStreamInvocation=function(e){var t,n=o(this.messagePackOptions);return t=e.streamIds?n.encode([i.MessageType.StreamInvocation,e.headers||{},e.invocationId,e.target,e.arguments,e.streamIds]):n.encode([i.MessageType.StreamInvocation,e.headers||{},e.invocationId,e.target,e.arguments]),a.write(t.slice())},e.prototype.writeStreamItem=function(e){var t=o(this.messagePackOptions).encode([i.MessageType.StreamItem,e.headers||{},e.invocationId,e.item]);return a.write(t.slice())},e.prototype.writeCompletion=function(e){var t,n=o(this.messagePackOptions),r=e.error?this.errorResult:e.result?this.nonVoidResult:this.voidResult;switch(r){case this.errorResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r,e.error]);break;case this.voidResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r]);break;case this.nonVoidResult:t=n.encode([i.MessageType.Completion,e.headers||{},e.invocationId,r,e.result])}return a.write(t.slice())},e.prototype.writeCancelInvocation=function(e){var t=o(this.messagePackOptions).encode([i.MessageType.CancelInvocation,e.headers||{},e.invocationId]);return a.write(t.slice())},e.prototype.readHeaders=function(e){var t=e[1];if("object"!=typeof t)throw new Error("Invalid headers.");return t},e}(),l="5.0.0-dev"}]); \ No newline at end of file diff --git a/src/Components/Web.JS/dist/Release/blazor.webassembly.js b/src/Components/Web.JS/dist/Release/blazor.webassembly.js index cd99a3089a..f9ebed0ab9 100644 --- a/src/Components/Web.JS/dist/Release/blazor.webassembly.js +++ b/src/Components/Web.JS/dist/Release/blazor.webassembly.js @@ -1 +1 @@ -!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=45)}([,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){window.DotNet=e;var t=[],n={},r={},o=1,i=null;function a(e){t.push(e)}function s(e,t,n,r){var o=l();if(o.invokeDotNetFromJS){var i=JSON.stringify(r,m),a=o.invokeDotNetFromJS(e,t,n,i);return a?f(a):null}throw new Error("The current dispatcher does not support synchronous calls from JS to .NET. Use invokeMethodAsync instead.")}function u(e,t,r,i){if(e&&r)throw new Error("For instance method calls, assemblyName should be null. Received '"+e+"'.");var a=o++,s=new Promise((function(e,t){n[a]={resolve:e,reject:t}}));try{var u=JSON.stringify(i,m);l().beginInvokeDotNetFromJS(a,e,t,r,u)}catch(e){c(a,!1,e)}return s}function l(){if(null!==i)return i;throw new Error("No .NET call dispatcher has been set.")}function c(e,t,r){if(!n.hasOwnProperty(e))throw new Error("There is no pending async call with ID "+e+".");var o=n[e];delete n[e],t?o.resolve(r):o.reject(r)}function f(e){return e?JSON.parse(e,(function(e,n){return t.reduce((function(t,n){return n(e,t)}),n)})):null}function d(e){return e instanceof Error?e.message+"\n"+e.stack:e?e.toString():"null"}function p(e){if(Object.prototype.hasOwnProperty.call(r,e))return r[e];var t,n=window,o="window";if(e.split(".").forEach((function(e){if(!(e in n))throw new Error("Could not find '"+e+"' in '"+o+"'.");t=n,n=n[e],o+="."+e})),n instanceof Function)return n=n.bind(t),r[e]=n,n;throw new Error("The value '"+o+"' is not a function.")}e.attachDispatcher=function(e){i=e},e.attachReviver=a,e.invokeMethod=function(e,t){for(var n=[],r=2;r0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return r in e||(e[r]=[]),e}function s(e,t,n){var i=e;if(e instanceof Comment&&(l(i)&&l(i).length>0))throw new Error("Not implemented: inserting non-empty logical container");if(u(i))throw new Error("Not implemented: moving existing logical children");var a=l(t);if(n0;)e(r,0)}var i=r;i.parentNode.removeChild(i)},t.getLogicalParent=u,t.getLogicalSiblingEnd=function(e){return e[i]||null},t.getLogicalChild=function(e,t){return l(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===c(e).namespaceURI},t.getLogicalChildrenArray=l,t.permuteLogicalChildren=function(e,t){var n=l(e);t.forEach((function(e){e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=function e(t){if(t instanceof Element)return t;var n=f(t);if(n)return n.previousSibling;var r=u(t);return r instanceof Element?r.lastChild:e(r)}(e.moveRangeStart)})),t.forEach((function(t){var r=t.moveToBeforeMarker=document.createComment("marker"),o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):d(r,e)})),t.forEach((function(e){for(var t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd,i=r;i;){var a=i.nextSibling;if(n.insertBefore(i,t),i===o)break;i=a}n.removeChild(t)})),t.forEach((function(e){n[e.toSiblingIndex]=e.moveRangeStart}))},t.getClosestDomElement=c},,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.setPlatform=function(e){return t.platform=e,t.platform}},function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.dispatchEvent=function(e,t){if(!r)throw new Error("eventDispatcher not initialized. Call 'setEventDispatcher' to configure it.");r(e,t)},t.setEventDispatcher=function(e){r=e}},,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(8),o=n(4),i=n(31),a=n(5);window.Blazor={navigateTo:r.navigateTo,_internal:{attachRootComponentToElement:o.attachRootComponentToElement,navigationManager:r.internalFunctions,domWrapper:i.domFunctions,setProfilingEnabled:a.setProfilingEnabled}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(26),o=n(27),i=n(13),a=n(30),s=n(19),u=n(8),l=n(5),c=document.createElement("template"),f=document.createElementNS("http://www.w3.org/2000/svg","g"),d={submit:!0},p={},h=function(){function e(e){var t=this;this.childComponentLocations={},this.browserRendererId=e,this.eventDelegator=new o.EventDelegator((function(e,n,r,o){!function(e,t,n,r,o){d[e.type]&&e.preventDefault();var i={browserRendererId:t,eventHandlerId:n,eventArgsType:r.type,eventFieldInfo:o};s.dispatchEvent(i,r.data)}(e,t.browserRendererId,n,r,o)})),u.attachToEventDelegator(this.eventDelegator)}return e.prototype.attachRootComponentToLogicalElement=function(e,t){this.attachComponentToElement(e,t),p[e]=t},e.prototype.updateComponent=function(e,t,n,r){l.profileStart("updateComponent");var o=this.childComponentLocations[t];if(!o)throw new Error("No element is currently associated with component "+t);var a=p[t];if(a){var s=i.getLogicalSiblingEnd(a);delete p[t],s?function(e,t){var n=i.getLogicalParent(e);if(!n)throw new Error("Can't clear between nodes. The start node does not have a logical parent.");for(var r=i.getLogicalChildrenArray(n),o=r.indexOf(e)+1,a=r.indexOf(t),s=o;s<=a;s++)i.removeLogicalChild(n,o);e.textContent="!"}(a,s):function(e){var t;for(;t=e.firstChild;)e.removeChild(t)}(a)}var u=i.getClosestDomElement(o).ownerDocument,c=u&&u.activeElement;this.applyEdits(e,t,o,0,n,r),c instanceof HTMLElement&&u&&u.activeElement!==c&&c.focus(),l.profileEnd("updateComponent")},e.prototype.disposeComponent=function(e){delete this.childComponentLocations[e]},e.prototype.disposeEventHandler=function(e){this.eventDelegator.removeListener(e)},e.prototype.attachComponentToElement=function(e,t){this.childComponentLocations[e]=t},e.prototype.applyEdits=function(e,t,n,o,a,s){for(var u,l=0,c=o,f=e.arrayBuilderSegmentReader,d=e.editReader,p=e.frameReader,h=f.values(a),m=f.offset(a),y=m+f.count(a),v=m;v0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>>0)}t.readInt32LE=function(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24},t.readUint32LE=i,t.readUint64LE=function(e,t){var n=i(e,t+4);if(n>o)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*r+i(e,t)},t.readLEB128=function(e,t){for(var n=0,r=0,o=0;o<4;o++){var i=e[t+o];if(n|=(127&i)<65535&&(l-=65536,r.push(l>>>10&1023|55296),l=56320|1023&l),r.push(l)}r.length>1024&&(o.push(String.fromCharCode.apply(null,r)),r.length=0)}return o.push(String.fromCharCode.apply(null,r)),o.join("")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shouldAutoStart=function(){return!(!document||!document.currentScript||"false"===document.currentScript.getAttribute("autostart"))}},,,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(t,"__esModule",{value:!0});var a=n(3);n(23);var s=n(18),u=n(46),l=n(4),c=n(49),f=n(35),d=n(19),p=n(50),h=n(51),m=n(52),y=n(5),v=!1;function b(e){return r(this,void 0,void 0,(function(){var t,n,f,b,g,w,E,_=this;return o(this,(function(C){switch(C.label){case 0:if(v)throw new Error("Blazor has already started.");return v=!0,d.setEventDispatcher((function(e,t){u.monoPlatform.invokeWhenHeapUnlocked((function(){return a.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","DispatchEvent",e,JSON.stringify(t))}))})),t=s.setPlatform(u.monoPlatform),window.Blazor.platform=t,window.Blazor._internal.renderBatch=function(e,t){y.profileStart("renderBatch");var n=u.monoPlatform.beginHeapLock();try{l.renderBatch(e,new c.SharedMemoryRenderBatch(t))}finally{n.release()}y.profileEnd("renderBatch")},n=window.Blazor._internal.navigationManager.getBaseURI,f=window.Blazor._internal.navigationManager.getLocationHref,window.Blazor._internal.navigationManager.getUnmarshalledBaseURI=function(){return BINDING.js_string_to_mono_string(n())},window.Blazor._internal.navigationManager.getUnmarshalledLocationHref=function(){return BINDING.js_string_to_mono_string(f())},window.Blazor._internal.navigationManager.listenForNavigationEvents((function(e,t){return r(_,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return[4,a.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","NotifyLocationChanged",e,t)];case 1:return n.sent(),[2]}}))}))})),[4,m.BootConfigResult.initAsync()];case 1:return b=C.sent(),[4,Promise.all([p.WebAssemblyResourceLoader.initAsync(b.bootConfig,e||{}),h.WebAssemblyConfigLoader.initAsync(b)])];case 2:g=i.apply(void 0,[C.sent(),1]),w=g[0],C.label=3;case 3:return C.trys.push([3,5,,6]),[4,t.start(w)];case 4:return C.sent(),[3,6];case 5:throw E=C.sent(),new Error("Failed to start platform. Reason: "+E);case 6:return t.callEntryPoint(w.bootConfig.entryAssembly),[2]}}))}))}window.Blazor.start=b,f.shouldAutoStart()&&b().catch((function(e){"undefined"!=typeof Module&&Module.printErr?Module.printErr(e):console.error(e)}))},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>2]}t.monoPlatform={start:function(e){return new Promise((function(t,n){var f,d;s.attachDebuggerHotkey(e),c.initializeProfiling((function(e){v("Microsoft.AspNetCore.Components","Microsoft.AspNetCore.Components.Profiling.WebAssemblyComponentsProfiling","SetCapturing")(e)})),window.Browser={init:function(){}},f=function(){window.Module=function(e,t,n){var c=this,f=e.bootConfig.resources,d=window.Module||{},p=["DEBUGGING ENABLED"];d.print=function(e){return p.indexOf(e)<0&&console.log(e)},d.printErr=function(e){console.error(e),u.showErrorNotification()},d.preRun=d.preRun||[],d.postRun=d.postRun||[],d.preloadPlugins=[];var h,y=e.loadResources(f.assembly,(function(e){return"_framework/"+e}),"assembly"),w=e.loadResources(f.pdb||{},(function(e){return"_framework/"+e}),"pdb"),E=e.loadResource("dotnet.wasm","_framework/dotnet.wasm",e.bootConfig.resources.runtime["dotnet.wasm"],"dotnetwasm");return e.bootConfig.resources.runtime.hasOwnProperty("dotnet.timezones.dat")&&(h=e.loadResource("dotnet.timezones.dat","_framework/dotnet.timezones.dat",e.bootConfig.resources.runtime["dotnet.timezones.dat"],"timezonedata")),d.instantiateWasm=function(e,t){return r(c,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:return o.trys.push([0,3,,4]),[4,E];case 1:return[4,b(o.sent(),e)];case 2:return n=o.sent(),[3,4];case 3:throw r=o.sent(),d.printErr(r),r;case 4:return t(n),[2]}}))})),[]},d.preRun.push((function(){i=cwrap("mono_wasm_add_assembly",null,["string","number","number"]),MONO.loaded_files=[],h&&function(e){r(this,void 0,void 0,(function(){var t,n;return o(this,(function(r){switch(r.label){case 0:return t="blazor:timezonedata",addRunDependency(t),[4,e.response];case 1:return[4,r.sent().arrayBuffer()];case 2:return n=r.sent(),l.loadTimezoneData(n),removeRunDependency(t),[2]}}))}))}(h),y.forEach((function(e){return _(e,function(e,t){var n=e.lastIndexOf(".");if(n<0)throw new Error("No extension to replace in '"+e+"'");return e.substr(0,n)+t}(e.name,".dll"))})),w.forEach((function(e){return _(e,e.name)})),window.Blazor._internal.dotNetCriticalError=function(e){d.printErr(BINDING.conv_string(e)||"(null)")},window.Blazor._internal.getSatelliteAssemblies=function(t){var n=BINDING.mono_array_to_js_array(t),i=e.bootConfig.resources.satelliteResources;if(i){var a=Promise.all(n.filter((function(e){return i.hasOwnProperty(e)})).map((function(t){return e.loadResources(i[t],(function(e){return"_framework/"+e}),"assembly")})).reduce((function(e,t){return e.concat(t)}),new Array).map((function(e){return r(c,void 0,void 0,(function(){return o(this,(function(t){switch(t.label){case 0:return[4,e.response];case 1:return[2,t.sent().arrayBuffer()]}}))}))})));return BINDING.js_to_mono_obj(a.then((function(e){return e.length&&(window.Blazor._internal.readSatelliteAssemblies=function(){for(var t=BINDING.mono_obj_array_new(e.length),n=0;n>1];var n},readInt32Field:function(e,t){return h(e+(t||0))},readUint64Field:function(e,t){return function(e){var t=e>>2,n=Module.HEAPU32[t+1];if(n>d)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*f+Module.HEAPU32[t]}(e+(t||0))},readFloatField:function(e,t){return n=e+(t||0),Module.HEAPF32[n>>2];var n},readObjectField:function(e,t){return h(e+(t||0))},readStringField:function(e,t,n){var r,o=h(e+(t||0));if(0===o)return null;if(n){var i=BINDING.unbox_mono_obj(o);return"boolean"==typeof i?i?"":null:i}return p?void 0===(r=p.stringCache.get(o))&&(r=BINDING.conv_string(o),p.stringCache.set(o,r)):r=BINDING.conv_string(o),r},readStructField:function(e,t){return e+(t||0)},beginHeapLock:function(){return g(),p=new w},invokeWhenHeapUnlocked:function(e){p?p.enqueuePostReleaseAction(e):e()}};var m=document.createElement("a");function y(e){return e+12}function v(e,t,n){var r="["+e+"] "+t+":"+n;return BINDING.bind_static_method(r)}function b(e,t){return r(this,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:if("function"!=typeof WebAssembly.instantiateStreaming)return[3,4];o.label=1;case 1:return o.trys.push([1,3,,4]),[4,WebAssembly.instantiateStreaming(e.response,t)];case 2:return[2,o.sent().instance];case 3:return n=o.sent(),console.info("Streaming compilation failed. Falling back to ArrayBuffer instantiation. ",n),[3,4];case 4:return[4,e.response.then((function(e){return e.arrayBuffer()}))];case 5:return r=o.sent(),[4,WebAssembly.instantiate(r,t)];case 6:return[2,o.sent().instance]}}))}))}function g(){if(p)throw new Error("Assertion failed - heap is currently locked")}var w=function(){function e(){this.stringCache=new Map}return e.prototype.enqueuePostReleaseAction=function(e){this.postReleaseActions||(this.postReleaseActions=[]),this.postReleaseActions.push(e)},e.prototype.release=function(){var e;if(p!==this)throw new Error("Trying to release a lock which isn't current");for(p=null;null===(e=this.postReleaseActions)||void 0===e?void 0:e.length;){this.postReleaseActions.shift()(),g()}},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=window.chrome&&navigator.userAgent.indexOf("Edge")<0,o=!1;function i(){return o&&r}t.hasDebuggingEnabled=i,t.attachDebuggerHotkey=function(e){o=!!e.bootConfig.resources.pdb;var t=navigator.platform.match(/^Mac/i)?"Cmd":"Alt";i()&&console.info("Debugging hotkey: Shift+"+t+"+D (when application has focus)"),document.addEventListener("keydown",(function(e){var t;e.shiftKey&&(e.metaKey||e.altKey)&&"KeyD"===e.code&&(o?r?((t=document.createElement("a")).href="_framework/debug?url="+encodeURIComponent(location.href),t.target="_blank",t.rel="noopener noreferrer",t.click()):console.error("Currently, only Microsoft Edge (80+), or Google Chrome, are supported for debugging."):console.error("Cannot start debugging, because the application was not compiled with debugging enabled."))}))}},function(e,t,n){"use strict";var r=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(t,"__esModule",{value:!0});var i=n(33),a=n(34);t.loadTimezoneData=function(e){var t,n,s=new Uint8Array(e),u=i.readInt32LE(s,0);s=s.slice(4);var l=a.decodeUtf8(s.slice(0,u)),c=JSON.parse(l);s=s.slice(u),Module.FS_createPath("/","zoneinfo",!0,!0),new Set(c.map((function(e){return e[0].split("/")[0]}))).forEach((function(e){return Module.FS_createPath("/zoneinfo",e,!0,!0)}));try{for(var f=r(c),d=f.next();!d.done;d=f.next()){var p=o(d.value,2),h=p[0],m=p[1],y=s.slice(0,m);Module.FS_createDataFile("/zoneinfo/"+h,null,y,!0,!0,!0),s=s.slice(m)}}catch(e){t={error:e}}finally{try{d&&!d.done&&(n=f.return)&&n.call(f)}finally{if(t)throw t.error}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(18),o=function(){function e(e){this.batchAddress=e,this.arrayRangeReader=i,this.arrayBuilderSegmentReader=a,this.diffReader=s,this.editReader=u,this.frameReader=l}return e.prototype.updatedComponents=function(){return r.platform.readStructField(this.batchAddress,0)},e.prototype.referenceFrames=function(){return r.platform.readStructField(this.batchAddress,i.structLength)},e.prototype.disposedComponentIds=function(){return r.platform.readStructField(this.batchAddress,2*i.structLength)},e.prototype.disposedEventHandlerIds=function(){return r.platform.readStructField(this.batchAddress,3*i.structLength)},e.prototype.updatedComponentsEntry=function(e,t){return c(e,t,s.structLength)},e.prototype.referenceFramesEntry=function(e,t){return c(e,t,l.structLength)},e.prototype.disposedComponentIdsEntry=function(e,t){var n=c(e,t,4);return r.platform.readInt32Field(n)},e.prototype.disposedEventHandlerIdsEntry=function(e,t){var n=c(e,t,8);return r.platform.readUint64Field(n)},e}();t.SharedMemoryRenderBatch=o;var i={structLength:8,values:function(e){return r.platform.readObjectField(e,0)},count:function(e){return r.platform.readInt32Field(e,4)}},a={structLength:12,values:function(e){var t=r.platform.readObjectField(e,0),n=r.platform.getObjectFieldsBaseAddress(t);return r.platform.readObjectField(n,0)},offset:function(e){return r.platform.readInt32Field(e,4)},count:function(e){return r.platform.readInt32Field(e,8)}},s={structLength:4+a.structLength,componentId:function(e){return r.platform.readInt32Field(e,0)},edits:function(e){return r.platform.readStructField(e,4)},editsEntry:function(e,t){return c(e,t,u.structLength)}},u={structLength:20,editType:function(e){return r.platform.readInt32Field(e,0)},siblingIndex:function(e){return r.platform.readInt32Field(e,4)},newTreeIndex:function(e){return r.platform.readInt32Field(e,8)},moveToSiblingIndex:function(e){return r.platform.readInt32Field(e,8)},removedAttributeName:function(e){return r.platform.readStringField(e,16)}},l={structLength:36,frameType:function(e){return r.platform.readInt16Field(e,4)},subtreeLength:function(e){return r.platform.readInt32Field(e,8)},elementReferenceCaptureId:function(e){return r.platform.readStringField(e,16)},componentId:function(e){return r.platform.readInt32Field(e,12)},elementName:function(e){return r.platform.readStringField(e,16)},textContent:function(e){return r.platform.readStringField(e,16)},markupContent:function(e){return r.platform.readStringField(e,16)},attributeName:function(e){return r.platform.readStringField(e,16)},attributeValue:function(e){return r.platform.readStringField(e,24,!0)},attributeEventHandlerId:function(e){return r.platform.readUint64Field(e,8)}};function c(e,t,n){return r.platform.getArrayEntryPtr(e,t,n)}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return r in e||(e[r]=[]),e}function s(e,t,n){var i=e;if(e instanceof Comment&&(c(i)&&c(i).length>0))throw new Error("Not implemented: inserting non-empty logical container");if(u(i))throw new Error("Not implemented: moving existing logical children");var a=c(t);if(n0;)e(r,0)}var i=r;i.parentNode.removeChild(i)},t.getLogicalParent=u,t.getLogicalSiblingEnd=function(e){return e[i]||null},t.getLogicalChild=function(e,t){return c(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===l(e).namespaceURI},t.getLogicalChildrenArray=c,t.permuteLogicalChildren=function(e,t){var n=c(e);t.forEach((function(e){e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=function e(t){if(t instanceof Element)return t;var n=f(t);if(n)return n.previousSibling;var r=u(t);return r instanceof Element?r.lastChild:e(r)}(e.moveRangeStart)})),t.forEach((function(t){var r=t.moveToBeforeMarker=document.createComment("marker"),o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):d(r,e)})),t.forEach((function(e){for(var t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd,i=r;i;){var a=i.nextSibling;if(n.insertBefore(i,t),i===o)break;i=a}n.removeChild(t)})),t.forEach((function(e){n[e.toSiblingIndex]=e.moveRangeStart}))},t.getClosestDomElement=l},,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.setPlatform=function(e){return t.platform=e,t.platform}},function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.dispatchEvent=function(e,t){if(!r)throw new Error("eventDispatcher not initialized. Call 'setEventDispatcher' to configure it.");r(e,t)},t.setEventDispatcher=function(e){r=e}},,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(7),o=n(4),i=n(30),a=n(31);window.Blazor={navigateTo:r.navigateTo,_internal:{attachRootComponentToElement:o.attachRootComponentToElement,navigationManager:r.internalFunctions,domWrapper:i.domFunctions,Virtualize:a.Virtualize}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(25),o=n(26),i=n(12),a=n(29),s=n(18),u=n(7),c=document.createElement("template"),l=document.createElementNS("http://www.w3.org/2000/svg","g"),f={submit:!0},d={},p=function(){function e(e){var t=this;this.childComponentLocations={},this.browserRendererId=e,this.eventDelegator=new o.EventDelegator((function(e,n,r,o){!function(e,t,n,r,o){f[e.type]&&e.preventDefault();var i={browserRendererId:t,eventHandlerId:n,eventArgsType:r.type,eventFieldInfo:o};s.dispatchEvent(i,r.data)}(e,t.browserRendererId,n,r,o)})),u.attachToEventDelegator(this.eventDelegator)}return e.prototype.attachRootComponentToLogicalElement=function(e,t){this.attachComponentToElement(e,t),d[e]=t},e.prototype.updateComponent=function(e,t,n,r){var o=this.childComponentLocations[t];if(!o)throw new Error("No element is currently associated with component "+t);var a=d[t];if(a){var s=i.getLogicalSiblingEnd(a);delete d[t],s?function(e,t){var n=i.getLogicalParent(e);if(!n)throw new Error("Can't clear between nodes. The start node does not have a logical parent.");for(var r=i.getLogicalChildrenArray(n),o=r.indexOf(e)+1,a=r.indexOf(t),s=o;s<=a;s++)i.removeLogicalChild(n,o);e.textContent="!"}(a,s):function(e){var t;for(;t=e.firstChild;)e.removeChild(t)}(a)}var u=i.getClosestDomElement(o).ownerDocument,c=u&&u.activeElement;this.applyEdits(e,t,o,0,n,r),c instanceof HTMLElement&&u&&u.activeElement!==c&&c.focus()},e.prototype.disposeComponent=function(e){delete this.childComponentLocations[e]},e.prototype.disposeEventHandler=function(e){this.eventDelegator.removeListener(e)},e.prototype.attachComponentToElement=function(e,t){this.childComponentLocations[e]=t},e.prototype.applyEdits=function(e,t,n,o,a,s){for(var u,c=0,l=o,f=e.arrayBuilderSegmentReader,d=e.editReader,p=e.frameReader,h=f.values(a),m=f.offset(a),v=m+f.count(a),y=m;y0&&e.invokeMethodAsync("OnSpacerAfterVisible",r.boundingClientRect.bottom-r.intersectionRect.bottom,i)}}))}),{root:o(t),rootMargin:i+"px"});a.observe(t),a.observe(n);var s=c(t),u=c(n);function c(e){var t=new MutationObserver((function(){a.unobserve(e),a.observe(e)}));return t.observe(e,{attributes:!0}),t}r[e._id]={intersectionObserver:a,mutationObserverBefore:s,mutationObserverAfter:u}},dispose:function(e){var t=r[e._id];t&&(t.intersectionObserver.disconnect(),t.mutationObserverBefore.disconnect(),t.mutationObserverAfter.disconnect(),e.dispose(),delete r[e._id])}};var r={};function o(e){return e?"visible"!==getComputedStyle(e).overflowY?e:o(e.parentElement):null}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>>0)}t.readInt32LE=function(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24},t.readUint32LE=i,t.readUint64LE=function(e,t){var n=i(e,t+4);if(n>o)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*r+i(e,t)},t.readLEB128=function(e,t){for(var n=0,r=0,o=0;o<4;o++){var i=e[t+o];if(n|=(127&i)<65535&&(c-=65536,r.push(c>>>10&1023|55296),c=56320|1023&c),r.push(c)}r.length>1024&&(o.push(String.fromCharCode.apply(null,r)),r.length=0)}return o.push(String.fromCharCode.apply(null,r)),o.join("")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shouldAutoStart=function(){return!(!document||!document.currentScript||"false"===document.currentScript.getAttribute("autostart"))}},,,,,,,,,,function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(t,"__esModule",{value:!0});var a=n(3);n(22);var s=n(17),u=n(46),c=n(4),l=n(49),f=n(35),d=n(18),p=n(50),h=n(51),m=n(52),v=!1;function y(e){return r(this,void 0,void 0,(function(){var t,n,f,y,b,g,w,E,_=this;return o(this,(function(I){switch(I.label){case 0:if(v)throw new Error("Blazor has already started.");return v=!0,d.setEventDispatcher((function(e,t){u.monoPlatform.invokeWhenHeapUnlocked((function(){return a.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","DispatchEvent",e,JSON.stringify(t))}))})),t=s.setPlatform(u.monoPlatform),window.Blazor.platform=t,window.Blazor._internal.renderBatch=function(e,t){var n=u.monoPlatform.beginHeapLock();try{c.renderBatch(e,new l.SharedMemoryRenderBatch(t))}finally{n.release()}},n=window.Blazor._internal.navigationManager.getBaseURI,f=window.Blazor._internal.navigationManager.getLocationHref,window.Blazor._internal.navigationManager.getUnmarshalledBaseURI=function(){return BINDING.js_string_to_mono_string(n())},window.Blazor._internal.navigationManager.getUnmarshalledLocationHref=function(){return BINDING.js_string_to_mono_string(f())},window.Blazor._internal.navigationManager.listenForNavigationEvents((function(e,t){return r(_,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return[4,a.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","NotifyLocationChanged",e,t)];case 1:return n.sent(),[2]}}))}))})),y=null==e?void 0:e.environment,[4,m.BootConfigResult.initAsync(y)];case 1:return b=I.sent(),[4,Promise.all([p.WebAssemblyResourceLoader.initAsync(b.bootConfig,e||{}),h.WebAssemblyConfigLoader.initAsync(b)])];case 2:g=i.apply(void 0,[I.sent(),1]),w=g[0],I.label=3;case 3:return I.trys.push([3,5,,6]),[4,t.start(w)];case 4:return I.sent(),[3,6];case 5:throw E=I.sent(),new Error("Failed to start platform. Reason: "+E);case 6:return t.callEntryPoint(w.bootConfig.entryAssembly),[2]}}))}))}window.Blazor.start=y,f.shouldAutoStart()&&y().catch((function(e){"undefined"!=typeof Module&&Module.printErr?Module.printErr(e):console.error(e)}))},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>2]}t.monoPlatform={start:function(e){return new Promise((function(t,n){var l,f;s.attachDebuggerHotkey(e),window.Browser={init:function(){}},l=function(){window.Module=function(e,t,n){var l=this,f=e.bootConfig.resources,d=window.Module||{},p=["DEBUGGING ENABLED"];d.print=function(e){return p.indexOf(e)<0&&console.log(e)},d.printErr=function(e){console.error(e),u.showErrorNotification()},d.preRun=d.preRun||[],d.postRun=d.postRun||[],d.preloadPlugins=[];var m,g=e.loadResources(f.assembly,(function(e){return"_framework/"+e}),"assembly"),w=e.loadResources(f.pdb||{},(function(e){return"_framework/"+e}),"pdb"),E=e.loadResource("dotnet.wasm","_framework/dotnet.wasm",e.bootConfig.resources.runtime["dotnet.wasm"],"dotnetwasm");return e.bootConfig.resources.runtime.hasOwnProperty("dotnet.timezones.dat")&&(m=e.loadResource("dotnet.timezones.dat","_framework/dotnet.timezones.dat",e.bootConfig.resources.runtime["dotnet.timezones.dat"],"timezonedata")),d.instantiateWasm=function(e,t){return r(l,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:return o.trys.push([0,3,,4]),[4,E];case 1:return[4,y(o.sent(),e)];case 2:return n=o.sent(),[3,4];case 3:throw r=o.sent(),d.printErr(r),r;case 4:return t(n),[2]}}))})),[]},d.preRun.push((function(){i=cwrap("mono_wasm_add_assembly",null,["string","number","number"]),MONO.loaded_files=[],m&&function(e){r(this,void 0,void 0,(function(){var t,n;return o(this,(function(r){switch(r.label){case 0:return t="blazor:timezonedata",addRunDependency(t),[4,e.response];case 1:return[4,r.sent().arrayBuffer()];case 2:return n=r.sent(),c.loadTimezoneData(n),removeRunDependency(t),[2]}}))}))}(m),g.forEach((function(e){return _(e,function(e,t){var n=e.lastIndexOf(".");if(n<0)throw new Error("No extension to replace in '"+e+"'");return e.substr(0,n)+t}(e.name,".dll"))})),w.forEach((function(e){return _(e,e.name)})),window.Blazor._internal.dotNetCriticalError=function(e){d.printErr(BINDING.conv_string(e)||"(null)")},window.Blazor._internal.getSatelliteAssemblies=function(t){var n=BINDING.mono_array_to_js_array(t),i=e.bootConfig.resources.satelliteResources;if(i){var a=Promise.all(n.filter((function(e){return i.hasOwnProperty(e)})).map((function(t){return e.loadResources(i[t],(function(e){return"_framework/"+e}),"assembly")})).reduce((function(e,t){return e.concat(t)}),new Array).map((function(e){return r(l,void 0,void 0,(function(){return o(this,(function(t){switch(t.label){case 0:return[4,e.response];case 1:return[2,t.sent().arrayBuffer()]}}))}))})));return BINDING.js_to_mono_obj(a.then((function(e){return e.length&&(window.Blazor._internal.readSatelliteAssemblies=function(){for(var t=BINDING.mono_obj_array_new(e.length),n=0;n>1];var n},readInt32Field:function(e,t){return p(e+(t||0))},readUint64Field:function(e,t){return function(e){var t=e>>2,n=Module.HEAPU32[t+1];if(n>f)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*l+Module.HEAPU32[t]}(e+(t||0))},readFloatField:function(e,t){return n=e+(t||0),Module.HEAPF32[n>>2];var n},readObjectField:function(e,t){return p(e+(t||0))},readStringField:function(e,t,n){var r,o=p(e+(t||0));if(0===o)return null;if(n){var i=BINDING.unbox_mono_obj(o);return"boolean"==typeof i?i?"":null:i}return d?void 0===(r=d.stringCache.get(o))&&(r=BINDING.conv_string(o),d.stringCache.set(o,r)):r=BINDING.conv_string(o),r},readStructField:function(e,t){return e+(t||0)},beginHeapLock:function(){return b(),d=new g},invokeWhenHeapUnlocked:function(e){d?d.enqueuePostReleaseAction(e):e()}};var h=document.createElement("a");function m(e){return e+12}function v(e,t,n){var r="["+e+"] "+t+":"+n;return BINDING.bind_static_method(r)}function y(e,t){return r(this,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:if("function"!=typeof WebAssembly.instantiateStreaming)return[3,4];o.label=1;case 1:return o.trys.push([1,3,,4]),[4,WebAssembly.instantiateStreaming(e.response,t)];case 2:return[2,o.sent().instance];case 3:return n=o.sent(),console.info("Streaming compilation failed. Falling back to ArrayBuffer instantiation. ",n),[3,4];case 4:return[4,e.response.then((function(e){return e.arrayBuffer()}))];case 5:return r=o.sent(),[4,WebAssembly.instantiate(r,t)];case 6:return[2,o.sent().instance]}}))}))}function b(){if(d)throw new Error("Assertion failed - heap is currently locked")}var g=function(){function e(){this.stringCache=new Map}return e.prototype.enqueuePostReleaseAction=function(e){this.postReleaseActions||(this.postReleaseActions=[]),this.postReleaseActions.push(e)},e.prototype.release=function(){var e;if(d!==this)throw new Error("Trying to release a lock which isn't current");for(d=null;null===(e=this.postReleaseActions)||void 0===e?void 0:e.length;){this.postReleaseActions.shift()(),b()}},e}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=window.chrome&&navigator.userAgent.indexOf("Edge")<0,o=!1;function i(){return o&&r}t.hasDebuggingEnabled=i,t.attachDebuggerHotkey=function(e){o=!!e.bootConfig.resources.pdb;var t=navigator.platform.match(/^Mac/i)?"Cmd":"Alt";i()&&console.info("Debugging hotkey: Shift+"+t+"+D (when application has focus)"),document.addEventListener("keydown",(function(e){var t;e.shiftKey&&(e.metaKey||e.altKey)&&"KeyD"===e.code&&(o?r?((t=document.createElement("a")).href="_framework/debug?url="+encodeURIComponent(location.href),t.target="_blank",t.rel="noopener noreferrer",t.click()):console.error("Currently, only Microsoft Edge (80+), or Google Chrome, are supported for debugging."):console.error("Cannot start debugging, because the application was not compiled with debugging enabled."))}))}},function(e,t,n){"use strict";var r=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(t,"__esModule",{value:!0});var i=n(33),a=n(34);t.loadTimezoneData=function(e){var t,n,s=new Uint8Array(e),u=i.readInt32LE(s,0);s=s.slice(4);var c=a.decodeUtf8(s.slice(0,u)),l=JSON.parse(c);s=s.slice(u),Module.FS_createPath("/","zoneinfo",!0,!0),new Set(l.map((function(e){return e[0].split("/")[0]}))).forEach((function(e){return Module.FS_createPath("/zoneinfo",e,!0,!0)}));try{for(var f=r(l),d=f.next();!d.done;d=f.next()){var p=o(d.value,2),h=p[0],m=p[1],v=s.slice(0,m);Module.FS_createDataFile("/zoneinfo/"+h,null,v,!0,!0,!0),s=s.slice(m)}}catch(e){t={error:e}}finally{try{d&&!d.done&&(n=f.return)&&n.call(f)}finally{if(t)throw t.error}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(17),o=function(){function e(e){this.batchAddress=e,this.arrayRangeReader=i,this.arrayBuilderSegmentReader=a,this.diffReader=s,this.editReader=u,this.frameReader=c}return e.prototype.updatedComponents=function(){return r.platform.readStructField(this.batchAddress,0)},e.prototype.referenceFrames=function(){return r.platform.readStructField(this.batchAddress,i.structLength)},e.prototype.disposedComponentIds=function(){return r.platform.readStructField(this.batchAddress,2*i.structLength)},e.prototype.disposedEventHandlerIds=function(){return r.platform.readStructField(this.batchAddress,3*i.structLength)},e.prototype.updatedComponentsEntry=function(e,t){return l(e,t,s.structLength)},e.prototype.referenceFramesEntry=function(e,t){return l(e,t,c.structLength)},e.prototype.disposedComponentIdsEntry=function(e,t){var n=l(e,t,4);return r.platform.readInt32Field(n)},e.prototype.disposedEventHandlerIdsEntry=function(e,t){var n=l(e,t,8);return r.platform.readUint64Field(n)},e}();t.SharedMemoryRenderBatch=o;var i={structLength:8,values:function(e){return r.platform.readObjectField(e,0)},count:function(e){return r.platform.readInt32Field(e,4)}},a={structLength:12,values:function(e){var t=r.platform.readObjectField(e,0),n=r.platform.getObjectFieldsBaseAddress(t);return r.platform.readObjectField(n,0)},offset:function(e){return r.platform.readInt32Field(e,4)},count:function(e){return r.platform.readInt32Field(e,8)}},s={structLength:4+a.structLength,componentId:function(e){return r.platform.readInt32Field(e,0)},edits:function(e){return r.platform.readStructField(e,4)},editsEntry:function(e,t){return l(e,t,u.structLength)}},u={structLength:20,editType:function(e){return r.platform.readInt32Field(e,0)},siblingIndex:function(e){return r.platform.readInt32Field(e,4)},newTreeIndex:function(e){return r.platform.readInt32Field(e,8)},moveToSiblingIndex:function(e){return r.platform.readInt32Field(e,8)},removedAttributeName:function(e){return r.platform.readStringField(e,16)}},c={structLength:36,frameType:function(e){return r.platform.readInt16Field(e,4)},subtreeLength:function(e){return r.platform.readInt32Field(e,8)},elementReferenceCaptureId:function(e){return r.platform.readStringField(e,16)},componentId:function(e){return r.platform.readInt32Field(e,12)},elementName:function(e){return r.platform.readStringField(e,16)},textContent:function(e){return r.platform.readStringField(e,16)},markupContent:function(e){return r.platform.readStringField(e,16)},attributeName:function(e){return r.platform.readStringField(e,16)},attributeValue:function(e){return r.platform.readStringField(e,24,!0)},attributeEventHandlerId:function(e){return r.platform.readUint64Field(e,8)}};function l(e,t,n){return r.platform.getArrayEntryPtr(e,t,n)}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]): Promise { throw new Error('Blazor has already started.'); } started = true; - initializeProfiling(null); // Establish options to be used const options = resolveOptions(userOptions); diff --git a/src/Components/Web.JS/src/Boot.WebAssembly.ts b/src/Components/Web.JS/src/Boot.WebAssembly.ts index 99b117ad78..1095397390 100644 --- a/src/Components/Web.JS/src/Boot.WebAssembly.ts +++ b/src/Components/Web.JS/src/Boot.WebAssembly.ts @@ -11,7 +11,6 @@ import { WebAssemblyConfigLoader } from './Platform/WebAssemblyConfigLoader'; import { BootConfigResult } from './Platform/BootConfig'; import { Pointer } from './Platform/Platform'; import { WebAssemblyStartOptions } from './Platform/WebAssemblyStartOptions'; -import { profileStart, profileEnd } from './Platform/Profiling'; let started = false; @@ -34,8 +33,6 @@ async function boot(options?: Partial): Promise { const platform = Environment.setPlatform(monoPlatform); window['Blazor'].platform = platform; window['Blazor']._internal.renderBatch = (browserRendererId: number, batchAddress: Pointer) => { - profileStart('renderBatch'); - // We're going to read directly from the .NET memory heap, so indicate to the platform // that we don't want anything to modify the memory contents during this time. Currently this // is only guaranteed by the fact that .NET code doesn't run during this time, but in the @@ -47,8 +44,6 @@ async function boot(options?: Partial): Promise { } finally { heapLock.release(); } - - profileEnd('renderBatch'); }; // Configure navigation via JS Interop @@ -66,8 +61,11 @@ async function boot(options?: Partial): Promise { ); }); + // Get the custom environment setting if defined + const environment = options?.environment; + // Fetch the resources and prepare the Mono runtime - const bootConfigResult = await BootConfigResult.initAsync(); + const bootConfigResult = await BootConfigResult.initAsync(environment); const [resourceLoader] = await Promise.all([ WebAssemblyResourceLoader.initAsync(bootConfigResult.bootConfig, options || {}), diff --git a/src/Components/Web.JS/src/GlobalExports.ts b/src/Components/Web.JS/src/GlobalExports.ts index 08f7557ba5..54015e2f97 100644 --- a/src/Components/Web.JS/src/GlobalExports.ts +++ b/src/Components/Web.JS/src/GlobalExports.ts @@ -1,7 +1,7 @@ import { navigateTo, internalFunctions as navigationManagerInternalFunctions } from './Services/NavigationManager'; import { attachRootComponentToElement } from './Rendering/Renderer'; import { domFunctions } from './DomWrapper'; -import { setProfilingEnabled } from './Platform/Profiling'; +import { Virtualize } from './Virtualize'; // Make the following APIs available in global scope for invocation from JS window['Blazor'] = { @@ -11,6 +11,6 @@ window['Blazor'] = { attachRootComponentToElement, navigationManager: navigationManagerInternalFunctions, domWrapper: domFunctions, - setProfilingEnabled: setProfilingEnabled, + Virtualize, }, }; diff --git a/src/Components/Web.JS/src/Platform/BootConfig.ts b/src/Components/Web.JS/src/Platform/BootConfig.ts index fbf88ef092..5ff23f860f 100644 --- a/src/Components/Web.JS/src/Platform/BootConfig.ts +++ b/src/Components/Web.JS/src/Platform/BootConfig.ts @@ -2,7 +2,7 @@ export class BootConfigResult { private constructor(public bootConfig: BootJsonData, public applicationEnvironment: string) { } - static async initAsync(): Promise { + static async initAsync(environment?: string): Promise { const bootConfigResponse = await fetch('_framework/blazor.boot.json', { method: 'GET', credentials: 'include', @@ -10,8 +10,8 @@ export class BootConfigResult { }); // While we can expect an ASP.NET Core hosted application to include the environment, other - // hosts may not. Assume 'Production' in the absenc of any specified value. - const applicationEnvironment = bootConfigResponse.headers.get('Blazor-Environment') || 'Production'; + // hosts may not. Assume 'Production' in the absence of any specified value. + const applicationEnvironment = environment || bootConfigResponse.headers.get('Blazor-Environment') || 'Production'; const bootConfig: BootJsonData = await bootConfigResponse.json(); return new BootConfigResult(bootConfig, applicationEnvironment); diff --git a/src/Components/Web.JS/src/Platform/Circuits/DefaultReconnectDisplay.ts b/src/Components/Web.JS/src/Platform/Circuits/DefaultReconnectDisplay.ts index 58d9eb7e37..7e6688de83 100644 --- a/src/Components/Web.JS/src/Platform/Circuits/DefaultReconnectDisplay.ts +++ b/src/Components/Web.JS/src/Platform/Circuits/DefaultReconnectDisplay.ts @@ -64,6 +64,7 @@ export class DefaultReconnectDisplay implements ReconnectDisplay { this.document.body.appendChild(this.modal); } this.modal.style.display = 'block'; + this.modal.classList.add('show'); this.button.style.display = 'none'; this.reloadParagraph.style.display = 'none'; this.message.textContent = 'Attempting to reconnect to the server...'; @@ -71,6 +72,7 @@ export class DefaultReconnectDisplay implements ReconnectDisplay { hide(): void { this.modal.style.display = 'none'; + this.modal.classList.remove('show'); } failed(): void { diff --git a/src/Components/Web.JS/src/Platform/Mono/MonoPlatform.ts b/src/Components/Web.JS/src/Platform/Mono/MonoPlatform.ts index d2abd2a70e..0e51fdfc29 100644 --- a/src/Components/Web.JS/src/Platform/Mono/MonoPlatform.ts +++ b/src/Components/Web.JS/src/Platform/Mono/MonoPlatform.ts @@ -5,7 +5,6 @@ import { WebAssemblyResourceLoader, LoadingResource } from '../WebAssemblyResour import { Platform, System_Array, Pointer, System_Object, System_String, HeapLock } from '../Platform'; import { loadTimezoneData } from './TimezoneDataFile'; import { WebAssemblyBootResourceType } from '../WebAssemblyStartOptions'; -import { initializeProfiling } from '../Profiling'; let mono_wasm_add_assembly: (name: string, heapAddress: number, length: number) => void; const appBinDirName = 'appBinDir'; @@ -36,10 +35,6 @@ export const monoPlatform: Platform = { start: function start(resourceLoader: WebAssemblyResourceLoader) { return new Promise((resolve, reject) => { attachDebuggerHotkey(resourceLoader); - initializeProfiling(isCapturing => { - const setCapturingMethod = bindStaticMethod('Microsoft.AspNetCore.Components', 'Microsoft.AspNetCore.Components.Profiling.WebAssemblyComponentsProfiling', 'SetCapturing'); - setCapturingMethod(isCapturing); - }); // dotnet.js assumes the existence of this window['Browser'] = { @@ -363,11 +358,10 @@ function createEmscriptenModuleInstance(resourceLoader: WebAssemblyResourceLoade resourceLoader.purgeUnusedCacheEntriesAsync(); // Don't await - it's fine to run in background MONO.mono_wasm_setenv("MONO_URI_DOTNETRELATIVEORABSOLUTE", "true"); - + MONO.mono_wasm_setenv("DOTNET_SYSTEM_GLOBALIZATION_INVARIANT", "1"); // Turn off full-gc to prevent browser freezing. const mono_wasm_enable_on_demand_gc = cwrap('mono_wasm_enable_on_demand_gc', null, ['number']); mono_wasm_enable_on_demand_gc(0); - const load_runtime = cwrap('mono_wasm_load_runtime', null, ['string', 'number']); // -1 enables debugging with logging disabled. 0 disables debugging entirely. load_runtime(appBinDirName, hasDebuggingEnabled() ? -1 : 0); diff --git a/src/Components/Web.JS/src/Platform/Profiling.ts b/src/Components/Web.JS/src/Platform/Profiling.ts deleted file mode 100644 index 9c4f0f220b..0000000000 --- a/src/Components/Web.JS/src/Platform/Profiling.ts +++ /dev/null @@ -1,134 +0,0 @@ -import { System_String } from './Platform'; - -interface TimingEntry { - // To minimize overhead, don't even decode the strings that arrive from .NET. Assume they are compile-time constants - // and hence the memory address will be fixed, so we can just store the pointer value. - name: string | System_String; - type: 'start' | 'end'; - timestamp: number; -} - -interface TraceEvent { - // https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/preview - name: string; - cat: string; // Category - ph: 'B' | 'E'; // Phase - ts: number; // Timestamp in microseconds - pid: number; // Process ID - tid: number; // Thread ID -} - -let updateCapturingStateInHost: (isCapturing: boolean) => void; -let captureStartTime = 0; -const blazorProfilingEnabledKey = 'blazorProfilingEnabled'; -const profilingEnabled = !!localStorage[blazorProfilingEnabledKey]; -const entryLog: TimingEntry[] = []; -const openRegionsStack: (string | System_String)[] = []; - -export function setProfilingEnabled(enabled: boolean) { - // We only wire up the hotkeys etc. if the following localStorage entry is present during startup - // This is to ensure we're not interfering with any other hotkeys that developers might want to - // use for different purposes, plus it gives us a single point where we can notify .NET code during - // startup about whether profiling should be enabled. - localStorage[blazorProfilingEnabledKey] = (enabled !== false); - location.reload(); -} - -export function initializeProfiling(setCapturingCallback: ((isCapturing: boolean) => void) | null) { - if (!profilingEnabled) { - return; - } - - updateCapturingStateInHost = setCapturingCallback || (() => {}); - - // Attach hotkey (alt/cmd)+shift+p - const altKeyName = navigator.platform.match(/^Mac/i) ? 'Cmd' : 'Alt'; - console.info(`Profiling hotkey: Shift+${altKeyName}+P (when application has focus)`); - document.addEventListener('keydown', evt => { - if (evt.shiftKey && (evt.metaKey || evt.altKey) && evt.code === 'KeyP') { - toggleCaptureEnabled(); - } - }); -} - -export function profileStart(name: System_String | string) { - if (!captureStartTime) { - return; - } - - const startTime = performance.now(); - openRegionsStack.push(name); - entryLog.push({ name: name, type: 'start', timestamp: startTime }); -} - -export function profileEnd(name: System_String | string) { - if (!captureStartTime) { - return; - } - - const endTime = performance.now(); - const poppedRegionName = openRegionsStack.pop(); - if (!poppedRegionName) { - throw new Error(`Profiling mismatch: tried to end profiling for '${readJsString(name)}', but the stack was empty.`); - } else if (poppedRegionName !== name) { - throw new Error(`Profiling mismatch: tried to end profiling for '${readJsString(name)}', but the top stack item was '${readJsString(poppedRegionName)}'.`); - } - - entryLog.push({ name: name, type: 'end', timestamp: endTime }); -} - -function profileReset() { - openRegionsStack.length = 0; - entryLog.length = 0; - captureStartTime = 0; - updateCapturingStateInHost(false); -} - -function profileExport() { - const traceEvents: TraceEvent[] = entryLog.map(entry => ({ - name: readJsString(entry.name)!, - cat: 'PERF', - ph: entry.type === 'start' ? 'B': 'E', - ts: (entry.timestamp - captureStartTime) * 1000, - pid: 0, - tid: 0, - })); - const traceEventsJson = JSON.stringify(traceEvents); - const traceEventsBuffer = new TextEncoder().encode(traceEventsJson); - const anchorElement = document.createElement('a'); - anchorElement.href = URL.createObjectURL(new Blob([traceEventsBuffer])); - anchorElement.setAttribute('download', 'trace.json'); - anchorElement.click(); - URL.revokeObjectURL(anchorElement.href); -} - -function toggleCaptureEnabled() { - if (!captureStartTime) { - displayOverlayMessage('Started capturing performance profile...'); - updateCapturingStateInHost(true); - captureStartTime = performance.now(); - } else { - displayOverlayMessage('Finished capturing performance profile'); - profileExport(); - profileReset(); - } -} - -function displayOverlayMessage(message: string) { - const elem = document.createElement('div'); - elem.textContent = message; - elem.setAttribute('style', 'position: absolute; z-index: 99999; font-family: \'Sans Serif\'; top: 0; left: 0; padding: 4px; font-size: 12px; background-color: purple; color: white;'); - document.body.appendChild(elem); - setTimeout(() => document.body.removeChild(elem), 3000); -} - -function readJsString(str: string | System_String) { - // This is expensive, so don't do it while capturing timings. Only do it as part of the export process. - return typeof str === 'string' ? str : BINDING.conv_string(str); -} - -// These globals deliberately differ from our normal conventions for attaching functions inside Blazor.* -// because the intention is to minimize overhead in all reasonable ways. Having any dot-separators in the -// name would cause extra string allocations on every invocation. -window['_blazorProfileStart'] = profileStart; -window['_blazorProfileEnd'] = profileEnd; diff --git a/src/Components/Web.JS/src/Platform/WebAssemblyResourceLoader.ts b/src/Components/Web.JS/src/Platform/WebAssemblyResourceLoader.ts index f1e6690ee5..2c78b60b44 100644 --- a/src/Components/Web.JS/src/Platform/WebAssemblyResourceLoader.ts +++ b/src/Components/Web.JS/src/Platform/WebAssemblyResourceLoader.ts @@ -165,6 +165,12 @@ async function getCacheToUseIfEnabled(bootConfig: BootJsonData): Promise | null | undefined; + + /** + * Override built-in environment setting on start. + */ + environment?: string; } // This type doesn't have to align with anything in BootConfig. diff --git a/src/Components/Web.JS/src/Rendering/BrowserRenderer.ts b/src/Components/Web.JS/src/Rendering/BrowserRenderer.ts index 0c9c3ea2b9..5c2433efc7 100644 --- a/src/Components/Web.JS/src/Rendering/BrowserRenderer.ts +++ b/src/Components/Web.JS/src/Rendering/BrowserRenderer.ts @@ -6,7 +6,6 @@ import { applyCaptureIdToElement } from './ElementReferenceCapture'; import { EventFieldInfo } from './EventFieldInfo'; import { dispatchEvent } from './RendererEventDispatcher'; import { attachToEventDelegator as attachNavigationManagerToEventDelegator } from '../Services/NavigationManager'; -import { profileEnd, profileStart } from '../Platform/Profiling'; const selectValuePropname = '_blazorSelectValue'; const sharedTemplateElemForParsing = document.createElement('template'); const sharedSvgElemForParsing = document.createElementNS('http://www.w3.org/2000/svg', 'g'); @@ -41,8 +40,6 @@ export class BrowserRenderer { } public updateComponent(batch: RenderBatch, componentId: number, edits: ArrayBuilderSegment, referenceFrames: ArrayValues): void { - profileStart('updateComponent'); - const element = this.childComponentLocations[componentId]; if (!element) { throw new Error(`No element is currently associated with component ${componentId}`); @@ -70,8 +67,6 @@ export class BrowserRenderer { if ((activeElementBefore instanceof HTMLElement) && ownerDocument && ownerDocument.activeElement !== activeElementBefore) { activeElementBefore.focus(); } - - profileEnd('updateComponent'); } public disposeComponent(componentId: number) { @@ -238,7 +233,8 @@ export class BrowserRenderer { document.createElementNS('http://www.w3.org/2000/svg', tagName) : document.createElement(tagName); const newElement = toLogicalElement(newDomElementRaw); - insertLogicalChild(newDomElementRaw, parent, childIndex); + + let inserted = false; // Apply attributes const descendantsEndIndexExcl = frameIndex + frameReader.subtreeLength(frame); @@ -247,6 +243,8 @@ export class BrowserRenderer { if (frameReader.frameType(descendantFrame) === FrameType.attribute) { this.applyAttribute(batch, componentId, newDomElementRaw, descendantFrame); } else { + insertLogicalChild(newDomElementRaw, parent, childIndex); + inserted = true; // As soon as we see a non-attribute child, all the subsequent child frames are // not attributes, so bail out and insert the remnants recursively this.insertFrameRange(batch, componentId, newElement, 0, frames, descendantIndex, descendantsEndIndexExcl); @@ -254,17 +252,40 @@ export class BrowserRenderer { } } - // We handle setting 'value' on a in three different ways: + // [1] When inserting a corresponding + @@ -82,7 +83,9 @@ + + @System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription diff --git a/src/Components/test/testassets/BasicTestApp/RenderAttributesBeforeConnectedCallback.razor b/src/Components/test/testassets/BasicTestApp/RenderAttributesBeforeConnectedCallback.razor new file mode 100644 index 0000000000..4b62d3970c --- /dev/null +++ b/src/Components/test/testassets/BasicTestApp/RenderAttributesBeforeConnectedCallback.razor @@ -0,0 +1,14 @@ +

Render Attributes Before connectedCallback

+ +

+ When the connectedcallback event fires, it's nice to have the attributes of the HTML element set already, + as data is usually passed to the component using custom attributes. +

+ + + + + +@code { + string attributeString = "success"; +} diff --git a/src/Components/test/testassets/BasicTestApp/RouterTest/TestRouterWithOnNavigate.razor b/src/Components/test/testassets/BasicTestApp/RouterTest/TestRouterWithOnNavigate.razor index 5baa82fc00..7b0c289b56 100644 --- a/src/Components/test/testassets/BasicTestApp/RouterTest/TestRouterWithOnNavigate.razor +++ b/src/Components/test/testassets/BasicTestApp/RouterTest/TestRouterWithOnNavigate.razor @@ -1,5 +1,9 @@ @using Microsoft.AspNetCore.Components.Routing +@using System.Threading + + +
@@ -21,7 +25,8 @@ { { "LongPage1", new Func(TestLoadingPageShows) }, { "LongPage2", new Func(TestOnNavCancel) }, - { "Other", new Func(TestOnNavException) } + { "Other", new Func(TestOnNavException) }, + {"WithParameters/name/Abc", new Func(TestRefreshHandling)} }; private async Task OnNavigateAsync(NavigationContext args) @@ -50,4 +55,14 @@ await Task.CompletedTask; throw new Exception("This is an uncaught exception."); } + + public static async Task TestRefreshHandling(NavigationContext args) + { + await Task.Delay(Timeout.Infinite, args.CancellationToken); + } + + private void TriggerRerender() + { + Console.WriteLine("Nothing to see here, just an even to trigger a re-render..."); + } } diff --git a/src/Components/test/testassets/BasicTestApp/RouterTest/WithCatchAllParameter.razor b/src/Components/test/testassets/BasicTestApp/RouterTest/WithCatchAllParameter.razor new file mode 100644 index 0000000000..58928d407c --- /dev/null +++ b/src/Components/test/testassets/BasicTestApp/RouterTest/WithCatchAllParameter.razor @@ -0,0 +1,7 @@ +@page "/WithCatchAllParameter/{*theAnswer}" +
The answer: @TheAnswer.
+ +@code +{ + [Parameter] public string TheAnswer { get; set; } +} diff --git a/src/Components/test/testassets/BasicTestApp/ToggleEventComponent.razor b/src/Components/test/testassets/BasicTestApp/ToggleEventComponent.razor new file mode 100644 index 0000000000..1639dbb383 --- /dev/null +++ b/src/Components/test/testassets/BasicTestApp/ToggleEventComponent.razor @@ -0,0 +1,25 @@ +
+

+ Output: @message +

+ + +

Open the details.

+ +
+ Summary +

+

Detailed content

+
+ +
+ +@code { + string message { get; set; } + + void OnToggle(EventArgs e) + { + message += "ontoggle,"; + StateHasChanged(); + } +} diff --git a/src/Components/test/testassets/BasicTestApp/VirtualizationComponent.razor b/src/Components/test/testassets/BasicTestApp/VirtualizationComponent.razor new file mode 100644 index 0000000000..29aba9ea3e --- /dev/null +++ b/src/Components/test/testassets/BasicTestApp/VirtualizationComponent.razor @@ -0,0 +1,76 @@ +

+ Item size:
+ +

+ +

+ Synchronous:
+

+ +
Item @context
+
+
+

+ +

+ Asynchronous:
+
+ Cancellation count: @asyncCancellationCount
+

+ + +
Item @context
+
+ +
Loading item @context.Index...
+
+
+
+

+ +

+ Viewport as root:
+ +

Item @context
+ +

+ +@code { + float itemSize = 100; + ICollection fixedItems = Enumerable.Range(0, 1000).ToList(); + + int asyncTotalItemCount = 200; + int asyncCancellationCount = 0; + TaskCompletionSource asyncTcs = new TaskCompletionSource(); + + HashSet cachedItems = new HashSet(); + + async ValueTask> GetItemsAsync(ItemsProviderRequest request) + { + var loadingTask = asyncTcs.Task; + + var registration = request.CancellationToken.Register(() => CancelLoadingAsync(request.CancellationToken)); + + await loadingTask; + + registration.Dispose(); + + return new ItemsProviderResult(Enumerable.Range(request.StartIndex, request.Count), asyncTotalItemCount); + } + + void FinishLoadingAsync() + { + asyncTcs.SetResult(); + asyncTcs = new TaskCompletionSource(); + } + + void CancelLoadingAsync(System.Threading.CancellationToken cancellationToken) + { + asyncTcs.TrySetCanceled(cancellationToken); + asyncTcs = new TaskCompletionSource(); + + asyncCancellationCount++; + + StateHasChanged(); + } +} diff --git a/src/Components/test/testassets/BasicTestApp/_Imports.razor b/src/Components/test/testassets/BasicTestApp/_Imports.razor index 77285129da..a71616835c 100644 --- a/src/Components/test/testassets/BasicTestApp/_Imports.razor +++ b/src/Components/test/testassets/BasicTestApp/_Imports.razor @@ -1 +1,2 @@ @using Microsoft.AspNetCore.Components.Web +@using Microsoft.AspNetCore.Components.Web.Virtualization diff --git a/src/Components/test/testassets/BasicTestApp/wwwroot/index.html b/src/Components/test/testassets/BasicTestApp/wwwroot/index.html index 241b91829c..20c78f34f2 100644 --- a/src/Components/test/testassets/BasicTestApp/wwwroot/index.html +++ b/src/Components/test/testassets/BasicTestApp/wwwroot/index.html @@ -23,6 +23,7 @@ + +
diff --git a/src/DataProtection/Cryptography.Internal/src/CryptoUtil.cs b/src/DataProtection/Cryptography.Internal/src/CryptoUtil.cs index 853b50e3f8..9fad4bdc46 100644 --- a/src/DataProtection/Cryptography.Internal/src/CryptoUtil.cs +++ b/src/DataProtection/Cryptography.Internal/src/CryptoUtil.cs @@ -71,7 +71,9 @@ namespace Microsoft.AspNetCore.Cryptography } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] +#if NETSTANDARD2_0 [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] +#endif public static bool TimeConstantBuffersAreEqual(byte* bufA, byte* bufB, uint count) { bool areEqual = true; diff --git a/src/DataProtection/Cryptography.Internal/src/SafeHandles/SafeLibraryHandle.cs b/src/DataProtection/Cryptography.Internal/src/SafeHandles/SafeLibraryHandle.cs index ccd0b99c79..eae5143e59 100644 --- a/src/DataProtection/Cryptography.Internal/src/SafeHandles/SafeLibraryHandle.cs +++ b/src/DataProtection/Cryptography.Internal/src/SafeHandles/SafeLibraryHandle.cs @@ -141,7 +141,9 @@ namespace Microsoft.AspNetCore.Cryptography.SafeHandles // http://msdn.microsoft.com/en-us/library/ms683152(v=vs.85).aspx [return: MarshalAs(UnmanagedType.Bool)] +#if NETSTANDARD2_0 [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] +#endif [DllImport("kernel32.dll", CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Unicode)] internal static extern bool FreeLibrary(IntPtr hModule); diff --git a/src/DataProtection/Cryptography.Internal/src/SafeHandles/SecureLocalAllocHandle.cs b/src/DataProtection/Cryptography.Internal/src/SafeHandles/SecureLocalAllocHandle.cs index ac1f3c6172..3e1c7a79ba 100644 --- a/src/DataProtection/Cryptography.Internal/src/SafeHandles/SecureLocalAllocHandle.cs +++ b/src/DataProtection/Cryptography.Internal/src/SafeHandles/SecureLocalAllocHandle.cs @@ -38,7 +38,9 @@ namespace Microsoft.AspNetCore.Cryptography.SafeHandles return newHandle; } +#if NETSTANDARD2_0 [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] +#endif private void AllocateImpl(IntPtr cb) { handle = Marshal.AllocHGlobal(cb); // actually calls LocalAlloc diff --git a/src/DataProtection/Cryptography.Internal/src/UnsafeBufferUtil.cs b/src/DataProtection/Cryptography.Internal/src/UnsafeBufferUtil.cs index 681adb8bc3..c0f5a7959d 100644 --- a/src/DataProtection/Cryptography.Internal/src/UnsafeBufferUtil.cs +++ b/src/DataProtection/Cryptography.Internal/src/UnsafeBufferUtil.cs @@ -12,14 +12,18 @@ namespace Microsoft.AspNetCore.Cryptography internal unsafe static class UnsafeBufferUtil { [MethodImpl(MethodImplOptions.AggressiveInlining)] +#if NETSTANDARD2_0 [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] +#endif public static void BlockCopy(void* from, void* to, int byteCount) { BlockCopy(from, to, checked((uint)byteCount)); // will be checked before invoking the delegate } [MethodImpl(MethodImplOptions.AggressiveInlining)] +#if NETSTANDARD2_0 [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] +#endif public static void BlockCopy(void* from, void* to, uint byteCount) { if (byteCount != 0) @@ -28,7 +32,9 @@ namespace Microsoft.AspNetCore.Cryptography } } +#if NETSTANDARD2_0 [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] +#endif public static void BlockCopy(LocalAllocHandle from, void* to, uint byteCount) { bool refAdded = false; @@ -46,7 +52,9 @@ namespace Microsoft.AspNetCore.Cryptography } } +#if NETSTANDARD2_0 [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] +#endif public static void BlockCopy(void* from, LocalAllocHandle to, uint byteCount) { bool refAdded = false; @@ -64,7 +72,9 @@ namespace Microsoft.AspNetCore.Cryptography } } +#if NETSTANDARD2_0 [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] +#endif public static void BlockCopy(LocalAllocHandle from, LocalAllocHandle to, IntPtr length) { if (length == IntPtr.Zero) @@ -116,7 +126,9 @@ namespace Microsoft.AspNetCore.Cryptography /// Securely clears a memory buffer. ///
[MethodImpl(MethodImplOptions.AggressiveInlining)] +#if NETSTANDARD2_0 [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] +#endif public static void SecureZeroMemory(byte* buffer, int byteCount) { SecureZeroMemory(buffer, checked((uint)byteCount)); @@ -126,7 +138,9 @@ namespace Microsoft.AspNetCore.Cryptography /// Securely clears a memory buffer. ///
[MethodImpl(MethodImplOptions.AggressiveInlining)] +#if NETSTANDARD2_0 [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] +#endif public static void SecureZeroMemory(byte* buffer, uint byteCount) { if (byteCount != 0) @@ -145,7 +159,9 @@ namespace Microsoft.AspNetCore.Cryptography /// Securely clears a memory buffer. ///
[MethodImpl(MethodImplOptions.AggressiveInlining)] +#if NETSTANDARD2_0 [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] +#endif public static void SecureZeroMemory(byte* buffer, ulong byteCount) { if (byteCount != 0) @@ -163,7 +179,9 @@ namespace Microsoft.AspNetCore.Cryptography /// /// Securely clears a memory buffer. /// +#if NETSTANDARD2_0 [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] +#endif public static void SecureZeroMemory(byte* buffer, IntPtr length) { if (sizeof(IntPtr) == 4) diff --git a/src/DataProtection/Cryptography.Internal/src/UnsafeNativeMethods.cs b/src/DataProtection/Cryptography.Internal/src/UnsafeNativeMethods.cs index 3a5a4d8db3..d638b79d8d 100644 --- a/src/DataProtection/Cryptography.Internal/src/UnsafeNativeMethods.cs +++ b/src/DataProtection/Cryptography.Internal/src/UnsafeNativeMethods.cs @@ -82,13 +82,17 @@ namespace Microsoft.AspNetCore.Cryptography [In] uint dwFlags); [DllImport(BCRYPT_LIB, CallingConvention = CallingConvention.Winapi)] +#if NETSTANDARD2_0 [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] +#endif // http://msdn.microsoft.com/en-us/library/windows/desktop/aa375399(v=vs.85).aspx internal static extern int BCryptDestroyHash( [In] IntPtr hHash); [DllImport(BCRYPT_LIB, CallingConvention = CallingConvention.Winapi)] +#if NETSTANDARD2_0 [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] +#endif // http://msdn.microsoft.com/en-us/library/windows/desktop/aa375404(v=vs.85).aspx internal static extern int BCryptDestroyKey( [In] IntPtr hKey); @@ -240,7 +244,9 @@ namespace Microsoft.AspNetCore.Cryptography */ [DllImport(NCRYPT_LIB, CallingConvention = CallingConvention.Winapi)] +#if NETSTANDARD2_0 [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] +#endif // http://msdn.microsoft.com/en-us/library/windows/desktop/hh706799(v=vs.85).aspx internal static extern int NCryptCloseProtectionDescriptor( [In] IntPtr hDescriptor); diff --git a/src/DataProtection/DataProtection.slnf b/src/DataProtection/DataProtection.slnf index 6ecd6ec09c..ec0ec1e358 100644 --- a/src/DataProtection/DataProtection.slnf +++ b/src/DataProtection/DataProtection.slnf @@ -1,7 +1,7 @@ -{ +{ "solution": { "path": "..\\..\\AspNetCore.sln", - "projects" : [ + "projects": [ "src\\DataProtection\\Abstractions\\src\\Microsoft.AspNetCore.DataProtection.Abstractions.csproj", "src\\DataProtection\\Abstractions\\test\\Microsoft.AspNetCore.DataProtection.Abstractions.Tests.csproj", "src\\DataProtection\\Cryptography.Internal\\src\\Microsoft.AspNetCore.Cryptography.Internal.csproj", @@ -10,17 +10,28 @@ "src\\DataProtection\\Cryptography.KeyDerivation\\test\\Microsoft.AspNetCore.Cryptography.KeyDerivation.Tests.csproj", "src\\DataProtection\\DataProtection\\src\\Microsoft.AspNetCore.DataProtection.csproj", "src\\DataProtection\\DataProtection\\test\\Microsoft.AspNetCore.DataProtection.Tests.csproj", + "src\\DataProtection\\EntityFrameworkCore\\src\\Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.csproj", + "src\\DataProtection\\EntityFrameworkCore\\test\\Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.Test.csproj", "src\\DataProtection\\Extensions\\src\\Microsoft.AspNetCore.DataProtection.Extensions.csproj", "src\\DataProtection\\Extensions\\test\\Microsoft.AspNetCore.DataProtection.Extensions.Tests.csproj", "src\\DataProtection\\StackExchangeRedis\\src\\Microsoft.AspNetCore.DataProtection.StackExchangeRedis.csproj", "src\\DataProtection\\StackExchangeRedis\\test\\Microsoft.AspNetCore.DataProtection.StackExchangeRedis.Tests.csproj", "src\\DataProtection\\samples\\CustomEncryptorSample\\CustomEncryptorSample.csproj", + "src\\DataProtection\\samples\\EntityFrameworkCoreSample\\EntityFrameworkCoreSample.csproj", "src\\DataProtection\\samples\\KeyManagementSample\\KeyManagementSample.csproj", "src\\DataProtection\\samples\\NonDISample\\NonDISample.csproj", "src\\DataProtection\\samples\\Redis\\Redis.csproj", - "src\\DataProtection\\EntityFrameworkCore\\src\\Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.csproj", - "src\\DataProtection\\EntityFrameworkCore\\test\\Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.Test.csproj", - "src\\DataProtection\\samples\\EntityFrameworkCoreSample\\EntityFrameworkCoreSample.csproj" + "src\\Hosting\\Abstractions\\src\\Microsoft.AspNetCore.Hosting.Abstractions.csproj", + "src\\Hosting\\Hosting\\src\\Microsoft.AspNetCore.Hosting.csproj", + "src\\Hosting\\Server.Abstractions\\src\\Microsoft.AspNetCore.Hosting.Server.Abstractions.csproj", + "src\\Http\\Headers\\src\\Microsoft.Net.Http.Headers.csproj", + "src\\Http\\Http.Abstractions\\src\\Microsoft.AspNetCore.Http.Abstractions.csproj", + "src\\Http\\Http.Extensions\\src\\Microsoft.AspNetCore.Http.Extensions.csproj", + "src\\Http\\Http.Features\\src\\Microsoft.AspNetCore.Http.Features.csproj", + "src\\Http\\Http\\src\\Microsoft.AspNetCore.Http.csproj", + "src\\Http\\WebUtilities\\src\\Microsoft.AspNetCore.WebUtilities.csproj", + "src\\ObjectPool\\src\\Microsoft.Extensions.ObjectPool.csproj", + "src\\Testing\\src\\Microsoft.AspNetCore.Testing.csproj" ] } -} +} \ No newline at end of file diff --git a/src/DataProtection/DataProtection/src/Cng/DpapiSecretSerializerHelper.cs b/src/DataProtection/DataProtection/src/Cng/DpapiSecretSerializerHelper.cs index 61bbb4f9ea..2fa693851f 100644 --- a/src/DataProtection/DataProtection/src/Cng/DpapiSecretSerializerHelper.cs +++ b/src/DataProtection/DataProtection/src/Cng/DpapiSecretSerializerHelper.cs @@ -78,7 +78,9 @@ namespace Microsoft.AspNetCore.DataProtection.Cng }; var dataOut = default(DATA_BLOB); +#if NETSTANDARD2_0 RuntimeHelpers.PrepareConstrainedRegions(); +#endif try { @@ -168,7 +170,9 @@ namespace Microsoft.AspNetCore.DataProtection.Cng { var handleAcquired = false; +#if NETSTANDARD2_0 RuntimeHelpers.PrepareConstrainedRegions(); +#endif try { @@ -217,7 +221,9 @@ namespace Microsoft.AspNetCore.DataProtection.Cng }; var dataOut = default(DATA_BLOB); +#if NETSTANDARD2_0 RuntimeHelpers.PrepareConstrainedRegions(); +#endif try { @@ -290,7 +296,9 @@ namespace Microsoft.AspNetCore.DataProtection.Cng { var handleAcquired = false; +#if NETSTANDARD2_0 RuntimeHelpers.PrepareConstrainedRegions(); +#endif try { diff --git a/src/DataProtection/DataProtection/test/HostingTests.cs b/src/DataProtection/DataProtection/test/HostingTests.cs index c687715a4c..a01be3afd0 100644 --- a/src/DataProtection/DataProtection/test/HostingTests.cs +++ b/src/DataProtection/DataProtection/test/HostingTests.cs @@ -82,13 +82,13 @@ namespace Microsoft.AspNetCore.DataProtection.Test .Throws(new NotSupportedException("This mock doesn't actually work, but shouldn't kill the server")) .Verifiable(); - var builder = new WebHostBuilder() - .UseStartup() + var builder = new HostBuilder() .ConfigureServices(s => s.AddDataProtection() .Services .Replace(ServiceDescriptor.Singleton(mockKeyRing.Object)) - .AddSingleton(Mock.Of())); + .AddSingleton(Mock.Of())) + .ConfigureWebHost(b => b.UseStartup()); using (var host = builder.Build()) { diff --git a/src/DefaultBuilder/src/Microsoft.AspNetCore.csproj b/src/DefaultBuilder/src/Microsoft.AspNetCore.csproj index 89f0b0ff8b..58513c6253 100644 --- a/src/DefaultBuilder/src/Microsoft.AspNetCore.csproj +++ b/src/DefaultBuilder/src/Microsoft.AspNetCore.csproj @@ -10,24 +10,25 @@ - - - - - - - - - - - + + + + + + + + + + + + - - - - - - + + + + + + diff --git a/src/Grpc/test/InteropTests/InteropTests.csproj b/src/Grpc/test/InteropTests/InteropTests.csproj index bcbd1fc4b6..24d479432b 100644 --- a/src/Grpc/test/InteropTests/InteropTests.csproj +++ b/src/Grpc/test/InteropTests/InteropTests.csproj @@ -3,6 +3,9 @@ true $(DefaultNetCoreTargetFramework) + + + false diff --git a/src/Grpc/test/testassets/InteropClient/InteropClient.cs b/src/Grpc/test/testassets/InteropClient/InteropClient.cs index 273bcd1950..d6b47ab241 100644 --- a/src/Grpc/test/testassets/InteropClient/InteropClient.cs +++ b/src/Grpc/test/testassets/InteropClient/InteropClient.cs @@ -97,7 +97,7 @@ namespace InteropTestsClient services.AddLogging(configure => { configure.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace); - configure.AddConsole(loggerOptions => + configure.AddSimpleConsole(loggerOptions => { loggerOptions.IncludeScopes = true; loggerOptions.DisableColors = true; diff --git a/src/Grpc/test/testassets/InteropWebsite/Program.cs b/src/Grpc/test/testassets/InteropWebsite/Program.cs index 0648004d95..3efd0d647c 100644 --- a/src/Grpc/test/testassets/InteropWebsite/Program.cs +++ b/src/Grpc/test/testassets/InteropWebsite/Program.cs @@ -37,7 +37,7 @@ namespace InteropTestsWebsite Host.CreateDefaultBuilder(args) .ConfigureLogging(builder => { - builder.AddConsole(o => o.DisableColors = true); + builder.AddSimpleConsole(o => o.DisableColors = true); builder.SetMinimumLevel(LogLevel.Trace); }) .ConfigureWebHostDefaults(webBuilder => diff --git a/src/Hosting/Abstractions/src/HostingAbstractionsWebHostBuilderExtensions.cs b/src/Hosting/Abstractions/src/HostingAbstractionsWebHostBuilderExtensions.cs index 3b14957ba4..04f9ca6d65 100644 --- a/src/Hosting/Abstractions/src/HostingAbstractionsWebHostBuilderExtensions.cs +++ b/src/Hosting/Abstractions/src/HostingAbstractionsWebHostBuilderExtensions.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Linq; using System.Threading; @@ -47,6 +48,7 @@ namespace Microsoft.AspNetCore.Hosting /// The to configure. /// The name of the assembly containing the startup type. /// The . + [RequiresUnreferencedCode("Types and members the loaded assembly depends on might be removed.")] public static IWebHostBuilder UseStartup(this IWebHostBuilder hostBuilder, string startupAssemblyName) { if (startupAssemblyName == null) @@ -54,7 +56,6 @@ namespace Microsoft.AspNetCore.Hosting throw new ArgumentNullException(nameof(startupAssemblyName)); } - return hostBuilder .UseSetting(WebHostDefaults.ApplicationKey, startupAssemblyName) .UseSetting(WebHostDefaults.StartupAssemblyKey, startupAssemblyName); diff --git a/src/Hosting/Abstractions/src/HostingStartupAttribute.cs b/src/Hosting/Abstractions/src/HostingStartupAttribute.cs index cb028c327b..b03ec263dc 100644 --- a/src/Hosting/Abstractions/src/HostingStartupAttribute.cs +++ b/src/Hosting/Abstractions/src/HostingStartupAttribute.cs @@ -1,7 +1,8 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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.Diagnostics.CodeAnalysis; using System.Reflection; namespace Microsoft.AspNetCore.Hosting @@ -16,7 +17,7 @@ namespace Microsoft.AspNetCore.Hosting /// Constructs the with the specified type. ///
/// A type that implements . - public HostingStartupAttribute(Type hostingStartupType) + public HostingStartupAttribute([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)] Type hostingStartupType) { if (hostingStartupType == null) { @@ -35,6 +36,7 @@ namespace Microsoft.AspNetCore.Hosting /// The implementation of that should be loaded when /// starting an application. ///
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)] public Type HostingStartupType { get; } } -} \ No newline at end of file +} diff --git a/src/Hosting/Hosting.slnf b/src/Hosting/Hosting.slnf index ff3fd6bc79..a2ee4c287a 100644 --- a/src/Hosting/Hosting.slnf +++ b/src/Hosting/Hosting.slnf @@ -27,7 +27,8 @@ "src\\Servers\\Kestrel\\Kestrel\\src\\Microsoft.AspNetCore.Server.Kestrel.csproj", "src\\Servers\\Kestrel\\Core\\src\\Microsoft.AspNetCore.Server.Kestrel.Core.csproj", "src\\Servers\\Kestrel\\Transport.Sockets\\src\\Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.csproj", - "src\\Servers\\Connections.Abstractions\\src\\Microsoft.AspNetCore.Connections.Abstractions.csproj" + "src\\Servers\\Connections.Abstractions\\src\\Microsoft.AspNetCore.Connections.Abstractions.csproj", + "src\\ObjectPool\\src\\Microsoft.Extensions.ObjectPool.csproj" ] } } diff --git a/src/Hosting/Hosting/src/GenericHost/GenericWebHostBuilder.cs b/src/Hosting/Hosting/src/GenericHost/GenericWebHostBuilder.cs index ae1ea92816..9f97f03c4e 100644 --- a/src/Hosting/Hosting/src/GenericHost/GenericWebHostBuilder.cs +++ b/src/Hosting/Hosting/src/GenericHost/GenericWebHostBuilder.cs @@ -4,17 +4,18 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Reflection; using System.Runtime.ExceptionServices; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting.Builder; +using Microsoft.AspNetCore.Hosting.Internal; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.ObjectPool; namespace Microsoft.AspNetCore.Hosting { @@ -22,6 +23,7 @@ namespace Microsoft.AspNetCore.Hosting { private readonly IHostBuilder _builder; private readonly IConfiguration _config; + private object _startupObject; private readonly object _startupKey = new object(); private AggregateException _hostingStartupErrors; @@ -196,13 +198,15 @@ namespace Microsoft.AspNetCore.Hosting return this; } - public IWebHostBuilder UseStartup(Type startupType) + public IWebHostBuilder UseStartup([DynamicallyAccessedMembers(StartupLinkerOptions.Accessibility)] Type startupType) { // UseStartup can be called multiple times. Only run the last one. - _builder.Properties["UseStartup.StartupType"] = startupType; + _startupObject = startupType; + _builder.ConfigureServices((context, services) => { - if (_builder.Properties.TryGetValue("UseStartup.StartupType", out var cachedType) && (Type)cachedType == startupType) + // Run this delegate if the startup type matches + if (object.ReferenceEquals(_startupObject, startupType)) { UseStartup(startupType, context, services); } @@ -211,13 +215,32 @@ namespace Microsoft.AspNetCore.Hosting return this; } - private void UseStartup(Type startupType, HostBuilderContext context, IServiceCollection services) + public IWebHostBuilder UseStartup<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)]TStartup>(Func startupFactory) + { + // Clear the startup type + _startupObject = startupFactory; + + _builder.ConfigureServices((context, services) => + { + // UseStartup can be called multiple times. Only run the last one. + if (object.ReferenceEquals(_startupObject, startupFactory)) + { + var webHostBuilderContext = GetWebHostBuilderContext(context); + var instance = startupFactory(webHostBuilderContext) ?? throw new InvalidOperationException("The specified factory returned null startup instance."); + UseStartup(instance.GetType(), context, services, instance); + } + }); + + return this; + } + + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2006:UnrecognizedReflectionPattern", Justification = "We need to call a generic method on IHostBuilder.")] + private void UseStartup([DynamicallyAccessedMembers(StartupLinkerOptions.Accessibility)] Type startupType, HostBuilderContext context, IServiceCollection services, object instance = null) { var webHostBuilderContext = GetWebHostBuilderContext(context); var webHostOptions = (WebHostOptions)context.Properties[typeof(WebHostOptions)]; ExceptionDispatchInfo startupError = null; - object instance = null; ConfigureBuilder configureBuilder = null; try @@ -232,7 +255,7 @@ namespace Microsoft.AspNetCore.Hosting throw new NotSupportedException($"ConfigureServices returning an {typeof(IServiceProvider)} isn't supported."); } - instance = ActivatorUtilities.CreateInstance(new HostServiceProvider(webHostBuilderContext), startupType); + instance ??= ActivatorUtilities.CreateInstance(new HostServiceProvider(webHostBuilderContext), startupType); context.Properties[_startupKey] = instance; // Startup.ConfigureServices @@ -253,12 +276,12 @@ namespace Microsoft.AspNetCore.Hosting var actionType = typeof(Action<,>).MakeGenericType(typeof(HostBuilderContext), containerType); // Get the private ConfigureContainer method on this type then close over the container type - var configureCallback = GetType().GetMethod(nameof(ConfigureContainer), BindingFlags.NonPublic | BindingFlags.Instance) + var configureCallback = typeof(GenericWebHostBuilder).GetMethod(nameof(ConfigureContainerImpl), BindingFlags.NonPublic | BindingFlags.Instance) .MakeGenericMethod(containerType) .CreateDelegate(actionType, this); // _builder.ConfigureContainer(ConfigureContainer); - typeof(IHostBuilder).GetMethods().First(m => m.Name == nameof(IHostBuilder.ConfigureContainer)) + typeof(IHostBuilder).GetMethod(nameof(IHostBuilder.ConfigureContainer)) .MakeGenericMethod(containerType) .InvokeWithoutWrappingExceptions(_builder, new object[] { configureCallback }); } @@ -288,7 +311,7 @@ namespace Microsoft.AspNetCore.Hosting }); } - private void ConfigureContainer(HostBuilderContext context, TContainer container) + private void ConfigureContainerImpl(HostBuilderContext context, TContainer container) { var instance = context.Properties[_startupKey]; var builder = (ConfigureContainerBuilder)context.Properties[typeof(ConfigureContainerBuilder)]; @@ -297,13 +320,19 @@ namespace Microsoft.AspNetCore.Hosting public IWebHostBuilder Configure(Action configure) { + // Clear the startup type + _startupObject = configure; + _builder.ConfigureServices((context, services) => { - services.Configure(options => + if (object.ReferenceEquals(_startupObject, configure)) { - var webhostBuilderContext = GetWebHostBuilderContext(context); - options.ConfigureApplication = app => configure(webhostBuilderContext, app); - }); + services.Configure(options => + { + var webhostBuilderContext = GetWebHostBuilderContext(context); + options.ConfigureApplication = app => configure(webhostBuilderContext, app); + }); + } }); return this; diff --git a/src/Hosting/Hosting/src/GenericHost/HostingStartupWebHostBuilder.cs b/src/Hosting/Hosting/src/GenericHost/HostingStartupWebHostBuilder.cs index 42cda1cc81..ccffd884db 100644 --- a/src/Hosting/Hosting/src/GenericHost/HostingStartupWebHostBuilder.cs +++ b/src/Hosting/Hosting/src/GenericHost/HostingStartupWebHostBuilder.cs @@ -2,7 +2,9 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Diagnostics.CodeAnalysis; using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting.Internal; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -71,9 +73,14 @@ namespace Microsoft.AspNetCore.Hosting return _builder.Configure(configure); } - public IWebHostBuilder UseStartup(Type startupType) + public IWebHostBuilder UseStartup([DynamicallyAccessedMembers(StartupLinkerOptions.Accessibility)] Type startupType) { return _builder.UseStartup(startupType); } + + public IWebHostBuilder UseStartup<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)]TStartup>(Func startupFactory) + { + return _builder.UseStartup(startupFactory); + } } } diff --git a/src/Hosting/Hosting/src/GenericHost/ISupportsStartup.cs b/src/Hosting/Hosting/src/GenericHost/ISupportsStartup.cs index 8a2d1dd8ab..360c3da631 100644 --- a/src/Hosting/Hosting/src/GenericHost/ISupportsStartup.cs +++ b/src/Hosting/Hosting/src/GenericHost/ISupportsStartup.cs @@ -2,13 +2,16 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Diagnostics.CodeAnalysis; using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting.Internal; namespace Microsoft.AspNetCore.Hosting { internal interface ISupportsStartup { IWebHostBuilder Configure(Action configure); - IWebHostBuilder UseStartup(Type startupType); + IWebHostBuilder UseStartup([DynamicallyAccessedMembers(StartupLinkerOptions.Accessibility)] Type startupType); + IWebHostBuilder UseStartup<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)]TStartup>(Func startupFactory); } } diff --git a/src/Hosting/Hosting/src/Internal/StartupLinkerOptions.cs b/src/Hosting/Hosting/src/Internal/StartupLinkerOptions.cs new file mode 100644 index 0000000000..44ce693c31 --- /dev/null +++ b/src/Hosting/Hosting/src/Internal/StartupLinkerOptions.cs @@ -0,0 +1,13 @@ +// 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.Diagnostics.CodeAnalysis; + +namespace Microsoft.AspNetCore.Hosting.Internal +{ + internal static class StartupLinkerOptions + { + // We're going to keep all public constructors and public methods on Startup classes + public const DynamicallyAccessedMemberTypes Accessibility = DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.PublicMethods; + } +} diff --git a/src/Hosting/Hosting/src/Internal/StartupLoader.cs b/src/Hosting/Hosting/src/Internal/StartupLoader.cs index 46c195c22a..163c942269 100644 --- a/src/Hosting/Hosting/src/Internal/StartupLoader.cs +++ b/src/Hosting/Hosting/src/Internal/StartupLoader.cs @@ -3,9 +3,11 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Linq; using System.Reflection; +using Microsoft.AspNetCore.Hosting.Internal; using Microsoft.Extensions.DependencyInjection; namespace Microsoft.AspNetCore.Hosting @@ -37,15 +39,14 @@ namespace Microsoft.AspNetCore.Hosting // // If the Startup class ConfigureServices returns an and there is at least an registered we // throw as the filters can't be applied. - public static StartupMethods LoadMethods(IServiceProvider hostingServiceProvider, Type startupType, string environmentName) + public static StartupMethods LoadMethods(IServiceProvider hostingServiceProvider, [DynamicallyAccessedMembers(StartupLinkerOptions.Accessibility)] Type startupType, string environmentName, object instance = null) { var configureMethod = FindConfigureDelegate(startupType, environmentName); var servicesMethod = FindConfigureServicesDelegate(startupType, environmentName); var configureContainerMethod = FindConfigureContainerDelegate(startupType, environmentName); - object instance = null; - if (!configureMethod.MethodInfo.IsStatic || (servicesMethod != null && !servicesMethod.MethodInfo.IsStatic)) + if (instance == null && (!configureMethod.MethodInfo.IsStatic || (servicesMethod != null && !servicesMethod.MethodInfo.IsStatic))) { instance = ActivatorUtilities.GetServiceOrCreateInstance(hostingServiceProvider, startupType); } @@ -54,7 +55,7 @@ namespace Microsoft.AspNetCore.Hosting // going to be used for anything. var type = configureContainerMethod.MethodInfo != null ? configureContainerMethod.GetContainerType() : typeof(object); - var builder = (ConfigureServicesDelegateBuilder) Activator.CreateInstance( + var builder = (ConfigureServicesDelegateBuilder)Activator.CreateInstance( typeof(ConfigureServicesDelegateBuilder<>).MakeGenericType(type), hostingServiceProvider, servicesMethod, @@ -104,13 +105,13 @@ namespace Microsoft.AspNetCore.Hosting // The ConfigureContainer pipeline needs an Action as source, so we just adapt the // signature with this function. - void Source(TContainerBuilder containerBuilder) => + void Source(TContainerBuilder containerBuilder) => action(containerBuilder); // The ConfigureContainerBuilder.ConfigureContainerFilters expects an Action as value, but our pipeline // produces an Action given a source, so we wrap it on an Action that internally casts // the object containerBuilder to TContainerBuilder to match the expected signature of our ConfigureContainer pipeline. - void Target(object containerBuilder) => + void Target(object containerBuilder) => BuildStartupConfigureContainerFiltersPipeline(Source)((TContainerBuilder)containerBuilder); } } @@ -221,6 +222,7 @@ namespace Microsoft.AspNetCore.Hosting } } + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:RequiresUnreferencedCode", Justification = "We're warning at the entry point. This is an implementation detail.")] public static Type FindStartupType(string startupAssemblyName, string environmentName) { if (string.IsNullOrEmpty(startupAssemblyName)) @@ -273,31 +275,31 @@ namespace Microsoft.AspNetCore.Hosting return type; } - internal static ConfigureBuilder FindConfigureDelegate(Type startupType, string environmentName) + internal static ConfigureBuilder FindConfigureDelegate([DynamicallyAccessedMembers(StartupLinkerOptions.Accessibility)] Type startupType, string environmentName) { var configureMethod = FindMethod(startupType, "Configure{0}", environmentName, typeof(void), required: true); return new ConfigureBuilder(configureMethod); } - internal static ConfigureContainerBuilder FindConfigureContainerDelegate(Type startupType, string environmentName) + internal static ConfigureContainerBuilder FindConfigureContainerDelegate([DynamicallyAccessedMembers(StartupLinkerOptions.Accessibility)] Type startupType, string environmentName) { var configureMethod = FindMethod(startupType, "Configure{0}Container", environmentName, typeof(void), required: false); return new ConfigureContainerBuilder(configureMethod); } - internal static bool HasConfigureServicesIServiceProviderDelegate(Type startupType, string environmentName) + internal static bool HasConfigureServicesIServiceProviderDelegate([DynamicallyAccessedMembers(StartupLinkerOptions.Accessibility)] Type startupType, string environmentName) { return null != FindMethod(startupType, "Configure{0}Services", environmentName, typeof(IServiceProvider), required: false); } - internal static ConfigureServicesBuilder FindConfigureServicesDelegate(Type startupType, string environmentName) + internal static ConfigureServicesBuilder FindConfigureServicesDelegate([DynamicallyAccessedMembers(StartupLinkerOptions.Accessibility)] Type startupType, string environmentName) { var servicesMethod = FindMethod(startupType, "Configure{0}Services", environmentName, typeof(IServiceProvider), required: false) ?? FindMethod(startupType, "Configure{0}Services", environmentName, typeof(void), required: false); return new ConfigureServicesBuilder(servicesMethod); } - private static MethodInfo FindMethod(Type startupType, string methodName, string environmentName, Type returnType = null, bool required = true) + private static MethodInfo FindMethod([DynamicallyAccessedMembers(StartupLinkerOptions.Accessibility)] Type startupType, string methodName, string environmentName, Type returnType = null, bool required = true) { var methodNameWithEnv = string.Format(CultureInfo.InvariantCulture, methodName, environmentName); var methodNameWithNoEnv = string.Format(CultureInfo.InvariantCulture, methodName, ""); diff --git a/src/Hosting/Hosting/src/Internal/WebHost.cs b/src/Hosting/Hosting/src/Internal/WebHost.cs index ae935412b4..1e69982a50 100644 --- a/src/Hosting/Hosting/src/Internal/WebHost.cs +++ b/src/Hosting/Hosting/src/Internal/WebHost.cs @@ -325,7 +325,8 @@ namespace Microsoft.AspNetCore.Hosting _logger.Shutdown(); - var timeoutToken = new CancellationTokenSource(Options.ShutdownTimeout).Token; + using var timeoutCTS = new CancellationTokenSource(Options.ShutdownTimeout); + var timeoutToken = timeoutCTS.Token; if (!cancellationToken.CanBeCanceled) { cancellationToken = timeoutToken; @@ -383,7 +384,7 @@ namespace Microsoft.AspNetCore.Hosting switch (serviceProvider) { case IAsyncDisposable asyncDisposable: - await asyncDisposable.DisposeAsync(); + await asyncDisposable.DisposeAsync().ConfigureAwait(false); break; case IDisposable disposable: disposable.Dispose(); diff --git a/src/Hosting/Hosting/src/WebHostBuilder.cs b/src/Hosting/Hosting/src/WebHostBuilder.cs index f922289d46..68568ffb27 100644 --- a/src/Hosting/Hosting/src/WebHostBuilder.cs +++ b/src/Hosting/Hosting/src/WebHostBuilder.cs @@ -15,7 +15,6 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; -using Microsoft.Extensions.ObjectPool; namespace Microsoft.AspNetCore.Hosting { diff --git a/src/Hosting/Hosting/src/WebHostBuilderExtensions.cs b/src/Hosting/Hosting/src/WebHostBuilderExtensions.cs index 9189786b1f..20151ebe9e 100644 --- a/src/Hosting/Hosting/src/WebHostBuilderExtensions.cs +++ b/src/Hosting/Hosting/src/WebHostBuilderExtensions.cs @@ -2,8 +2,10 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Diagnostics.CodeAnalysis; using System.Reflection; using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting.Internal; using Microsoft.AspNetCore.Hosting.StaticWebAssets; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -61,6 +63,49 @@ namespace Microsoft.AspNetCore.Hosting }); } + /// + /// Specify a factory that creates the startup instance to be used by the web host. + /// + /// The to configure. + /// A delegate that specifies a factory for the startup class. + /// The . + /// When using the il linker, all public methods of are preserved. This should match the Startup type directly (and not a base type). + public static IWebHostBuilder UseStartup<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)]TStartup>(this IWebHostBuilder hostBuilder, Func startupFactory) where TStartup : class + { + if (startupFactory == null) + { + throw new ArgumentNullException(nameof(startupFactory)); + } + + var startupAssemblyName = startupFactory.GetMethodInfo().DeclaringType.GetTypeInfo().Assembly.GetName().Name; + + hostBuilder.UseSetting(WebHostDefaults.ApplicationKey, startupAssemblyName); + + // Light up the GenericWebHostBuilder implementation + if (hostBuilder is ISupportsStartup supportsStartup) + { + return supportsStartup.UseStartup(startupFactory); + } + + return hostBuilder + .ConfigureServices((context, services) => + { + services.AddSingleton(typeof(IStartup), sp => + { + var instance = startupFactory(context) ?? throw new InvalidOperationException("The specified factory returned null startup instance."); + + var hostingEnvironment = sp.GetRequiredService(); + + // Check if the instance implements IStartup before wrapping + if (instance is IStartup startup) + { + return startup; + } + + return new ConventionBasedStartup(StartupLoader.LoadMethods(sp, instance.GetType(), hostingEnvironment.EnvironmentName, instance)); + }); + }); + } /// /// Specify the startup type to be used by the web host. @@ -68,8 +113,13 @@ namespace Microsoft.AspNetCore.Hosting /// The to configure. /// The to be used. /// The . - public static IWebHostBuilder UseStartup(this IWebHostBuilder hostBuilder, Type startupType) + public static IWebHostBuilder UseStartup(this IWebHostBuilder hostBuilder, [DynamicallyAccessedMembers(StartupLinkerOptions.Accessibility)] Type startupType) { + if (startupType == null) + { + throw new ArgumentNullException(nameof(startupType)); + } + var startupAssemblyName = startupType.GetTypeInfo().Assembly.GetName().Name; hostBuilder.UseSetting(WebHostDefaults.ApplicationKey, startupAssemblyName); @@ -104,7 +154,7 @@ namespace Microsoft.AspNetCore.Hosting /// The to configure. /// The type containing the startup methods for the application. /// The . - public static IWebHostBuilder UseStartup(this IWebHostBuilder hostBuilder) where TStartup : class + public static IWebHostBuilder UseStartup<[DynamicallyAccessedMembers(StartupLinkerOptions.Accessibility)]TStartup>(this IWebHostBuilder hostBuilder) where TStartup : class { return hostBuilder.UseStartup(typeof(TStartup)); } diff --git a/src/Hosting/Hosting/src/WebHostExtensions.cs b/src/Hosting/Hosting/src/WebHostExtensions.cs index b1b317272b..fe77b13443 100644 --- a/src/Hosting/Hosting/src/WebHostExtensions.cs +++ b/src/Hosting/Hosting/src/WebHostExtensions.cs @@ -19,9 +19,10 @@ namespace Microsoft.AspNetCore.Hosting /// The timeout for stopping gracefully. Once expired the /// server may terminate any remaining active connections. /// A that completes when the stops. - public static Task StopAsync(this IWebHost host, TimeSpan timeout) + public static async Task StopAsync(this IWebHost host, TimeSpan timeout) { - return host.StopAsync(new CancellationTokenSource(timeout).Token); + using var cts = new CancellationTokenSource(timeout); + await host.StopAsync(cts.Token); } /// diff --git a/src/Hosting/Hosting/src/compiler/resources/GenericError.html b/src/Hosting/Hosting/src/compiler/resources/GenericError.html deleted file mode 100644 index c6b24c57e8..0000000000 --- a/src/Hosting/Hosting/src/compiler/resources/GenericError.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - 500 Internal Server Error - - - - - - - - [[[0]]] - - [[[1]]] - - [[[2]]] - - diff --git a/src/Hosting/Hosting/src/compiler/resources/GenericError_Exception.html b/src/Hosting/Hosting/src/compiler/resources/GenericError_Exception.html deleted file mode 100644 index 012e05bee7..0000000000 --- a/src/Hosting/Hosting/src/compiler/resources/GenericError_Exception.html +++ /dev/null @@ -1,8 +0,0 @@ -
- {0}
- {1}
- {2} -
- {3} -
-
diff --git a/src/Hosting/Hosting/src/compiler/resources/GenericError_Footer.html b/src/Hosting/Hosting/src/compiler/resources/GenericError_Footer.html deleted file mode 100644 index fe54861d87..0000000000 --- a/src/Hosting/Hosting/src/compiler/resources/GenericError_Footer.html +++ /dev/null @@ -1,3 +0,0 @@ -
- {0} {1} v{2}   |   Microsoft.AspNetCore.Hosting version {3}   |   {4}   |   Need help? -
diff --git a/src/Hosting/Hosting/src/compiler/resources/GenericError_Message.html b/src/Hosting/Hosting/src/compiler/resources/GenericError_Message.html deleted file mode 100644 index 39a83d8754..0000000000 --- a/src/Hosting/Hosting/src/compiler/resources/GenericError_Message.html +++ /dev/null @@ -1,3 +0,0 @@ -
- {0}
-
diff --git a/src/Hosting/Hosting/test/Fakes/GenericWebHostBuilderWrapper.cs b/src/Hosting/Hosting/test/Fakes/GenericWebHostBuilderWrapper.cs index 876cc7199b..b0bf122d1b 100644 --- a/src/Hosting/Hosting/test/Fakes/GenericWebHostBuilderWrapper.cs +++ b/src/Hosting/Hosting/test/Fakes/GenericWebHostBuilderWrapper.cs @@ -73,5 +73,11 @@ namespace Microsoft.AspNetCore.Hosting.Tests.Fakes _builder.UseStartup(startupType); return this; } + + public IWebHostBuilder UseStartup(Func startupFactory) + { + _builder.UseStartup(startupFactory); + return this; + } } } diff --git a/src/Hosting/Hosting/test/WebHostBuilderTests.cs b/src/Hosting/Hosting/test/WebHostBuilderTests.cs index dc128dc50a..d6b9a5f1a6 100644 --- a/src/Hosting/Hosting/test/WebHostBuilderTests.cs +++ b/src/Hosting/Hosting/test/WebHostBuilderTests.cs @@ -6,22 +6,25 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; +using System.Runtime.ExceptionServices; using System.Threading; using System.Threading.Tasks; +using System.Web; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting.Fakes; using Microsoft.AspNetCore.Hosting.Server; using Microsoft.AspNetCore.Hosting.Tests.Fakes; using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Http.Extensions; using Microsoft.AspNetCore.Http.Features; +using Microsoft.AspNetCore.WebUtilities; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Logging.Testing; -using Microsoft.Extensions.ObjectPool; using Xunit; [assembly: HostingStartup(typeof(WebHostBuilderTests.TestHostingStartup))] @@ -69,6 +72,71 @@ namespace Microsoft.AspNetCore.Hosting } } + [Theory] + [MemberData(nameof(DefaultWebHostBuildersWithConfig))] + public void UseStartupThrowsWhenFactoryIsNull(IWebHostBuilder builder) + { + var server = new TestServer(); + Assert.Throws(() => builder.UseServer(server).UseStartup((Func)null)); + } + + [Theory] + [MemberData(nameof(DefaultWebHostBuilders))] + public void UseStartupThrowsWhenFactoryReturnsNull(IWebHostBuilder builder) + { + var server = new TestServer(); + var ex = Assert.Throws(() => builder.UseServer(server).UseStartup(context => null).Build()); + Assert.Equal("The specified factory returned null startup instance.", ex.Message); + } + + [Theory] + [MemberData(nameof(DefaultWebHostBuildersWithConfig))] + public async Task MultipleUseStartupCallsLastWins(IWebHostBuilder builder) + { + var server = new TestServer(); + var host = builder.UseServer(server) + .UseStartup() + .UseStartup(context => throw new InvalidOperationException("This doesn't run")) + .Configure(app => + { + throw new InvalidOperationException("This doesn't run"); + }) + .Configure(app => + { + app.Run(context => + { + return context.Response.WriteAsync("This wins"); + }); + }) + .Build(); + using (host) + { + await host.StartAsync(); + await AssertResponseContains(server.RequestDelegate, "This wins"); + } + } + + [Theory] + [MemberData(nameof(DefaultWebHostBuildersWithConfig))] + public async Task UseStartupFactoryWorks(IWebHostBuilder builder) + { + void ConfigureServices(IServiceCollection services) { } + void Configure(IApplicationBuilder app) + { + app.Run(context => context.Response.WriteAsync("UseStartupFactoryWorks")); + } + + var server = new TestServer(); + var host = builder.UseServer(server) + .UseStartup(context => new DelegatingStartup(ConfigureServices, Configure)) + .Build(); + using (host) + { + await host.StartAsync(); + await AssertResponseContains(server.RequestDelegate, "UseStartupFactoryWorks"); + } + } + [Theory] [MemberData(nameof(DefaultWebHostBuildersWithConfig))] public async Task StartupCtorThrows_Fallback(IWebHostBuilder builder) @@ -200,7 +268,7 @@ namespace Microsoft.AspNetCore.Hosting options.ValidateScopes = true; }); - using var host = hostBuilder.Build(); + using var host = hostBuilder.Build(); Assert.Throws(() => host.Start()); Assert.True(configurationCallbackCalled); } @@ -729,6 +797,22 @@ namespace Microsoft.AspNetCore.Hosting } } + [Theory] + [MemberData(nameof(DefaultWebHostBuilders))] + public void DefaultApplicationNameWithUseStartupFactory(IWebHostBuilder builder) + { + using (var host = builder + .UseServer(new TestServer()) + .UseStartup(context => new DelegatingStartup(s => { }, app => { })) + .Build()) + { + var hostingEnv = host.Services.GetService(); + + // Should be the assembly containing this test, because that's where the delegate comes from + Assert.Equal(typeof(WebHostBuilderTests).Assembly.GetName().Name, hostingEnv.ApplicationName); + } + } + [Theory] [MemberData(nameof(DefaultWebHostBuilders))] public void Configure_SupportsNonStaticMethodDelegate(IWebHostBuilder builder) @@ -771,6 +855,27 @@ namespace Microsoft.AspNetCore.Hosting } } + [Fact] + public async Task UseStartupImplementingIStartupWorks() + { + void Configure(IApplicationBuilder app) + { + app.Run(context => context.Response.WriteAsync("Configure")); + } + + IServiceProvider ConfigureServices(IServiceCollection services) => services.BuildServiceProvider(); + + var builder = CreateWebHostBuilder(); + var server = new TestServer(); + using (var host = builder.UseServer(server) + .UseStartup(context => new DelegatingStartupWithIStartup(ConfigureServices, Configure)) + .Build()) + { + await host.StartAsync(); + await AssertResponseContains(server.RequestDelegate, "Configure"); + } + } + [Theory] [MemberData(nameof(DefaultWebHostBuildersWithConfig))] public void Build_DoesNotOverrideILoggerFactorySetByConfigureServices(IWebHostBuilder builder) @@ -1219,7 +1324,7 @@ namespace Microsoft.AspNetCore.Hosting Assert.Equal("nestedvalue", builder.GetSetting("key")); - using var host = builder.Build(); + using var host = builder.Build(); var appConfig = host.Services.GetRequiredService(); Assert.Equal("nestedvalue", appConfig["key"]); } @@ -1575,6 +1680,37 @@ namespace Microsoft.AspNetCore.Hosting } } + private class DelegatingStartupWithIStartup : IStartup + { + private readonly Func _configureServices; + private readonly Action _configure; + + public DelegatingStartupWithIStartup(Func configureServices, Action configure) + { + _configureServices = configureServices; + _configure = configure; + } + + // These are explicitly implemented to verify they don't get called via reflection + IServiceProvider IStartup.ConfigureServices(IServiceCollection services) => _configureServices(services); + void IStartup.Configure(IApplicationBuilder app) => _configure(app); + } + + public class DelegatingStartup + { + private readonly Action _configureServices; + private readonly Action _configure; + + public DelegatingStartup(Action configureServices, Action configure) + { + _configureServices = configureServices; + _configure = configure; + } + + public void ConfigureServices(IServiceCollection services) => _configureServices(services); + public void Configure(IApplicationBuilder app) => _configure(app); + } + public class StartupWithResolvedDisposableThatThrows { public StartupWithResolvedDisposableThatThrows(DisposableService service) diff --git a/src/Hosting/Hosting/test/WebHostTests.cs b/src/Hosting/Hosting/test/WebHostTests.cs index 07ddd8cc56..08f2849a7f 100644 --- a/src/Hosting/Hosting/test/WebHostTests.cs +++ b/src/Hosting/Hosting/test/WebHostTests.cs @@ -198,7 +198,6 @@ namespace Microsoft.AspNetCore.Hosting } [ConditionalFact] - [QuarantinedTest] public async Task WebHostStopAsyncUsesDefaultTimeoutIfGivenTokenDoesNotFire() { var data = new Dictionary @@ -313,7 +312,6 @@ namespace Microsoft.AspNetCore.Hosting } [ConditionalFact] - [QuarantinedTest] public void WebHostApplicationLifetimeEventsOrderedCorrectlyDuringShutdown() { using (var host = CreateBuilder() diff --git a/src/Hosting/Server.IntegrationTesting/src/ApplicationPublisher.cs b/src/Hosting/Server.IntegrationTesting/src/ApplicationPublisher.cs index ba5c545317..5f64d971c2 100644 --- a/src/Hosting/Server.IntegrationTesting/src/ApplicationPublisher.cs +++ b/src/Hosting/Server.IntegrationTesting/src/ApplicationPublisher.cs @@ -38,7 +38,7 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting // avoids triggering builds of dependencies of the test app which could cause issues like https://github.com/dotnet/arcade/issues/2941 + $" --no-dependencies" + $" /p:TargetArchitecture={deploymentParameters.RuntimeArchitecture}" - + " --no-restore"; + + (deploymentParameters.RestoreDependencies ? "" : " --no-restore"); if (deploymentParameters.ApplicationType == ApplicationType.Standalone) { @@ -79,8 +79,9 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting // https://stackoverflow.com/a/37983587/102052 // // 2. If "dotnet publish" does hang indefinitely for some reason, tests should fail fast with an error message. - const int timeoutMinutes = 5; - if (hostProcess.WaitForExit(milliseconds: timeoutMinutes * 60 * 1000)) + var timeout = deploymentParameters.PublishTimeout ?? TimeSpan.FromMinutes(5); + + if (hostProcess.WaitForExit(milliseconds: (int)timeout.TotalMilliseconds)) { if (hostProcess.ExitCode != 0) { @@ -91,7 +92,7 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting } else { - var message = $"{DotnetCommandName} publish failed to exit after {timeoutMinutes} minutes"; + var message = $"{DotnetCommandName} publish failed to exit after {timeout.TotalMinutes} minutes"; logger.LogError(message); throw new Exception(message); } diff --git a/src/Hosting/Server.IntegrationTesting/src/Common/DeploymentParameters.cs b/src/Hosting/Server.IntegrationTesting/src/Common/DeploymentParameters.cs index 1f7287d3a0..0e26e772a0 100644 --- a/src/Hosting/Server.IntegrationTesting/src/Common/DeploymentParameters.cs +++ b/src/Hosting/Server.IntegrationTesting/src/Common/DeploymentParameters.cs @@ -113,6 +113,8 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting /// public string ApplicationBaseUriHint { get; set; } + public bool RestoreDependencies { get; set; } + /// /// Scheme used by the deployed application if is empty. /// @@ -177,6 +179,11 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting /// public Action UserAdditionalCleanup { get; set; } + /// + /// Timeout for publish + /// + public TimeSpan? PublishTimeout { get; set; } + public override string ToString() { return string.Format( diff --git a/src/Hosting/TestHost/src/ClientHandler.cs b/src/Hosting/TestHost/src/ClientHandler.cs index 5c4a42a5a8..5805493225 100644 --- a/src/Hosting/TestHost/src/ClientHandler.cs +++ b/src/Hosting/TestHost/src/ClientHandler.cs @@ -100,7 +100,7 @@ namespace Microsoft.AspNetCore.TestHost if (request.Version == HttpVersion.Version20) { // https://tools.ietf.org/html/rfc7540 - req.Protocol = HttpProtocol.Http2; + req.Protocol = HttpProtocol.Http2; } else { @@ -142,12 +142,13 @@ namespace Microsoft.AspNetCore.TestHost } req.QueryString = QueryString.FromUriComponent(request.RequestUri); - if (requestContent != null) + // Reading the ContentLength will add it to the Headers‼ + // https://github.com/dotnet/runtime/blob/874399ab15e47c2b4b7c6533cc37d27d47cb5242/src/libraries/System.Net.Http/src/System/Net/Http/Headers/HttpContentHeaders.cs#L68-L87 + _ = requestContent.Headers.ContentLength; + + foreach (var header in requestContent.Headers) { - foreach (var header in requestContent.Headers) - { - req.Headers.Append(header.Key, header.Value.ToArray()); - } + req.Headers.Append(header.Key, header.Value.ToArray()); } req.Body = new AsyncStreamWrapper(reader.AsStream(), () => contextBuilder.AllowSynchronousIO); diff --git a/src/Hosting/TestHost/test/ClientHandlerTests.cs b/src/Hosting/TestHost/test/ClientHandlerTests.cs index e94ffc16f4..3e3406e6f5 100644 --- a/src/Hosting/TestHost/test/ClientHandlerTests.cs +++ b/src/Hosting/TestHost/test/ClientHandlerTests.cs @@ -4,7 +4,9 @@ using System; using System.IO; using System.Linq; +using System.Net; using System.Net.Http; +using System.Text; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; @@ -103,6 +105,51 @@ namespace Microsoft.AspNetCore.TestHost return httpClient.GetAsync("http://example.com"); } + [Fact] + public Task ContentLengthWithBodyWorks() + { + var contentBytes = Encoding.UTF8.GetBytes("This is a content!"); + var handler = new ClientHandler(new PathString(""), new DummyApplication(context => + { + Assert.Equal(contentBytes.LongLength, context.Request.ContentLength); + + return Task.CompletedTask; + })); + var httpClient = new HttpClient(handler); + var content = new ByteArrayContent(contentBytes); + + return httpClient.PostAsync("http://example.com", content); + } + + [Fact] + public Task ContentLengthWithNoBodyWorks() + { + var handler = new ClientHandler(new PathString(""), new DummyApplication(context => + { + Assert.Equal(0, context.Request.ContentLength); + + return Task.CompletedTask; + })); + var httpClient = new HttpClient(handler); + + return httpClient.GetAsync("http://example.com"); + } + + [Fact] + public Task ContentLengthWithChunkedTransferEncodingWorks() + { + var handler = new ClientHandler(new PathString(""), new DummyApplication(context => + { + Assert.Null(context.Request.ContentLength); + + return Task.CompletedTask; + })); + + var httpClient = new HttpClient(handler); + + return httpClient.PostAsync("http://example.com", new UnlimitedContent()); + } + [Fact] public async Task ServerTrailersSetOnResponseAfterContentRead() { @@ -566,5 +613,19 @@ namespace Microsoft.AspNetCore.TestHost } } } + + private class UnlimitedContent : HttpContent + { + protected override Task SerializeToStreamAsync(Stream stream, TransportContext context) + { + return Task.CompletedTask; + } + + protected override bool TryComputeLength(out long length) + { + length = -1; + return false; + } + } } } diff --git a/src/Hosting/samples/SampleStartups/StartupBlockingOnStart.cs b/src/Hosting/samples/SampleStartups/StartupBlockingOnStart.cs index dca16710e9..fda2dffae3 100644 --- a/src/Hosting/samples/SampleStartups/StartupBlockingOnStart.cs +++ b/src/Hosting/samples/SampleStartups/StartupBlockingOnStart.cs @@ -1,9 +1,11 @@ using System; +using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; // Note that this sample will not run. It is only here to illustrate usage patterns. @@ -27,20 +29,25 @@ namespace SampleStartups } // Entry point for the application. - public static void Main(string[] args) + public static async Task Main(string[] args) { var config = new ConfigurationBuilder().AddCommandLine(args).Build(); - var host = new WebHostBuilder() - .UseConfiguration(config) - .UseKestrel() - .UseStartup() + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseConfiguration(config) + .UseKestrel() + .UseStartup(); + }) .Build(); using (host) { - host.Start(); + await host.StartAsync(); Console.ReadLine(); + await host.StopAsync(); } } } diff --git a/src/Hosting/samples/SampleStartups/StartupConfigureAddresses.cs b/src/Hosting/samples/SampleStartups/StartupConfigureAddresses.cs index 294497bbf7..123fb56e46 100644 --- a/src/Hosting/samples/SampleStartups/StartupConfigureAddresses.cs +++ b/src/Hosting/samples/SampleStartups/StartupConfigureAddresses.cs @@ -1,7 +1,9 @@ +using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; // Note that this sample will not run. It is only here to illustrate usage patterns. @@ -19,18 +21,22 @@ namespace SampleStartups } // Entry point for the application. - public static void Main(string[] args) + public static Task Main(string[] args) { var config = new ConfigurationBuilder().AddCommandLine(args).Build(); - var host = new WebHostBuilder() - .UseConfiguration(config) - .UseKestrel() - .UseStartup() - .UseUrls("http://localhost:5000", "http://localhost:5001") + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseConfiguration(config) + .UseKestrel() + .UseStartup() + .UseUrls("http://localhost:5000", "http://localhost:5001"); + }) .Build(); - host.Run(); + return host.RunAsync(); } } } diff --git a/src/Hosting/samples/SampleStartups/StartupExternallyControlled.cs b/src/Hosting/samples/SampleStartups/StartupExternallyControlled.cs index 296fcc0b0f..8a8523bdb9 100644 --- a/src/Hosting/samples/SampleStartups/StartupExternallyControlled.cs +++ b/src/Hosting/samples/SampleStartups/StartupExternallyControlled.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Hosting; // Note that this sample will not run. It is only here to illustrate usage patterns. @@ -11,7 +12,7 @@ namespace SampleStartups { public class StartupExternallyControlled : StartupBase { - private IWebHost _host; + private IHost _host; private readonly List _urls = new List(); // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. @@ -29,10 +30,15 @@ namespace SampleStartups public void Start() { - _host = new WebHostBuilder() - .UseKestrel() - .UseStartup() - .Start(_urls.ToArray()); + _host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseKestrel() + .UseStartup() + .UseUrls(_urls.ToArray()); + }) + .Start(); } public async Task StopAsync() diff --git a/src/Hosting/samples/SampleStartups/StartupFullControl.cs b/src/Hosting/samples/SampleStartups/StartupFullControl.cs index 81a2605557..035efb5d1d 100644 --- a/src/Hosting/samples/SampleStartups/StartupFullControl.cs +++ b/src/Hosting/samples/SampleStartups/StartupFullControl.cs @@ -1,5 +1,6 @@ using System; using System.IO; +using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; @@ -13,7 +14,7 @@ namespace SampleStartups { public class StartupFullControl { - public static void Main(string[] args) + public static Task Main(string[] args) { var config = new ConfigurationBuilder() .AddEnvironmentVariables(prefix: "ASPNETCORE_") @@ -21,30 +22,34 @@ namespace SampleStartups .AddCommandLine(args) .Build(); - var host = new WebHostBuilder() - .UseConfiguration(config) // Default set of configurations to use, may be subsequently overridden - .UseKestrel() - .UseContentRoot(Directory.GetCurrentDirectory()) // Override the content root with the current directory - .UseUrls("http://*:1000", "https://*:902") - .UseEnvironment(Environments.Development) - .UseWebRoot("public") + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseConfiguration(config) // Default set of configurations to use, may be subsequently overridden + .UseKestrel() + .UseContentRoot(Directory.GetCurrentDirectory()) // Override the content root with the current directory + .UseUrls("http://*:1000", "https://*:902") + .UseEnvironment(Environments.Development) + .UseWebRoot("public") + .Configure(app => + { + // Write the application inline, this won't call any startup class in the assembly + + app.Use(next => context => + { + return next(context); + }); + }); + }) .ConfigureServices(services => { // Configure services that the application can see services.AddSingleton(); }) - .Configure(app => - { - // Write the application inline, this won't call any startup class in the assembly - - app.Use(next => context => - { - return next(context); - }); - }) .Build(); - host.Run(); + return host.RunAsync(); } } diff --git a/src/Hosting/samples/SampleStartups/StartupHelloWorld.cs b/src/Hosting/samples/SampleStartups/StartupHelloWorld.cs index a02513d201..0af69a7bd1 100644 --- a/src/Hosting/samples/SampleStartups/StartupHelloWorld.cs +++ b/src/Hosting/samples/SampleStartups/StartupHelloWorld.cs @@ -1,6 +1,8 @@ +using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Hosting; // Note that this sample will not run. It is only here to illustrate usage patterns. @@ -18,14 +20,18 @@ namespace SampleStartups } // Entry point for the application. - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = new WebHostBuilder() - .UseKestrel() - .UseStartup() + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseKestrel() + .UseStartup(); + }) .Build(); - host.Run(); + return host.RunAsync(); } } } diff --git a/src/Hosting/samples/SampleStartups/StartupInjection.cs b/src/Hosting/samples/SampleStartups/StartupInjection.cs index 163ac165a6..88703a8177 100644 --- a/src/Hosting/samples/SampleStartups/StartupInjection.cs +++ b/src/Hosting/samples/SampleStartups/StartupInjection.cs @@ -1,8 +1,10 @@ using System; +using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; // HostingStartup's in the primary assembly are run automatically. [assembly: HostingStartup(typeof(SampleStartups.StartupInjection))] @@ -17,18 +19,22 @@ namespace SampleStartups } // Entry point for the application. - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = new WebHostBuilder() - .UseKestrel() - // Each of these three sets ApplicationName to the current assembly, which is needed in order to - // scan the assembly for HostingStartupAttributes. - // .UseSetting(WebHostDefaults.ApplicationKey, "SampleStartups") - // .Configure(_ => { }) - .UseStartup() + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseKestrel() + // Each of these three sets ApplicationName to the current assembly, which is needed in order to + // scan the assembly for HostingStartupAttributes. + // .UseSetting(WebHostDefaults.ApplicationKey, "SampleStartups") + // .Configure(_ => { }) + .UseStartup(); + }) .Build(); - host.Run(); + return host.RunAsync(); } } diff --git a/src/Hosting/test/FunctionalTests/LinkedApplicationTests.cs b/src/Hosting/test/FunctionalTests/LinkedApplicationTests.cs new file mode 100644 index 0000000000..7b2de2b17b --- /dev/null +++ b/src/Hosting/test/FunctionalTests/LinkedApplicationTests.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Server.IntegrationTesting; +using Microsoft.AspNetCore.Testing; +using Microsoft.Extensions.Logging; +using Xunit; + +namespace Microsoft.AspNetCore.Hosting.FunctionalTests +{ + public class LinkedApplicationTests : LoggedTest + { + [Fact] + public async Task LinkedApplicationWorks() + { + using (StartLog(out var loggerFactory)) + { + var logger = loggerFactory.CreateLogger("LinkedApplicationWorks"); + + // https://github.com/dotnet/aspnetcore/issues/8247 +#pragma warning disable 0618 + var applicationPath = Path.Combine(TestPathUtilities.GetSolutionRootDirectory("Hosting"), "test", "testassets", + "BasicLinkedApp"); +#pragma warning restore 0618 + + var deploymentParameters = new DeploymentParameters( + applicationPath, + ServerType.Kestrel, + RuntimeFlavor.CoreClr, + RuntimeArchitecture.x64) + { + TargetFramework = Tfm.Net50, + RuntimeArchitecture = RuntimeArchitecture.x64, + ApplicationType = ApplicationType.Standalone, + PublishApplicationBeforeDeployment = true, + RestoreDependencies = true, + PublishTimeout = TimeSpan.FromMinutes(10), // Machines are slow (these tests restore) + StatusMessagesEnabled = false + }; + + using var deployer = new SelfHostDeployer(deploymentParameters, loggerFactory); + + var result = await deployer.DeployAsync(); + + // The app should have started up + Assert.False(deployer.HostProcess.HasExited); + + var response = await RetryHelper.RetryRequest(() => result.HttpClient.GetAsync("/"), logger, retryCount: 10); + var body = await response.Content.ReadAsStringAsync(); + + Assert.Equal("Hello World", body); + } + } + } +} diff --git a/src/Hosting/test/testassets/BasicLinkedApp/BasicLinkedApp.csproj b/src/Hosting/test/testassets/BasicLinkedApp/BasicLinkedApp.csproj new file mode 100644 index 0000000000..baf5d0e7d0 --- /dev/null +++ b/src/Hosting/test/testassets/BasicLinkedApp/BasicLinkedApp.csproj @@ -0,0 +1,31 @@ + + + + $(DefaultNetCoreTargetFramework) + Exe + true + link + + + + + + + + + + + + + + + + + link + + + + + + + diff --git a/src/Hosting/test/testassets/BasicLinkedApp/Linker.xml b/src/Hosting/test/testassets/BasicLinkedApp/Linker.xml new file mode 100644 index 0000000000..f3757db941 --- /dev/null +++ b/src/Hosting/test/testassets/BasicLinkedApp/Linker.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Hosting/test/testassets/BasicLinkedApp/Program.cs b/src/Hosting/test/testassets/BasicLinkedApp/Program.cs new file mode 100644 index 0000000000..d9dd267135 --- /dev/null +++ b/src/Hosting/test/testassets/BasicLinkedApp/Program.cs @@ -0,0 +1,38 @@ +// 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.Hosting; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Configuration; + +namespace BasicLinkedApp +{ + public class Program + { + public static void Main(string[] args) + { + CreateWebHostBuilder(args).Build().Run(); + } + + // Do not change the signature of this method. It's used for tests. + private static IHostBuilder CreateWebHostBuilder(string[] args) + { + return new HostBuilder() + .ConfigureHostConfiguration(config => + { + config.AddCommandLine(args); + }) + .ConfigureLogging(logging => + { + logging.AddConsole(); + }) + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder.UseKestrel().UseStartup(); + }); + } + } +} diff --git a/src/Hosting/test/testassets/BasicLinkedApp/Startup.cs b/src/Hosting/test/testassets/BasicLinkedApp/Startup.cs new file mode 100644 index 0000000000..d899b5352b --- /dev/null +++ b/src/Hosting/test/testassets/BasicLinkedApp/Startup.cs @@ -0,0 +1,29 @@ + +using System; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Http; +using System.Threading.Tasks; + +namespace BasicLinkedApp +{ + public class Startup + { + public void Configure(IApplicationBuilder app) + { + app.UseMiddleware(); + } + } + + public class HelloWorldMiddleware + { + public HelloWorldMiddleware(RequestDelegate next) + { + + } + + public Task InvokeAsync(HttpContext context) + { + return context.Response.WriteAsync("Hello World"); + } + } +} diff --git a/src/Http/Authentication.Abstractions/src/AuthenticateResult.cs b/src/Http/Authentication.Abstractions/src/AuthenticateResult.cs index f801ce5308..f10b5b9392 100644 --- a/src/Http/Authentication.Abstractions/src/AuthenticateResult.cs +++ b/src/Http/Authentication.Abstractions/src/AuthenticateResult.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Diagnostics.CodeAnalysis; using System.Security.Claims; namespace Microsoft.AspNetCore.Authentication @@ -19,6 +20,7 @@ namespace Microsoft.AspNetCore.Authentication /// /// If a ticket was produced, authenticate was successful. /// + [MemberNotNullWhen(true, nameof(Ticket))] public bool Succeeded => Ticket != null; /// diff --git a/src/Http/Authentication.Abstractions/src/AuthenticationHttpContextExtensions.cs b/src/Http/Authentication.Abstractions/src/AuthenticationHttpContextExtensions.cs index 539f1c74f3..e6d56aa4fa 100644 --- a/src/Http/Authentication.Abstractions/src/AuthenticationHttpContextExtensions.cs +++ b/src/Http/Authentication.Abstractions/src/AuthenticationHttpContextExtensions.cs @@ -36,7 +36,7 @@ namespace Microsoft.AspNetCore.Authentication /// The context. /// The name of the authentication scheme. /// The result. - public static Task ChallengeAsync(this HttpContext context, string scheme) => + public static Task ChallengeAsync(this HttpContext context, string? scheme) => context.ChallengeAsync(scheme, properties: null); /// @@ -72,7 +72,7 @@ namespace Microsoft.AspNetCore.Authentication /// The context. /// The name of the authentication scheme. /// The task. - public static Task ForbidAsync(this HttpContext context, string scheme) => + public static Task ForbidAsync(this HttpContext context, string? scheme) => context.ForbidAsync(scheme, properties: null); /// @@ -109,7 +109,7 @@ namespace Microsoft.AspNetCore.Authentication /// The name of the authentication scheme. /// The user. /// The task. - public static Task SignInAsync(this HttpContext context, string scheme, ClaimsPrincipal principal) => + public static Task SignInAsync(this HttpContext context, string? scheme, ClaimsPrincipal principal) => context.SignInAsync(scheme, principal, properties: null); /// diff --git a/src/Http/Authentication.Abstractions/src/AuthenticationTicket.cs b/src/Http/Authentication.Abstractions/src/AuthenticationTicket.cs index 4960060787..e756566855 100644 --- a/src/Http/Authentication.Abstractions/src/AuthenticationTicket.cs +++ b/src/Http/Authentication.Abstractions/src/AuthenticationTicket.cs @@ -17,7 +17,7 @@ namespace Microsoft.AspNetCore.Authentication /// the that represents the authenticated user. /// additional properties that can be consumed by the user or runtime. /// the authentication middleware that was responsible for this ticket. - public AuthenticationTicket(ClaimsPrincipal principal, AuthenticationProperties? properties, string? authenticationScheme) + public AuthenticationTicket(ClaimsPrincipal principal, AuthenticationProperties? properties, string authenticationScheme) { if (principal == null) { @@ -41,17 +41,17 @@ namespace Microsoft.AspNetCore.Authentication /// /// Gets the authentication type. /// - public string? AuthenticationScheme { get; private set; } + public string AuthenticationScheme { get; } /// /// Gets the claims-principal with authenticated user identities. /// - public ClaimsPrincipal Principal { get; private set; } + public ClaimsPrincipal Principal { get; } /// /// Additional state values for the authentication session. /// - public AuthenticationProperties Properties { get; private set; } + public AuthenticationProperties Properties { get; } /// /// Returns a copy of the ticket. diff --git a/src/Http/Http.Abstractions/src/Extensions/UseMiddlewareExtensions.cs b/src/Http/Http.Abstractions/src/Extensions/UseMiddlewareExtensions.cs index f33707e671..164b601d57 100644 --- a/src/Http/Http.Abstractions/src/Extensions/UseMiddlewareExtensions.cs +++ b/src/Http/Http.Abstractions/src/Extensions/UseMiddlewareExtensions.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Linq.Expressions; using System.Reflection; @@ -22,6 +23,9 @@ namespace Microsoft.AspNetCore.Builder private static readonly MethodInfo GetServiceInfo = typeof(UseMiddlewareExtensions).GetMethod(nameof(GetService), BindingFlags.NonPublic | BindingFlags.Static)!; + // We're going to keep all public constructors and public methods on middleware + private const DynamicallyAccessedMemberTypes MiddlewareAccessibility = DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.PublicMethods; + /// /// Adds a middleware type to the application's request pipeline. /// @@ -29,7 +33,7 @@ namespace Microsoft.AspNetCore.Builder /// The instance. /// The arguments to pass to the middleware type instance's constructor. /// The instance. - public static IApplicationBuilder UseMiddleware(this IApplicationBuilder app, params object[] args) + public static IApplicationBuilder UseMiddleware<[DynamicallyAccessedMembers(MiddlewareAccessibility)]TMiddleware>(this IApplicationBuilder app, params object[] args) { return app.UseMiddleware(typeof(TMiddleware), args); } @@ -41,7 +45,7 @@ namespace Microsoft.AspNetCore.Builder /// The middleware type. /// The arguments to pass to the middleware type instance's constructor. /// The instance. - public static IApplicationBuilder UseMiddleware(this IApplicationBuilder app, Type middleware, params object[] args) + public static IApplicationBuilder UseMiddleware(this IApplicationBuilder app, [DynamicallyAccessedMembers(MiddlewareAccessibility)] Type middleware, params object[] args) { if (typeof(IMiddleware).GetTypeInfo().IsAssignableFrom(middleware.GetTypeInfo())) { @@ -110,7 +114,7 @@ namespace Microsoft.AspNetCore.Builder }); } - private static IApplicationBuilder UseMiddlewareInterface(IApplicationBuilder app, Type middlewareType) + private static IApplicationBuilder UseMiddlewareInterface(IApplicationBuilder app, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] Type middlewareType) { return app.Use(next => { diff --git a/src/Http/Http.Abstractions/src/PathString.cs b/src/Http/Http.Abstractions/src/PathString.cs index 79f82ddd1a..48eb14c015 100644 --- a/src/Http/Http.Abstractions/src/PathString.cs +++ b/src/Http/Http.Abstractions/src/PathString.cs @@ -424,7 +424,7 @@ namespace Microsoft.AspNetCore.Http /// The left parameter /// The right parameter /// The ToString combination of both values - public static string operator +(PathString left, string right) + public static string operator +(PathString left, string? right) { // This overload exists to prevent the implicit string<->PathString converter from // trying to call the PathString+PathString operator for things that are not path strings. diff --git a/src/Http/Http.Abstractions/src/Routing/Endpoint.cs b/src/Http/Http.Abstractions/src/Routing/Endpoint.cs index 4733177674..1f795f74ad 100644 --- a/src/Http/Http.Abstractions/src/Routing/Endpoint.cs +++ b/src/Http/Http.Abstractions/src/Routing/Endpoint.cs @@ -20,8 +20,8 @@ namespace Microsoft.AspNetCore.Http /// public Endpoint( RequestDelegate requestDelegate, - EndpointMetadataCollection metadata, - string displayName) + EndpointMetadataCollection? metadata, + string? displayName) { // All are allowed to be null RequestDelegate = requestDelegate; @@ -32,7 +32,7 @@ namespace Microsoft.AspNetCore.Http /// /// Gets the informational display name of this endpoint. /// - public string DisplayName { get; } + public string? DisplayName { get; } /// /// Gets the collection of metadata associated with this endpoint. diff --git a/src/Http/Http.Abstractions/test/HttpResponseWritingExtensionsTests.cs b/src/Http/Http.Abstractions/test/HttpResponseWritingExtensionsTests.cs index ed0c103006..bdbb48375e 100644 --- a/src/Http/Http.Abstractions/test/HttpResponseWritingExtensionsTests.cs +++ b/src/Http/Http.Abstractions/test/HttpResponseWritingExtensionsTests.cs @@ -80,9 +80,9 @@ namespace Microsoft.AspNetCore.Http { Encoding.BigEndianUnicode }, { Encoding.Unicode }, { Encoding.UTF32 }, -#pragma warning disable CS0618, MSLIB0001 // Type or member is obsolete +#pragma warning disable CS0618, SYSLIB0001 // Type or member is obsolete { Encoding.UTF7 }, -#pragma warning restore CS0618, MSLIB0001 // Type or member is obsolete +#pragma warning restore CS0618, SYSLIB0001 // Type or member is obsolete { Encoding.UTF8 } }; diff --git a/src/Http/Http/src/Features/FormFeature.cs b/src/Http/Http/src/Features/FormFeature.cs index d7f1888139..8b4d06896c 100644 --- a/src/Http/Http/src/Features/FormFeature.cs +++ b/src/Http/Http/src/Features/FormFeature.cs @@ -276,9 +276,9 @@ namespace Microsoft.AspNetCore.Http.Features private static Encoding FilterEncoding(Encoding? encoding) { // UTF-7 is insecure and should not be honored. UTF-8 will succeed for most cases. -#pragma warning disable CS0618, MSLIB0001 // Type or member is obsolete +#pragma warning disable CS0618, SYSLIB0001 // Type or member is obsolete if (encoding == null || Encoding.UTF7.Equals(encoding)) -#pragma warning restore CS0618, MSLIB0001 // Type or member is obsolete +#pragma warning restore CS0618, SYSLIB0001 // Type or member is obsolete { return Encoding.UTF8; } diff --git a/src/Http/Http/src/Features/ResponseCookiesFeature.cs b/src/Http/Http/src/Features/ResponseCookiesFeature.cs index f7a6f2d401..7e3cabb28e 100644 --- a/src/Http/Http/src/Features/ResponseCookiesFeature.cs +++ b/src/Http/Http/src/Features/ResponseCookiesFeature.cs @@ -26,8 +26,13 @@ namespace Microsoft.AspNetCore.Http.Features /// and the . /// public ResponseCookiesFeature(IFeatureCollection features) - : this(features, builderPool: null) { + if (features == null) + { + throw new ArgumentNullException(nameof(features)); + } + + _features.Initalize(features); } /// @@ -38,6 +43,7 @@ namespace Microsoft.AspNetCore.Http.Features /// and the . /// /// The , if available. + [Obsolete("This constructor is obsolete and will be removed in a future version.")] public ResponseCookiesFeature(IFeatureCollection features, ObjectPool? builderPool) { if (features == null) diff --git a/src/Http/Http/src/StreamResponseBodyFeature.cs b/src/Http/Http/src/StreamResponseBodyFeature.cs index 1152761e6e..717b5c08d2 100644 --- a/src/Http/Http/src/StreamResponseBodyFeature.cs +++ b/src/Http/Http/src/StreamResponseBodyFeature.cs @@ -111,7 +111,7 @@ namespace Microsoft.AspNetCore.Http } /// - /// This calls StartAsync if it has not previoulsy been called. + /// This calls StartAsync if it has not previously been called. /// It will complete the adapted pipe if it exists. /// /// @@ -128,6 +128,11 @@ namespace Microsoft.AspNetCore.Http return; } + if (!_started) + { + await StartAsync(); + } + _completed = true; if (_pipeWriter != null) diff --git a/src/Http/Http/test/Features/StreamResponseBodyFeatureTests.cs b/src/Http/Http/test/Features/StreamResponseBodyFeatureTests.cs new file mode 100644 index 0000000000..a7624e0969 --- /dev/null +++ b/src/Http/Http/test/Features/StreamResponseBodyFeatureTests.cs @@ -0,0 +1,62 @@ +// 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.Buffers; +using System.IO; +using System.IO.Pipelines; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Xunit; + +namespace Microsoft.AspNetCore.Http.Features +{ + public class StreamResponseBodyFeatureTests + { + [Fact] + public async Task CompleteAsyncCallsStartAsync() + { + // Arrange + var stream = new MemoryStream(); + var streamResponseBodyFeature = new TestStreamResponseBodyFeature(stream); + + // Act + await streamResponseBodyFeature.CompleteAsync(); + + //Assert + Assert.Equal(1, streamResponseBodyFeature.StartCalled); + } + + [Fact] + public async Task CompleteAsyncWontCallsStartAsyncIfAlreadyStarted() + { + // Arrange + var stream = new MemoryStream(); + var streamResponseBodyFeature = new TestStreamResponseBodyFeature(stream); + await streamResponseBodyFeature.StartAsync(); + + // Act + await streamResponseBodyFeature.CompleteAsync(); + + //Assert + Assert.Equal(1, streamResponseBodyFeature.StartCalled); + } + } + + public class TestStreamResponseBodyFeature : StreamResponseBodyFeature + { + public TestStreamResponseBodyFeature(Stream stream) + : base(stream) + { + + } + + public override Task StartAsync(CancellationToken cancellationToken = default) + { + StartCalled++; + return base.StartAsync(cancellationToken); + } + + public int StartCalled { get; private set; } + } +} diff --git a/src/Http/Routing.Abstractions/src/IRouteConstraint.cs b/src/Http/Routing.Abstractions/src/IRouteConstraint.cs index 076706dcd9..37ea18c672 100644 --- a/src/Http/Routing.Abstractions/src/IRouteConstraint.cs +++ b/src/Http/Routing.Abstractions/src/IRouteConstraint.cs @@ -25,7 +25,7 @@ namespace Microsoft.AspNetCore.Routing /// true if the URL parameter contains a valid value; otherwise, false. bool Match( HttpContext? httpContext, - IRouter route, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection); diff --git a/src/Http/Routing/src/ArrayBuilder.cs b/src/Http/Routing/src/ArrayBuilder.cs index ff20c2e64d..ede0f990b6 100644 --- a/src/Http/Routing/src/ArrayBuilder.cs +++ b/src/Http/Routing/src/ArrayBuilder.cs @@ -6,6 +6,7 @@ // // See https://github.com/dotnet/corefx/blob/143df51926f2ad397fef9c9ca7ede88e2721e801/src/Common/src/System/Collections/Generic/ArrayBuilder.cs +#nullable disable using System; using System.Diagnostics; diff --git a/src/Http/Routing/src/Builder/EndpointRoutingApplicationBuilderExtensions.cs b/src/Http/Routing/src/Builder/EndpointRoutingApplicationBuilderExtensions.cs index d1d3617210..dbc3432107 100644 --- a/src/Http/Routing/src/Builder/EndpointRoutingApplicationBuilderExtensions.cs +++ b/src/Http/Routing/src/Builder/EndpointRoutingApplicationBuilderExtensions.cs @@ -128,7 +128,7 @@ namespace Microsoft.AspNetCore.Builder } // If someone messes with this, just let it crash. - endpointRouteBuilder = (DefaultEndpointRouteBuilder)obj; + endpointRouteBuilder = (DefaultEndpointRouteBuilder)obj!; // This check handles the case where Map or something else that forks the pipeline is called between the two // routing middleware. diff --git a/src/Http/Routing/src/CompositeEndpointDataSource.cs b/src/Http/Routing/src/CompositeEndpointDataSource.cs index 008ad09a9c..9d0a97c832 100644 --- a/src/Http/Routing/src/CompositeEndpointDataSource.cs +++ b/src/Http/Routing/src/CompositeEndpointDataSource.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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; @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Collections.Specialized; using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Text; using System.Threading; @@ -21,8 +22,8 @@ namespace Microsoft.AspNetCore.Routing public sealed class CompositeEndpointDataSource : EndpointDataSource { private readonly object _lock; - private readonly ICollection _dataSources; - private IReadOnlyList _endpoints; + private readonly ICollection _dataSources = default!; + private IReadOnlyList _endpoints = default!; private IChangeToken _consumerChangeToken; private CancellationTokenSource _cts; @@ -49,7 +50,7 @@ namespace Microsoft.AspNetCore.Routing } } - private void OnDataSourcesChanged(object sender, NotifyCollectionChangedEventArgs e) + private void OnDataSourcesChanged(object? sender, NotifyCollectionChangedEventArgs e) { lock (_lock) { @@ -140,6 +141,7 @@ namespace Microsoft.AspNetCore.Routing } } + [MemberNotNull(nameof(_cts), nameof(_consumerChangeToken))] private void CreateChangeToken() { _cts = new CancellationTokenSource(); @@ -198,7 +200,7 @@ namespace Microsoft.AspNetCore.Routing } return sb.ToString(); - IEnumerable FormatValues(IEnumerable> values) + IEnumerable FormatValues(IEnumerable> values) { return values.Select( kvp => diff --git a/src/Http/Routing/src/Constraints/BoolRouteConstraint.cs b/src/Http/Routing/src/Constraints/BoolRouteConstraint.cs index d19000f9de..26a37c2e80 100644 --- a/src/Http/Routing/src/Constraints/BoolRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/BoolRouteConstraint.cs @@ -14,8 +14,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints { /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -44,4 +44,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/CompositeRouteConstraint.cs b/src/Http/Routing/src/Constraints/CompositeRouteConstraint.cs index 468699ce8a..023a32eae8 100644 --- a/src/Http/Routing/src/Constraints/CompositeRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/CompositeRouteConstraint.cs @@ -33,8 +33,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -60,4 +60,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return true; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/DateTimeRouteConstraint.cs b/src/Http/Routing/src/Constraints/DateTimeRouteConstraint.cs index a912a84f52..2d7fdd1bc2 100644 --- a/src/Http/Routing/src/Constraints/DateTimeRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/DateTimeRouteConstraint.cs @@ -20,8 +20,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints { /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -50,4 +50,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/DecimalRouteConstraint.cs b/src/Http/Routing/src/Constraints/DecimalRouteConstraint.cs index 9fcc80a9f1..b08d13d515 100644 --- a/src/Http/Routing/src/Constraints/DecimalRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/DecimalRouteConstraint.cs @@ -14,8 +14,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints { /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -44,4 +44,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/DoubleRouteConstraint.cs b/src/Http/Routing/src/Constraints/DoubleRouteConstraint.cs index 405e46cb0d..e3c351d3e8 100644 --- a/src/Http/Routing/src/Constraints/DoubleRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/DoubleRouteConstraint.cs @@ -14,8 +14,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints { /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -48,4 +48,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/FileNameRouteConstraint.cs b/src/Http/Routing/src/Constraints/FileNameRouteConstraint.cs index 50d85eb86f..0051ef3fb1 100644 --- a/src/Http/Routing/src/Constraints/FileNameRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/FileNameRouteConstraint.cs @@ -85,8 +85,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints { /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) diff --git a/src/Http/Routing/src/Constraints/FloatRouteConstraint.cs b/src/Http/Routing/src/Constraints/FloatRouteConstraint.cs index fbdd3c87d6..5108da1bcb 100644 --- a/src/Http/Routing/src/Constraints/FloatRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/FloatRouteConstraint.cs @@ -14,8 +14,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints { /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -48,4 +48,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/GuidRouteConstraint.cs b/src/Http/Routing/src/Constraints/GuidRouteConstraint.cs index b87069df98..101621c068 100644 --- a/src/Http/Routing/src/Constraints/GuidRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/GuidRouteConstraint.cs @@ -16,8 +16,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints { /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -46,4 +46,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/HttpMethodRouteConstraint.cs b/src/Http/Routing/src/Constraints/HttpMethodRouteConstraint.cs index ea20e81419..b2ad0eff33 100644 --- a/src/Http/Routing/src/Constraints/HttpMethodRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/HttpMethodRouteConstraint.cs @@ -35,8 +35,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints /// public virtual bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) diff --git a/src/Http/Routing/src/Constraints/IntRouteConstraint.cs b/src/Http/Routing/src/Constraints/IntRouteConstraint.cs index 34ff02331e..6190180858 100644 --- a/src/Http/Routing/src/Constraints/IntRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/IntRouteConstraint.cs @@ -14,8 +14,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints { /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -44,4 +44,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/LengthRouteConstraint.cs b/src/Http/Routing/src/Constraints/LengthRouteConstraint.cs index 8964f2549e..52fecb9d42 100644 --- a/src/Http/Routing/src/Constraints/LengthRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/LengthRouteConstraint.cs @@ -71,8 +71,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -89,7 +89,7 @@ namespace Microsoft.AspNetCore.Routing.Constraints if (values.TryGetValue(routeKey, out var value) && value != null) { - var valueString = Convert.ToString(value, CultureInfo.InvariantCulture); + var valueString = Convert.ToString(value, CultureInfo.InvariantCulture)!; var length = valueString.Length; return length >= MinLength && length <= MaxLength; } @@ -97,4 +97,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/LongRouteConstraint.cs b/src/Http/Routing/src/Constraints/LongRouteConstraint.cs index 8ed5cccc46..493be38eb1 100644 --- a/src/Http/Routing/src/Constraints/LongRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/LongRouteConstraint.cs @@ -14,8 +14,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints { /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -44,4 +44,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/MaxLengthRouteConstraint.cs b/src/Http/Routing/src/Constraints/MaxLengthRouteConstraint.cs index 4005a041aa..470f9110d8 100644 --- a/src/Http/Routing/src/Constraints/MaxLengthRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/MaxLengthRouteConstraint.cs @@ -34,8 +34,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -52,11 +52,11 @@ namespace Microsoft.AspNetCore.Routing.Constraints if (values.TryGetValue(routeKey, out var value) && value != null) { - var valueString = Convert.ToString(value, CultureInfo.InvariantCulture); + var valueString = Convert.ToString(value, CultureInfo.InvariantCulture)!; return valueString.Length <= MaxLength; } return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/MaxRouteConstraint.cs b/src/Http/Routing/src/Constraints/MaxRouteConstraint.cs index dab22f5075..c7d5e91dfe 100644 --- a/src/Http/Routing/src/Constraints/MaxRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/MaxRouteConstraint.cs @@ -28,8 +28,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -56,4 +56,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/MinLengthRouteConstraint.cs b/src/Http/Routing/src/Constraints/MinLengthRouteConstraint.cs index c58bd0b30d..9c7b54704b 100644 --- a/src/Http/Routing/src/Constraints/MinLengthRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/MinLengthRouteConstraint.cs @@ -34,8 +34,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -52,11 +52,11 @@ namespace Microsoft.AspNetCore.Routing.Constraints if (values.TryGetValue(routeKey, out var value) && value != null) { - var valueString = Convert.ToString(value, CultureInfo.InvariantCulture); + var valueString = Convert.ToString(value, CultureInfo.InvariantCulture)!; return valueString.Length >= MinLength; } return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/MinRouteConstraint.cs b/src/Http/Routing/src/Constraints/MinRouteConstraint.cs index 450ed46fbf..ef504f446d 100644 --- a/src/Http/Routing/src/Constraints/MinRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/MinRouteConstraint.cs @@ -28,8 +28,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -56,4 +56,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/NonFileNameRouteConstraint.cs b/src/Http/Routing/src/Constraints/NonFileNameRouteConstraint.cs index c6867b6e05..9d58423b9a 100644 --- a/src/Http/Routing/src/Constraints/NonFileNameRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/NonFileNameRouteConstraint.cs @@ -81,8 +81,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints { /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) diff --git a/src/Http/Routing/src/Constraints/NullRouteConstraint.cs b/src/Http/Routing/src/Constraints/NullRouteConstraint.cs index f61e740419..7accfcb166 100644 --- a/src/Http/Routing/src/Constraints/NullRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/NullRouteConstraint.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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; @@ -13,7 +13,7 @@ namespace Microsoft.AspNetCore.Routing.Constraints { } - public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) + public bool Match(HttpContext? httpContext, IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) { return true; } diff --git a/src/Http/Routing/src/Constraints/OptionalRouteConstraint.cs b/src/Http/Routing/src/Constraints/OptionalRouteConstraint.cs index 6b7cf8a1a5..f66bdd67de 100644 --- a/src/Http/Routing/src/Constraints/OptionalRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/OptionalRouteConstraint.cs @@ -24,8 +24,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints public IRouteConstraint InnerConstraint { get; } public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -52,4 +52,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return true; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/RangeRouteConstraint.cs b/src/Http/Routing/src/Constraints/RangeRouteConstraint.cs index 34c946fa66..3e7dde78cb 100644 --- a/src/Http/Routing/src/Constraints/RangeRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/RangeRouteConstraint.cs @@ -42,8 +42,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -70,4 +70,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/RegexRouteConstraint.cs b/src/Http/Routing/src/Constraints/RegexRouteConstraint.cs index 9269de51a3..4d17f5d7ea 100644 --- a/src/Http/Routing/src/Constraints/RegexRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/RegexRouteConstraint.cs @@ -38,8 +38,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints public Regex Constraint { get; private set; } public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -57,7 +57,7 @@ namespace Microsoft.AspNetCore.Routing.Constraints if (values.TryGetValue(routeKey, out var routeValue) && routeValue != null) { - var parameterValueString = Convert.ToString(routeValue, CultureInfo.InvariantCulture); + var parameterValueString = Convert.ToString(routeValue, CultureInfo.InvariantCulture)!; return Constraint.IsMatch(parameterValueString); } diff --git a/src/Http/Routing/src/Constraints/RequiredRouteConstraint.cs b/src/Http/Routing/src/Constraints/RequiredRouteConstraint.cs index e33e1e23a6..71b594a07b 100644 --- a/src/Http/Routing/src/Constraints/RequiredRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/RequiredRouteConstraint.cs @@ -18,8 +18,8 @@ namespace Microsoft.AspNetCore.Routing.Constraints { /// public bool Match( - HttpContext httpContext, - IRouter route, + HttpContext? httpContext, + IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) @@ -44,4 +44,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Constraints/StringRouteConstraint.cs b/src/Http/Routing/src/Constraints/StringRouteConstraint.cs index fb6a3568c3..737cf22812 100644 --- a/src/Http/Routing/src/Constraints/StringRouteConstraint.cs +++ b/src/Http/Routing/src/Constraints/StringRouteConstraint.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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; @@ -29,7 +29,7 @@ namespace Microsoft.AspNetCore.Routing.Constraints } /// - public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) + public bool Match(HttpContext? httpContext, IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) { if (routeKey == null) { @@ -44,7 +44,7 @@ namespace Microsoft.AspNetCore.Routing.Constraints if (values.TryGetValue(routeKey, out var routeValue) && routeValue != null) { - var parameterValueString = Convert.ToString(routeValue, CultureInfo.InvariantCulture); + var parameterValueString = Convert.ToString(routeValue, CultureInfo.InvariantCulture)!; return parameterValueString.Equals(_value, StringComparison.OrdinalIgnoreCase); } @@ -52,4 +52,4 @@ namespace Microsoft.AspNetCore.Routing.Constraints return false; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/DataSourceDependentCache.cs b/src/Http/Routing/src/DataSourceDependentCache.cs index f31807e171..53b8572694 100644 --- a/src/Http/Routing/src/DataSourceDependentCache.cs +++ b/src/Http/Routing/src/DataSourceDependentCache.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System; using System.Collections.Generic; using System.Threading; diff --git a/src/Http/Routing/src/DecisionTree/DecisionCriterion.cs b/src/Http/Routing/src/DecisionTree/DecisionCriterion.cs index efc9c742d2..ce8ec11498 100644 --- a/src/Http/Routing/src/DecisionTree/DecisionCriterion.cs +++ b/src/Http/Routing/src/DecisionTree/DecisionCriterion.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System.Collections.Generic; namespace Microsoft.AspNetCore.Routing.DecisionTree @@ -11,4 +13,4 @@ namespace Microsoft.AspNetCore.Routing.DecisionTree public Dictionary> Branches { get; set; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/DecisionTree/DecisionTreeNode.cs b/src/Http/Routing/src/DecisionTree/DecisionTreeNode.cs index 1be3064c62..df28097786 100644 --- a/src/Http/Routing/src/DecisionTree/DecisionTreeNode.cs +++ b/src/Http/Routing/src/DecisionTree/DecisionTreeNode.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System.Collections.Generic; namespace Microsoft.AspNetCore.Routing.DecisionTree @@ -17,4 +19,4 @@ namespace Microsoft.AspNetCore.Routing.DecisionTree // matching the input data. public IList> Criteria { get; set; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/DecisionTree/ItemDescriptor.cs b/src/Http/Routing/src/DecisionTree/ItemDescriptor.cs index 84a6279c27..e5146f98c4 100644 --- a/src/Http/Routing/src/DecisionTree/ItemDescriptor.cs +++ b/src/Http/Routing/src/DecisionTree/ItemDescriptor.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System.Collections.Generic; namespace Microsoft.AspNetCore.Routing.DecisionTree @@ -13,4 +15,4 @@ namespace Microsoft.AspNetCore.Routing.DecisionTree public TItem Item { get; set; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/DefaultLinkGenerator.cs b/src/Http/Routing/src/DefaultLinkGenerator.cs index 2dda332858..e080aaec50 100644 --- a/src/Http/Routing/src/DefaultLinkGenerator.cs +++ b/src/Http/Routing/src/DefaultLinkGenerator.cs @@ -325,7 +325,7 @@ namespace Microsoft.AspNetCore.Routing } // Also called from DefaultLinkGenerationTemplate - public static RouteValueDictionary? GetAmbientValues(HttpContext httpContext) + public static RouteValueDictionary? GetAmbientValues(HttpContext? httpContext) { return httpContext?.Features.Get()?.RouteValues; } diff --git a/src/Http/Routing/src/DefaultLinkParser.cs b/src/Http/Routing/src/DefaultLinkParser.cs index 8c922e2668..07aaacbb03 100644 --- a/src/Http/Routing/src/DefaultLinkParser.cs +++ b/src/Http/Routing/src/DefaultLinkParser.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; @@ -46,7 +47,7 @@ namespace Microsoft.AspNetCore.Routing _createMatcher = CreateRoutePatternMatcher; } - public override RouteValueDictionary ParsePathByAddress(TAddress address, PathString path) + public override RouteValueDictionary? ParsePathByAddress(TAddress address, PathString path) { var endpoints = GetEndpoints(address); if (endpoints.Count == 0) @@ -117,7 +118,7 @@ namespace Microsoft.AspNetCore.Routing internal MatcherState GetMatcherState(RouteEndpoint endpoint) => _matcherCache.EnsureInitialized().GetOrAdd(endpoint, _createMatcher); // Internal for testing - internal bool TryParse(RouteEndpoint endpoint, PathString path, out RouteValueDictionary values) + internal bool TryParse(RouteEndpoint endpoint, PathString path, [NotNullWhen(true)] out RouteValueDictionary? values) { var (matcher, constraints) = GetMatcherState(endpoint); @@ -168,6 +169,7 @@ namespace Microsoft.AspNetCore.Routing } } +#nullable disable private static class Log { public static class EventIds diff --git a/src/Http/Routing/src/DefaultParameterPolicyFactory.cs b/src/Http/Routing/src/DefaultParameterPolicyFactory.cs index 1982d75518..059c4bb31c 100644 --- a/src/Http/Routing/src/DefaultParameterPolicyFactory.cs +++ b/src/Http/Routing/src/DefaultParameterPolicyFactory.cs @@ -21,7 +21,7 @@ namespace Microsoft.AspNetCore.Routing _serviceProvider = serviceProvider; } - public override IParameterPolicy Create(RoutePatternParameterPart parameter, IParameterPolicy parameterPolicy) + public override IParameterPolicy Create(RoutePatternParameterPart? parameter, IParameterPolicy parameterPolicy) { if (parameterPolicy == null) { @@ -36,7 +36,7 @@ namespace Microsoft.AspNetCore.Routing return parameterPolicy; } - public override IParameterPolicy Create(RoutePatternParameterPart parameter, string inlineText) + public override IParameterPolicy Create(RoutePatternParameterPart? parameter, string inlineText) { if (inlineText == null) { diff --git a/src/Http/Routing/src/EndpointMiddleware.cs b/src/Http/Routing/src/EndpointMiddleware.cs index 0e11e560b7..f5c2b0912f 100644 --- a/src/Http/Routing/src/EndpointMiddleware.cs +++ b/src/Http/Routing/src/EndpointMiddleware.cs @@ -101,6 +101,7 @@ namespace Microsoft.AspNetCore.Routing "Configure your application startup by adding app.UseCors() inside the call to Configure(..) in the application startup code. The call to app.UseCors() must appear between app.UseRouting() and app.UseEndpoints(...)."); } +#nullable disable private static class Log { private static readonly Action _executingEndpoint = LoggerMessage.Define( diff --git a/src/Http/Routing/src/EndpointNameAddressScheme.cs b/src/Http/Routing/src/EndpointNameAddressScheme.cs index 9d2753cf52..24799d2d39 100644 --- a/src/Http/Routing/src/EndpointNameAddressScheme.cs +++ b/src/Http/Routing/src/EndpointNameAddressScheme.cs @@ -92,7 +92,7 @@ namespace Microsoft.AspNetCore.Routing throw new InvalidOperationException(builder.ToString()); - string GetEndpointName(Endpoint endpoint) + string? GetEndpointName(Endpoint endpoint) { if (endpoint.Metadata.GetMetadata()?.SuppressLinkGeneration == true) { diff --git a/src/Http/Routing/src/EndpointRoutingMiddleware.cs b/src/Http/Routing/src/EndpointRoutingMiddleware.cs index 482e86bb6d..82c841941c 100644 --- a/src/Http/Routing/src/EndpointRoutingMiddleware.cs +++ b/src/Http/Routing/src/EndpointRoutingMiddleware.cs @@ -22,7 +22,7 @@ namespace Microsoft.AspNetCore.Routing private readonly DiagnosticListener _diagnosticListener; private readonly RequestDelegate _next; - private Task _initializationTask; + private Task? _initializationTask; public EndpointRoutingMiddleware( MatcherFactory matcherFactory, @@ -165,6 +165,7 @@ namespace Microsoft.AspNetCore.Routing } } +#nullable disable private static class Log { private static readonly Action _matchSuccess = LoggerMessage.Define( diff --git a/src/Http/Routing/src/InlineRouteParameterParser.cs b/src/Http/Routing/src/InlineRouteParameterParser.cs index 33c70558f2..49dd434d37 100644 --- a/src/Http/Routing/src/InlineRouteParameterParser.cs +++ b/src/Http/Routing/src/InlineRouteParameterParser.cs @@ -75,7 +75,7 @@ namespace Microsoft.AspNetCore.Routing var parseResults = ParseConstraints(routeParameter, currentIndex, endIndex); currentIndex = parseResults.CurrentIndex; - string defaultValue = null; + string? defaultValue = null; if (currentIndex <= endIndex && routeParameter[currentIndex] == '=') { diff --git a/src/Http/Routing/src/LinkGeneratorEndpointNameAddressExtensions.cs b/src/Http/Routing/src/LinkGeneratorEndpointNameAddressExtensions.cs index dd0e462c20..bc6ca2fc24 100644 --- a/src/Http/Routing/src/LinkGeneratorEndpointNameAddressExtensions.cs +++ b/src/Http/Routing/src/LinkGeneratorEndpointNameAddressExtensions.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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; @@ -27,14 +27,14 @@ namespace Microsoft.AspNetCore.Routing /// names from RouteOptions. /// /// A URI with an absolute path, or null. - public static string GetPathByName( + public static string? GetPathByName( this LinkGenerator generator, HttpContext httpContext, string endpointName, - object values, + object? values, PathString? pathBase = default, FragmentString fragment = default, - LinkOptions options = default) + LinkOptions? options = default) { if (generator == null) { @@ -74,13 +74,13 @@ namespace Microsoft.AspNetCore.Routing /// names from RouteOptions. /// /// A URI with an absolute path, or null. - public static string GetPathByName( + public static string? GetPathByName( this LinkGenerator generator, string endpointName, - object values, + object? values, PathString pathBase = default, FragmentString fragment = default, - LinkOptions options = default) + LinkOptions? options = default) { if (generator == null) { @@ -126,16 +126,16 @@ namespace Microsoft.AspNetCore.Routing /// your deployment environment. /// /// - public static string GetUriByName( + public static string? GetUriByName( this LinkGenerator generator, HttpContext httpContext, string endpointName, - object values, - string scheme = default, + object? values, + string? scheme = default, HostString? host = default, PathString? pathBase = default, FragmentString fragment = default, - LinkOptions options = default) + LinkOptions? options = default) { if (generator == null) { @@ -190,15 +190,15 @@ namespace Microsoft.AspNetCore.Routing /// your deployment environment. /// /// - public static string GetUriByName( + public static string? GetUriByName( this LinkGenerator generator, string endpointName, - object values, + object? values, string scheme, HostString host, PathString pathBase = default, FragmentString fragment = default, - LinkOptions options = default) + LinkOptions? options = default) { if (generator == null) { diff --git a/src/Http/Routing/src/LinkGeneratorRouteValuesAddressExtensions.cs b/src/Http/Routing/src/LinkGeneratorRouteValuesAddressExtensions.cs index f683b4d3ca..ddf4bb9e91 100644 --- a/src/Http/Routing/src/LinkGeneratorRouteValuesAddressExtensions.cs +++ b/src/Http/Routing/src/LinkGeneratorRouteValuesAddressExtensions.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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; @@ -27,14 +27,14 @@ namespace Microsoft.AspNetCore.Routing /// names from RouteOptions. /// /// A URI with an absolute path, or null. - public static string GetPathByRouteValues( + public static string? GetPathByRouteValues( this LinkGenerator generator, HttpContext httpContext, - string routeName, - object values, + string? routeName, + object? values, PathString? pathBase = default, FragmentString fragment = default, - LinkOptions options = default) + LinkOptions? options = default) { if (generator == null) { @@ -70,13 +70,13 @@ namespace Microsoft.AspNetCore.Routing /// names from RouteOptions. /// /// A URI with an absolute path, or null. - public static string GetPathByRouteValues( + public static string? GetPathByRouteValues( this LinkGenerator generator, - string routeName, - object values, + string? routeName, + object? values, PathString pathBase = default, FragmentString fragment = default, - LinkOptions options = default) + LinkOptions? options = default) { if (generator == null) { @@ -118,16 +118,16 @@ namespace Microsoft.AspNetCore.Routing /// your deployment environment. /// /// - public static string GetUriByRouteValues( + public static string? GetUriByRouteValues( this LinkGenerator generator, HttpContext httpContext, - string routeName, - object values, - string scheme = default, + string? routeName, + object? values, + string? scheme = default, HostString? host = default, PathString? pathBase = default, FragmentString fragment = default, - LinkOptions options = default) + LinkOptions? options = default) { if (generator == null) { @@ -178,15 +178,15 @@ namespace Microsoft.AspNetCore.Routing /// your deployment environment. /// /// - public static string GetUriByRouteValues( + public static string? GetUriByRouteValues( this LinkGenerator generator, - string routeName, - object values, + string? routeName, + object? values, string scheme, HostString host, PathString pathBase = default, FragmentString fragment = default, - LinkOptions options = default) + LinkOptions? options = default) { if (generator == null) { @@ -197,7 +197,7 @@ namespace Microsoft.AspNetCore.Routing return generator.GetUriByAddress(address, address.ExplicitValues, scheme, host, pathBase, fragment, options); } - private static RouteValuesAddress CreateAddress(HttpContext httpContext, string routeName, object values) + private static RouteValuesAddress CreateAddress(HttpContext? httpContext, string? routeName, object? values) { return new RouteValuesAddress() { diff --git a/src/Http/Routing/src/LinkParser.cs b/src/Http/Routing/src/LinkParser.cs index b5135b3f01..88ed8c8131 100644 --- a/src/Http/Routing/src/LinkParser.cs +++ b/src/Http/Routing/src/LinkParser.cs @@ -32,6 +32,6 @@ namespace Microsoft.AspNetCore.Routing /// of the route patterns match the provided URI path. /// /// - public abstract RouteValueDictionary ParsePathByAddress(TAddress address, PathString path); + public abstract RouteValueDictionary? ParsePathByAddress(TAddress address, PathString path); } } diff --git a/src/Http/Routing/src/LinkParserEndpointNameAddressExtensions.cs b/src/Http/Routing/src/LinkParserEndpointNameAddressExtensions.cs index 904dc0b885..2217a8eb45 100644 --- a/src/Http/Routing/src/LinkParserEndpointNameAddressExtensions.cs +++ b/src/Http/Routing/src/LinkParserEndpointNameAddressExtensions.cs @@ -33,7 +33,7 @@ namespace Microsoft.AspNetCore.Routing /// of the route patterns match the provided URI path. /// /// - public static RouteValueDictionary ParsePathByEndpointName( + public static RouteValueDictionary? ParsePathByEndpointName( this LinkParser parser, string endpointName, PathString path) diff --git a/src/Http/Routing/src/Logging/RouteConstraintMatcherExtensions.cs b/src/Http/Routing/src/Logging/RouteConstraintMatcherExtensions.cs index afa7337e75..9415831bdc 100644 --- a/src/Http/Routing/src/Logging/RouteConstraintMatcherExtensions.cs +++ b/src/Http/Routing/src/Logging/RouteConstraintMatcherExtensions.cs @@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Routing.Logging { internal static class RouteConstraintMatcherExtensions { - private static readonly Action _constraintNotMatched; + private static readonly Action _constraintNotMatched; static RouteConstraintMatcherExtensions() { diff --git a/src/Http/Routing/src/Logging/RouterMiddlewareLoggerExtensions.cs b/src/Http/Routing/src/Logging/RouterMiddlewareLoggerExtensions.cs index cdbd644775..76f569c150 100644 --- a/src/Http/Routing/src/Logging/RouterMiddlewareLoggerExtensions.cs +++ b/src/Http/Routing/src/Logging/RouterMiddlewareLoggerExtensions.cs @@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Routing.Logging { internal static class RouterMiddlewareLoggerExtensions { - private static readonly Action _requestNotMatched; + private static readonly Action _requestNotMatched; static RouterMiddlewareLoggerExtensions() { diff --git a/src/Http/Routing/src/Logging/TreeRouterLoggerExtensions.cs b/src/Http/Routing/src/Logging/TreeRouterLoggerExtensions.cs index e6733263f9..bcb0f343a7 100644 --- a/src/Http/Routing/src/Logging/TreeRouterLoggerExtensions.cs +++ b/src/Http/Routing/src/Logging/TreeRouterLoggerExtensions.cs @@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Routing.Logging { internal static class TreeRouterLoggerExtensions { - private static readonly Action _requestMatchedRoute; + private static readonly Action _requestMatchedRoute; static TreeRouterLoggerExtensions() { diff --git a/src/Http/Routing/src/MapRouteRouteBuilderExtensions.cs b/src/Http/Routing/src/MapRouteRouteBuilderExtensions.cs index 23f4536b9b..56f91c4050 100644 --- a/src/Http/Routing/src/MapRouteRouteBuilderExtensions.cs +++ b/src/Http/Routing/src/MapRouteRouteBuilderExtensions.cs @@ -154,7 +154,7 @@ namespace Microsoft.AspNetCore.Builder return routeConstraint; } - var parameterPolicy = _parameterPolicyFactory.Create(null, inlineConstraint); + var parameterPolicy = _parameterPolicyFactory.Create(null!, inlineConstraint); if (parameterPolicy != null) { // Logic inside Route will skip adding NullRouteConstraint diff --git a/src/Http/Routing/src/Matching/CandidateSet.cs b/src/Http/Routing/src/Matching/CandidateSet.cs index f90183897d..0d07dc5940 100644 --- a/src/Http/Routing/src/Matching/CandidateSet.cs +++ b/src/Http/Routing/src/Matching/CandidateSet.cs @@ -7,6 +7,7 @@ using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Runtime.CompilerServices; using Microsoft.AspNetCore.Http; @@ -176,15 +177,17 @@ namespace Microsoft.AspNetCore.Routing.Matching /// The to replace the original at /// the . /// - public void ReplaceEndpoint(int index, Endpoint endpoint, RouteValueDictionary values) + public void ReplaceEndpoint(int index, Endpoint? endpoint, RouteValueDictionary? values) { // Friendliness for inlining if ((uint)index >= Count) { ThrowIndexArgumentOutOfRangeException(); } - - Candidates[index] = new CandidateState(endpoint, values, Candidates[index].Score); + + // CandidateState allows a null-valued endpoint. However a validate candidate should never have a null endpoint + // We'll make lives easier for matcher policies by declaring it as non-null. + Candidates[index] = new CandidateState(endpoint!, values, Candidates[index].Score); if (endpoint == null) { @@ -354,7 +357,7 @@ namespace Microsoft.AspNetCore.Routing.Matching { if (GetOriginalScore(i) == score) { - duplicates.Add(candidates[i].Endpoint); + duplicates.Add(candidates[i].Endpoint!); } } @@ -366,11 +369,13 @@ namespace Microsoft.AspNetCore.Routing.Matching } } + [DoesNotReturn] private static void ThrowIndexArgumentOutOfRangeException() { throw new ArgumentOutOfRangeException("index"); } + [DoesNotReturn] private static void ThrowArgumentNullException(string parameter) { throw new ArgumentNullException(parameter); diff --git a/src/Http/Routing/src/Matching/CandidateState.cs b/src/Http/Routing/src/Matching/CandidateState.cs index 5b198beb8e..14b8591c68 100644 --- a/src/Http/Routing/src/Matching/CandidateState.cs +++ b/src/Http/Routing/src/Matching/CandidateState.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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; @@ -17,7 +17,7 @@ namespace Microsoft.AspNetCore.Routing.Matching Values = null; } - internal CandidateState(Endpoint endpoint, RouteValueDictionary values, int score) + internal CandidateState(Endpoint endpoint, RouteValueDictionary? values, int score) { Endpoint = endpoint; Values = values; @@ -50,6 +50,6 @@ namespace Microsoft.AspNetCore.Routing.Matching /// Gets associated with the /// and the current request. /// - public RouteValueDictionary Values { get; internal set; } + public RouteValueDictionary? Values { get; internal set; } } } diff --git a/src/Http/Routing/src/Matching/DataSourceDependentMatcher.cs b/src/Http/Routing/src/Matching/DataSourceDependentMatcher.cs index c757b1646e..bf6c02102e 100644 --- a/src/Http/Routing/src/Matching/DataSourceDependentMatcher.cs +++ b/src/Http/Routing/src/Matching/DataSourceDependentMatcher.cs @@ -57,10 +57,10 @@ namespace Microsoft.AspNetCore.Routing.Matching public sealed class Lifetime : IDisposable { private readonly object _lock = new object(); - private DataSourceDependentCache _cache; + private DataSourceDependentCache? _cache; private bool _disposed; - public DataSourceDependentCache Cache + public DataSourceDependentCache? Cache { get => _cache; set diff --git a/src/Http/Routing/src/Matching/DefaultEndpointSelector.cs b/src/Http/Routing/src/Matching/DefaultEndpointSelector.cs index cc455d4eb7..31c863a5a9 100644 --- a/src/Http/Routing/src/Matching/DefaultEndpointSelector.cs +++ b/src/Http/Routing/src/Matching/DefaultEndpointSelector.cs @@ -47,7 +47,7 @@ namespace Microsoft.AspNetCore.Routing.Matching if (CandidateSet.IsValidCandidate(ref state)) { httpContext.SetEndpoint(state.Endpoint); - httpContext.Request.RouteValues = state.Values; + httpContext.Request.RouteValues = state.Values!; } break; @@ -67,8 +67,8 @@ namespace Microsoft.AspNetCore.Routing.Matching HttpContext httpContext, CandidateState[] candidateState) { - Endpoint endpoint = null; - RouteValueDictionary values = null; + Endpoint? endpoint = null; + RouteValueDictionary? values = null; int? foundScore = null; for (var i = 0; i < candidateState.Length; i++) { @@ -110,7 +110,7 @@ namespace Microsoft.AspNetCore.Routing.Matching if (endpoint != null) { httpContext.SetEndpoint(endpoint); - httpContext.Request.RouteValues = values; + httpContext.Request.RouteValues = values!; } } diff --git a/src/Http/Routing/src/Matching/DfaMatcher.cs b/src/Http/Routing/src/Matching/DfaMatcher.cs index d79f13e2ab..e40e21e252 100644 --- a/src/Http/Routing/src/Matching/DfaMatcher.cs +++ b/src/Http/Routing/src/Matching/DfaMatcher.cs @@ -40,7 +40,7 @@ namespace Microsoft.AspNetCore.Routing.Matching // The sequence of actions we take is optimized to avoid doing expensive work // like creating substrings, creating route value dictionaries, and calling // into policies like versioning. - var path = httpContext.Request.Path.Value; + var path = httpContext.Request.Path.Value!; // First tokenize the path into series of segments. Span buffer = stackalloc PathSegment[_maxSegmentCount]; @@ -119,7 +119,7 @@ namespace Microsoft.AspNetCore.Routing.Matching // We want to create a new array for the route values based on Slots // as a prototype. var prototype = candidate.Slots; - var slots = new KeyValuePair[prototype.Length]; + var slots = new KeyValuePair[prototype.Length]; if ((flags & Candidate.CandidateFlags.HasDefaults) != 0) { @@ -221,7 +221,7 @@ namespace Microsoft.AspNetCore.Routing.Matching } private void ProcessCaptures( - KeyValuePair[] slots, + KeyValuePair[] slots, (string parameterName, int segmentIndex, int slotIndex)[] captures, string path, ReadOnlySpan segments) @@ -235,7 +235,7 @@ namespace Microsoft.AspNetCore.Routing.Matching var segment = segments[segmentIndex]; if (parameterName != null && segment.Length > 0) { - slots[slotIndex] = new KeyValuePair( + slots[slotIndex] = new KeyValuePair( parameterName, path.Substring(segment.Start, segment.Length)); } @@ -244,7 +244,7 @@ namespace Microsoft.AspNetCore.Routing.Matching } private void ProcessCatchAll( - KeyValuePair[] slots, + KeyValuePair[] slots, in (string parameterName, int segmentIndex, int slotIndex) catchAll, string path, ReadOnlySpan segments) @@ -255,7 +255,7 @@ namespace Microsoft.AspNetCore.Routing.Matching if ((uint)segmentIndex < (uint)segments.Length) { var segment = segments[segmentIndex]; - slots[catchAll.slotIndex] = new KeyValuePair( + slots[catchAll.slotIndex] = new KeyValuePair( catchAll.parameterName, path.Substring(segment.Start)); } @@ -333,6 +333,7 @@ namespace Microsoft.AspNetCore.Routing.Matching public static readonly EventId CandidateValid = new EventId(1005, "CandiateValid"); } +#nullable disable private static class Logger { private static readonly Action _candidatesNotFound = LoggerMessage.Define( diff --git a/src/Http/Routing/src/Matching/DfaMatcherBuilder.cs b/src/Http/Routing/src/Matching/DfaMatcherBuilder.cs index 2782f8a3ae..c10c34d12b 100644 --- a/src/Http/Routing/src/Matching/DfaMatcherBuilder.cs +++ b/src/Http/Routing/src/Matching/DfaMatcherBuilder.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/src/Http/Routing/src/Matching/DfaNode.cs b/src/Http/Routing/src/Matching/DfaNode.cs index 602a48a0e2..b0ba4b9887 100644 --- a/src/Http/Routing/src/Matching/DfaNode.cs +++ b/src/Http/Routing/src/Matching/DfaNode.cs @@ -1,6 +1,8 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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. +#nullable disable + using System; using System.Collections.Generic; using System.Diagnostics; diff --git a/src/Http/Routing/src/Matching/EndpointComparer.cs b/src/Http/Routing/src/Matching/EndpointComparer.cs index 7df5de8ea4..b76802f2e6 100644 --- a/src/Http/Routing/src/Matching/EndpointComparer.cs +++ b/src/Http/Routing/src/Matching/EndpointComparer.cs @@ -38,7 +38,7 @@ namespace Microsoft.AspNetCore.Routing.Matching } } - public int Compare(Endpoint x, Endpoint y) + public int Compare(Endpoint? x, Endpoint? y) { // We don't expose this publicly, and we should never call it on // a null endpoint. @@ -74,7 +74,7 @@ namespace Microsoft.AspNetCore.Routing.Matching return 0; } - public bool Equals(Endpoint x, Endpoint y) + public bool Equals(Endpoint? x, Endpoint? y) { // We don't expose this publicly, and we should never call it on // a null endpoint. @@ -109,7 +109,7 @@ namespace Microsoft.AspNetCore.Routing.Matching { public static readonly IComparer Instance = new OrderComparer(); - public int Compare(Endpoint x, Endpoint y) + public int Compare(Endpoint? x, Endpoint? y) { var routeEndpointX = x as RouteEndpoint; var routeEndpointY = y as RouteEndpoint; @@ -136,7 +136,7 @@ namespace Microsoft.AspNetCore.Routing.Matching { public static readonly IComparer Instance = new PrecedenceComparer(); - public int Compare(Endpoint x, Endpoint y) + public int Compare(Endpoint? x, Endpoint? y) { var routeEndpointX = x as RouteEndpoint; var routeEndpointY = y as RouteEndpoint; diff --git a/src/Http/Routing/src/Matching/HostMatcherPolicy.cs b/src/Http/Routing/src/Matching/HostMatcherPolicy.cs index be6f5bbf84..d0f29612e4 100644 --- a/src/Http/Routing/src/Matching/HostMatcherPolicy.cs +++ b/src/Http/Routing/src/Matching/HostMatcherPolicy.cs @@ -342,7 +342,7 @@ namespace Microsoft.AspNetCore.Routing.Matching private class HostMetadataEndpointComparer : EndpointMetadataComparer { - protected override int CompareMetadata(IHostMetadata x, IHostMetadata y) + protected override int CompareMetadata(IHostMetadata? x, IHostMetadata? y) { // Ignore the metadata if it has an empty list of hosts. return base.CompareMetadata( @@ -391,9 +391,9 @@ namespace Microsoft.AspNetCore.Routing.Matching public readonly int? Port; public readonly string Host; - private readonly string _wildcardEndsWith; + private readonly string? _wildcardEndsWith; - public EdgeKey(string host, int? port) + public EdgeKey(string? host, int? port) { Host = host ?? WildcardHost; Port = port; @@ -421,9 +421,9 @@ namespace Microsoft.AspNetCore.Routing.Matching return Comparer.Default.Compare(Port, other.Port); } - public int CompareTo(object obj) + public int CompareTo(object? obj) { - return CompareTo((EdgeKey)obj); + return CompareTo((EdgeKey)obj!); } public bool Equals(EdgeKey other) @@ -437,7 +437,7 @@ namespace Microsoft.AspNetCore.Routing.Matching { if (HasHostWildcard) { - return host.EndsWith(_wildcardEndsWith, StringComparison.OrdinalIgnoreCase); + return host.EndsWith(_wildcardEndsWith!, StringComparison.OrdinalIgnoreCase); } else { @@ -454,7 +454,7 @@ namespace Microsoft.AspNetCore.Routing.Matching return (Host?.GetHashCode() ?? 0) ^ (Port?.GetHashCode() ?? 0); } - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (obj is EdgeKey key) { diff --git a/src/Http/Routing/src/Matching/HttpMethodMatcherPolicy.cs b/src/Http/Routing/src/Matching/HttpMethodMatcherPolicy.cs index 2dfdefcf02..039d889fed 100644 --- a/src/Http/Routing/src/Matching/HttpMethodMatcherPolicy.cs +++ b/src/Http/Routing/src/Matching/HttpMethodMatcherPolicy.cs @@ -108,7 +108,7 @@ namespace Microsoft.AspNetCore.Routing.Matching // We want to return a 405 iff we eliminated ALL of the currently valid endpoints due to HTTP method // mismatch. bool? needs405Endpoint = null; - HashSet methods = null; + HashSet? methods = null; for (var i = 0; i < candidates.Count; i++) { @@ -168,8 +168,8 @@ namespace Microsoft.AspNetCore.Routing.Matching if (needs405Endpoint == true) { // We saw some endpoints coming in, and we eliminated them all. - httpContext.SetEndpoint(CreateRejectionEndpoint(methods.OrderBy(m => m, StringComparer.OrdinalIgnoreCase))); - httpContext.Request.RouteValues = null; + httpContext.SetEndpoint(CreateRejectionEndpoint(methods!.OrderBy(m => m, StringComparer.OrdinalIgnoreCase))); + httpContext.Request.RouteValues = null!; } return Task.CompletedTask; @@ -329,8 +329,8 @@ namespace Microsoft.AspNetCore.Routing.Matching /// public PolicyJumpTable BuildJumpTable(int exitDestination, IReadOnlyList edges) { - Dictionary destinations = null; - Dictionary corsPreflightDestinations = null; + Dictionary? destinations = null; + Dictionary? corsPreflightDestinations = null; for (var i = 0; i < edges.Count; i++) { // We create this data, so it's safe to cast it. @@ -421,17 +421,17 @@ namespace Microsoft.AspNetCore.Routing.Matching private class HttpMethodPolicyJumpTable : PolicyJumpTable { private readonly int _exitDestination; - private readonly Dictionary _destinations; + private readonly Dictionary? _destinations; private readonly int _corsPreflightExitDestination; - private readonly Dictionary _corsPreflightDestinations; + private readonly Dictionary? _corsPreflightDestinations; private readonly bool _supportsCorsPreflight; public HttpMethodPolicyJumpTable( int exitDestination, - Dictionary destinations, + Dictionary? destinations, int corsPreflightExitDestination, - Dictionary corsPreflightDestinations) + Dictionary? corsPreflightDestinations) { _exitDestination = exitDestination; _destinations = destinations; @@ -466,7 +466,7 @@ namespace Microsoft.AspNetCore.Routing.Matching private class HttpMethodMetadataEndpointComparer : EndpointMetadataComparer { - protected override int CompareMetadata(IHttpMethodMetadata x, IHttpMethodMetadata y) + protected override int CompareMetadata(IHttpMethodMetadata? x, IHttpMethodMetadata? y) { // Ignore the metadata if it has an empty list of HTTP methods. return base.CompareMetadata( @@ -501,9 +501,9 @@ namespace Microsoft.AspNetCore.Routing.Matching return IsCorsPreflightRequest.CompareTo(other.IsCorsPreflightRequest); } - public int CompareTo(object obj) + public int CompareTo(object? obj) { - return CompareTo((EdgeKey)obj); + return CompareTo((EdgeKey)obj!); } public bool Equals(EdgeKey other) @@ -513,7 +513,7 @@ namespace Microsoft.AspNetCore.Routing.Matching HttpMethods.Equals(HttpMethod, other.HttpMethod); } - public override bool Equals(object obj) + public override bool Equals(object? obj) { var other = obj as EdgeKey?; return other == null ? false : Equals(other.Value); diff --git a/src/Http/Routing/src/Matching/ILEmitTrieFactory.cs b/src/Http/Routing/src/Matching/ILEmitTrieFactory.cs index 3cb240c2fa..18a60c4e0d 100644 --- a/src/Http/Routing/src/Matching/ILEmitTrieFactory.cs +++ b/src/Http/Routing/src/Matching/ILEmitTrieFactory.cs @@ -1,6 +1,8 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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. +#nullable disable + using System; using System.Diagnostics; using System.Linq; diff --git a/src/Http/Routing/src/Matching/ILEmitTrieJumpTable.cs b/src/Http/Routing/src/Matching/ILEmitTrieJumpTable.cs index e59f283435..18bdd2bc35 100644 --- a/src/Http/Routing/src/Matching/ILEmitTrieJumpTable.cs +++ b/src/Http/Routing/src/Matching/ILEmitTrieJumpTable.cs @@ -1,6 +1,8 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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. +#nullable disable + using System; using System.Threading; using System.Threading.Tasks; diff --git a/src/Http/Routing/src/Matching/PathSegment.cs b/src/Http/Routing/src/Matching/PathSegment.cs index a5f570f8b5..fd8d8a9223 100644 --- a/src/Http/Routing/src/Matching/PathSegment.cs +++ b/src/Http/Routing/src/Matching/PathSegment.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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; @@ -16,7 +16,7 @@ namespace Microsoft.AspNetCore.Routing.Matching Length = length; } - public override bool Equals(object obj) + public override bool Equals(object? obj) { return obj is PathSegment segment ? Equals(segment) : false; } diff --git a/src/Http/Routing/src/Microsoft.AspNetCore.Routing.csproj b/src/Http/Routing/src/Microsoft.AspNetCore.Routing.csproj index 1937aae7f6..9ff3925225 100644 --- a/src/Http/Routing/src/Microsoft.AspNetCore.Routing.csproj +++ b/src/Http/Routing/src/Microsoft.AspNetCore.Routing.csproj @@ -12,7 +12,7 @@ Microsoft.AspNetCore.Routing.RouteCollection aspnetcore;routing true false - annotations + enable diff --git a/src/Http/Routing/src/NullRouter.cs b/src/Http/Routing/src/NullRouter.cs index 9fd1908942..2823067b5e 100644 --- a/src/Http/Routing/src/NullRouter.cs +++ b/src/Http/Routing/src/NullRouter.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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; @@ -13,7 +13,7 @@ namespace Microsoft.AspNetCore.Routing { } - public VirtualPathData GetVirtualPath(VirtualPathContext context) + public VirtualPathData? GetVirtualPath(VirtualPathContext context) { return null; } diff --git a/src/Http/Routing/src/ParameterPolicyActivator.cs b/src/Http/Routing/src/ParameterPolicyActivator.cs index b83c5c186b..81da4d49e9 100644 --- a/src/Http/Routing/src/ParameterPolicyActivator.cs +++ b/src/Http/Routing/src/ParameterPolicyActivator.cs @@ -1,12 +1,13 @@ // 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. +#nullable disable + using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Reflection; -using System.Text; using Microsoft.Extensions.DependencyInjection; namespace Microsoft.AspNetCore.Routing diff --git a/src/Http/Routing/src/ParameterPolicyFactory.cs b/src/Http/Routing/src/ParameterPolicyFactory.cs index 2d8e665b47..95212e1263 100644 --- a/src/Http/Routing/src/ParameterPolicyFactory.cs +++ b/src/Http/Routing/src/ParameterPolicyFactory.cs @@ -26,7 +26,7 @@ namespace Microsoft.AspNetCore.Routing /// The parameter the parameter policy is being created for. /// An existing parameter policy. /// The for the parameter. - public abstract IParameterPolicy Create(RoutePatternParameterPart parameter, IParameterPolicy parameterPolicy); + public abstract IParameterPolicy Create(RoutePatternParameterPart? parameter, IParameterPolicy parameterPolicy); /// /// Creates a parameter policy. @@ -34,7 +34,7 @@ namespace Microsoft.AspNetCore.Routing /// The parameter the parameter policy is being created for. /// The reference to resolve. /// The for the parameter. - public IParameterPolicy Create(RoutePatternParameterPart parameter, RoutePatternParameterPolicyReference reference) + public IParameterPolicy Create(RoutePatternParameterPart? parameter, RoutePatternParameterPolicyReference reference) { if (reference == null) { diff --git a/src/Http/Routing/src/PathTokenizer.cs b/src/Http/Routing/src/PathTokenizer.cs index 307dfb1159..79f971e497 100644 --- a/src/Http/Routing/src/PathTokenizer.cs +++ b/src/Http/Routing/src/PathTokenizer.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System; using System.Collections; using System.Collections.Generic; diff --git a/src/Http/Routing/src/Patterns/DefaultRoutePatternTransformer.cs b/src/Http/Routing/src/Patterns/DefaultRoutePatternTransformer.cs index 39adf3a4d0..c79946c728 100644 --- a/src/Http/Routing/src/Patterns/DefaultRoutePatternTransformer.cs +++ b/src/Http/Routing/src/Patterns/DefaultRoutePatternTransformer.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System; using System.Collections.Generic; diff --git a/src/Http/Routing/src/Patterns/RouteParameterParser.cs b/src/Http/Routing/src/Patterns/RouteParameterParser.cs index 07c8d91bb9..072ab0d8fc 100644 --- a/src/Http/Routing/src/Patterns/RouteParameterParser.cs +++ b/src/Http/Routing/src/Patterns/RouteParameterParser.cs @@ -78,7 +78,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns var parseResults = ParseConstraints(parameter, currentIndex, endIndex); currentIndex = parseResults.CurrentIndex; - string defaultValue = null; + string? defaultValue = null; if (currentIndex <= endIndex && parameter[currentIndex] == '=') { diff --git a/src/Http/Routing/src/Patterns/RoutePattern.cs b/src/Http/Routing/src/Patterns/RoutePattern.cs index 4cd881c8e2..055a062669 100644 --- a/src/Http/Routing/src/Patterns/RoutePattern.cs +++ b/src/Http/Routing/src/Patterns/RoutePattern.cs @@ -27,7 +27,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// public static readonly object RequiredValueAny = new RequiredValueAnySentinal(); - internal static bool IsRequiredValueAny(object value) + internal static bool IsRequiredValueAny(object? value) { return object.ReferenceEquals(RequiredValueAny, value); } @@ -35,10 +35,10 @@ namespace Microsoft.AspNetCore.Routing.Patterns private const string SeparatorString = "/"; internal RoutePattern( - string rawText, - IReadOnlyDictionary defaults, + string? rawText, + IReadOnlyDictionary defaults, IReadOnlyDictionary> parameterPolicies, - IReadOnlyDictionary requiredValues, + IReadOnlyDictionary requiredValues, IReadOnlyList parameters, IReadOnlyList pathSegments) { @@ -63,7 +63,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// Gets the set of default values for the route pattern. /// The keys of are the route parameter names. /// - public IReadOnlyDictionary Defaults { get; } + public IReadOnlyDictionary Defaults { get; } /// /// Gets the set of parameter policy references for the route pattern. @@ -92,7 +92,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// /// /// - public IReadOnlyDictionary RequiredValues { get; } + public IReadOnlyDictionary RequiredValues { get; } /// /// Gets the precedence value of the route pattern for URL matching. @@ -115,7 +115,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// /// Gets the raw text supplied when parsing the route pattern. May be null. /// - public string RawText { get; } + public string? RawText { get; } /// /// Gets the list of route parameters. @@ -132,7 +132,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// /// The name of the parameter to match. /// The matching parameter or null if no parameter matches the given name. - public RoutePatternParameterPart GetParameter(string name) + public RoutePatternParameterPart? GetParameter(string name) { if (name == null) { diff --git a/src/Http/Routing/src/Patterns/RoutePatternException.cs b/src/Http/Routing/src/Patterns/RoutePatternException.cs index 7b21ac0ac5..c7c95f068c 100644 --- a/src/Http/Routing/src/Patterns/RoutePatternException.cs +++ b/src/Http/Routing/src/Patterns/RoutePatternException.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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; @@ -15,7 +15,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns private RoutePatternException(SerializationInfo info, StreamingContext context) : base(info, context) { - Pattern = (string)info.GetValue(nameof(Pattern), typeof(string)); + Pattern = (string)info.GetValue(nameof(Pattern), typeof(string))!; } /// diff --git a/src/Http/Routing/src/Patterns/RoutePatternFactory.cs b/src/Http/Routing/src/Patterns/RoutePatternFactory.cs index 91c8ae8b38..8832e94e59 100644 --- a/src/Http/Routing/src/Patterns/RoutePatternFactory.cs +++ b/src/Http/Routing/src/Patterns/RoutePatternFactory.cs @@ -17,8 +17,8 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// public static class RoutePatternFactory { - private static readonly IReadOnlyDictionary EmptyDictionary = - new ReadOnlyDictionary(new Dictionary()); + private static readonly IReadOnlyDictionary EmptyDictionary = + new ReadOnlyDictionary(new Dictionary()); private static readonly IReadOnlyDictionary> EmptyPoliciesDictionary = new ReadOnlyDictionary>(new Dictionary>()); @@ -55,7 +55,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// Multiple policies can be specified for a key by providing a collection as the value. /// /// The . - public static RoutePattern Parse(string pattern, object defaults, object parameterPolicies) + public static RoutePattern Parse(string pattern, object? defaults, object? parameterPolicies) { if (pattern == null) { @@ -86,7 +86,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// Route values that can be substituted for parameters in the route pattern. See remarks on . /// /// The . - public static RoutePattern Parse(string pattern, object defaults, object parameterPolicies, object requiredValues) + public static RoutePattern Parse(string pattern, object? defaults, object? parameterPolicies, object? requiredValues) { if (pattern == null) { @@ -118,7 +118,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// The raw text to associate with the route pattern. May be null. /// The collection of segments. /// The . - public static RoutePattern Pattern(string rawText, IEnumerable segments) + public static RoutePattern Pattern(string? rawText, IEnumerable segments) { if (segments == null) { @@ -146,8 +146,8 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// The collection of segments. /// The . public static RoutePattern Pattern( - object defaults, - object parameterPolicies, + object? defaults, + object? parameterPolicies, IEnumerable segments) { if (segments == null) @@ -177,9 +177,9 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// The collection of segments. /// The . public static RoutePattern Pattern( - string rawText, - object defaults, - object parameterPolicies, + string? rawText, + object? defaults, + object? parameterPolicies, IEnumerable segments) { if (segments == null) @@ -239,8 +239,8 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// The collection of segments. /// The . public static RoutePattern Pattern( - object defaults, - object parameterPolicies, + object? defaults, + object? parameterPolicies, params RoutePatternPathSegment[] segments) { if (segments == null) @@ -270,9 +270,9 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// The collection of segments. /// The . public static RoutePattern Pattern( - string rawText, - object defaults, - object parameterPolicies, + string? rawText, + object? defaults, + object? parameterPolicies, params RoutePatternPathSegment[] segments) { if (segments == null) @@ -284,10 +284,10 @@ namespace Microsoft.AspNetCore.Routing.Patterns } private static RoutePattern PatternCore( - string rawText, - RouteValueDictionary defaults, - RouteValueDictionary parameterPolicies, - RouteValueDictionary requiredValues, + string? rawText, + RouteValueDictionary? defaults, + RouteValueDictionary? parameterPolicies, + RouteValueDictionary? requiredValues, IEnumerable segments) { // We want to merge the segment data with the 'out of line' defaults and parameter policies. @@ -301,10 +301,10 @@ namespace Microsoft.AspNetCore.Routing.Patterns // It's important that these two views of the data are consistent. We don't want // values specified out of line to have a different behavior. - Dictionary updatedDefaults = null; + Dictionary? updatedDefaults = null; if (defaults != null && defaults.Count > 0) { - updatedDefaults = new Dictionary(defaults.Count, StringComparer.OrdinalIgnoreCase); + updatedDefaults = new Dictionary(defaults.Count, StringComparer.OrdinalIgnoreCase); foreach (var kvp in defaults) { @@ -312,7 +312,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns } } - Dictionary> updatedParameterPolicies = null; + Dictionary>? updatedParameterPolicies = null; if (parameterPolicies != null && parameterPolicies.Count > 0) { updatedParameterPolicies = new Dictionary>(parameterPolicies.Count, StringComparer.OrdinalIgnoreCase); @@ -349,7 +349,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns } } - List parameters = null; + List? parameters = null; var updatedSegments = segments.ToArray(); for (var i = 0; i < updatedSegments.Length; i++) { @@ -420,12 +420,12 @@ namespace Microsoft.AspNetCore.Routing.Patterns ? updatedParameterPolicies.ToDictionary(kvp => kvp.Key, kvp => (IReadOnlyList)kvp.Value.ToArray()) : EmptyPoliciesDictionary, requiredValues ?? EmptyDictionary, - (IReadOnlyList)parameters ?? Array.Empty(), + (IReadOnlyList?)parameters ?? Array.Empty(), updatedSegments); RoutePatternPathSegment VisitSegment(RoutePatternPathSegment segment) { - RoutePatternPart[] updatedParts = null; + RoutePatternPart[]? updatedParts = null; for (var i = 0; i < segment.Parts.Count; i++) { var part = segment.Parts[i]; @@ -482,13 +482,13 @@ namespace Microsoft.AspNetCore.Routing.Patterns { if (updatedDefaults == null) { - updatedDefaults = new Dictionary(StringComparer.OrdinalIgnoreCase); + updatedDefaults = new Dictionary(StringComparer.OrdinalIgnoreCase); } updatedDefaults[parameter.Name] = parameter.Default; } - List parameterConstraints = null; + List? parameterConstraints = null; if ((updatedParameterPolicies == null || !updatedParameterPolicies.TryGetValue(parameter.Name, out parameterConstraints)) && parameter.ParameterPolicies.Count > 0) { @@ -503,7 +503,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns if (parameter.ParameterPolicies.Count > 0) { - parameterConstraints.AddRange(parameter.ParameterPolicies); + parameterConstraints!.AddRange(parameter.ParameterPolicies); } if (Equals(parameter.Default, @default) @@ -667,7 +667,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// The . public static RoutePatternParameterPart ParameterPart( string parameterName, - object @default, + object? @default, RoutePatternParameterKind parameterKind) { if (string.IsNullOrEmpty(parameterName)) @@ -703,7 +703,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// The . public static RoutePatternParameterPart ParameterPart( string parameterName, - object @default, + object? @default, RoutePatternParameterKind parameterKind, IEnumerable parameterPolicies) { @@ -745,7 +745,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// The . public static RoutePatternParameterPart ParameterPart( string parameterName, - object @default, + object? @default, RoutePatternParameterKind parameterKind, params RoutePatternParameterPolicyReference[] parameterPolicies) { @@ -778,7 +778,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns private static RoutePatternParameterPart ParameterPartCore( string parameterName, - object @default, + object? @default, RoutePatternParameterKind parameterKind, RoutePatternParameterPolicyReference[] parameterPolicies) { @@ -787,7 +787,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns private static RoutePatternParameterPart ParameterPartCore( string parameterName, - object @default, + object? @default, RoutePatternParameterKind parameterKind, RoutePatternParameterPolicyReference[] parameterPolicies, bool encodeSlashes) @@ -906,7 +906,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns return new RoutePatternParameterPolicyReference(parameterPolicy); } - private static RouteValueDictionary Wrap(object values) + private static RouteValueDictionary? Wrap(object? values) { return values == null ? null : new RouteValueDictionary(values); } diff --git a/src/Http/Routing/src/Patterns/RoutePatternMatcher.cs b/src/Http/Routing/src/Patterns/RoutePatternMatcher.cs index 15bc489a64..f82d860e83 100644 --- a/src/Http/Routing/src/Patterns/RoutePatternMatcher.cs +++ b/src/Http/Routing/src/Patterns/RoutePatternMatcher.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System; using System.Diagnostics; using Microsoft.AspNetCore.Http; diff --git a/src/Http/Routing/src/Patterns/RoutePatternParameterPart.cs b/src/Http/Routing/src/Patterns/RoutePatternParameterPart.cs index 2b5f408268..30cb7db2da 100644 --- a/src/Http/Routing/src/Patterns/RoutePatternParameterPart.cs +++ b/src/Http/Routing/src/Patterns/RoutePatternParameterPart.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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; @@ -16,7 +16,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns { internal RoutePatternParameterPart( string parameterName, - object @default, + object? @default, RoutePatternParameterKind parameterKind, RoutePatternParameterPolicyReference[] parameterPolicies) : this(parameterName, @default, parameterKind, parameterPolicies, encodeSlashes: true) @@ -25,7 +25,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns internal RoutePatternParameterPart( string parameterName, - object @default, + object? @default, RoutePatternParameterKind parameterKind, RoutePatternParameterPolicyReference[] parameterPolicies, bool encodeSlashes) @@ -53,7 +53,7 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// /// Gets the default value of this route parameter. May be null. /// - public object Default { get; } + public object? Default { get; } /// /// Returns true if this part is a catch-all parameter. diff --git a/src/Http/Routing/src/Patterns/RoutePatternParameterPolicyReference.cs b/src/Http/Routing/src/Patterns/RoutePatternParameterPolicyReference.cs index 65f58087c1..3fb95983f4 100644 --- a/src/Http/Routing/src/Patterns/RoutePatternParameterPolicyReference.cs +++ b/src/Http/Routing/src/Patterns/RoutePatternParameterPolicyReference.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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.Diagnostics; @@ -26,16 +26,16 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// /// Gets the constraint text. /// - public string Content { get; } + public string? Content { get; } /// /// Gets a pre-existing that was used to construct this reference. /// - public IParameterPolicy ParameterPolicy { get; } + public IParameterPolicy? ParameterPolicy { get; } - private string DebuggerToString() + private string? DebuggerToString() { return Content; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Patterns/RoutePatternParser.cs b/src/Http/Routing/src/Patterns/RoutePatternParser.cs index 990d1854fc..8b8f181f52 100644 --- a/src/Http/Routing/src/Patterns/RoutePatternParser.cs +++ b/src/Http/Routing/src/Patterns/RoutePatternParser.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System; using System.Collections.Generic; using System.Diagnostics; diff --git a/src/Http/Routing/src/Patterns/RoutePatternTransformer.cs b/src/Http/Routing/src/Patterns/RoutePatternTransformer.cs index bea4c610fc..b16ab4cb0e 100644 --- a/src/Http/Routing/src/Patterns/RoutePatternTransformer.cs +++ b/src/Http/Routing/src/Patterns/RoutePatternTransformer.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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.Routing.Patterns @@ -30,6 +30,6 @@ namespace Microsoft.AspNetCore.Routing.Patterns /// return null if any required value cannot be substituted. /// /// - public abstract RoutePattern SubstituteRequiredValues(RoutePattern original, object requiredValues); + public abstract RoutePattern? SubstituteRequiredValues(RoutePattern original, object requiredValues); } } diff --git a/src/Http/Routing/src/RequestDelegateRouteBuilderExtensions.cs b/src/Http/Routing/src/RequestDelegateRouteBuilderExtensions.cs index f376683c4d..8a9e228e46 100644 --- a/src/Http/Routing/src/RequestDelegateRouteBuilderExtensions.cs +++ b/src/Http/Routing/src/RequestDelegateRouteBuilderExtensions.cs @@ -259,7 +259,7 @@ namespace Microsoft.AspNetCore.Routing new RouteHandler(handler), template, defaults: null, - constraints: new RouteValueDictionary(new { httpMethod = new HttpMethodRouteConstraint(verb) }), + constraints: new RouteValueDictionary(new { httpMethod = new HttpMethodRouteConstraint(verb) })!, dataTokens: null, inlineConstraintResolver: GetConstraintResolver(builder)); diff --git a/src/Http/Routing/src/Route.cs b/src/Http/Routing/src/Route.cs index 0a6afd3b26..555c328127 100644 --- a/src/Http/Routing/src/Route.cs +++ b/src/Http/Routing/src/Route.cs @@ -1,8 +1,6 @@ // 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. -#nullable enable - using System; using System.Collections.Generic; using System.Threading.Tasks; @@ -62,7 +60,7 @@ namespace Microsoft.AspNetCore.Routing _target = target; } - public string RouteTemplate => ParsedTemplate.TemplateText; + public string? RouteTemplate => ParsedTemplate.TemplateText; protected override Task OnRouteMatched(RouteContext context) { diff --git a/src/Http/Routing/src/RouteBase.cs b/src/Http/Routing/src/RouteBase.cs index 2ba62fbcab..5c9db8f026 100644 --- a/src/Http/Routing/src/RouteBase.cs +++ b/src/Http/Routing/src/RouteBase.cs @@ -1,8 +1,6 @@ // 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. -#nullable enable - using System; using System.Collections.Generic; using System.Diagnostics; @@ -110,7 +108,7 @@ namespace Microsoft.AspNetCore.Routing { return Task.CompletedTask; } - _logger.RequestMatchedRoute(Name!, ParsedTemplate.TemplateText); + _logger.RequestMatchedRoute(Name!, ParsedTemplate.TemplateText!); return OnRouteMatched(context); } @@ -175,7 +173,7 @@ namespace Microsoft.AspNetCore.Routing RouteTemplate parsedTemplate, IDictionary? constraints) { - var constraintBuilder = new RouteConstraintBuilder(inlineConstraintResolver, parsedTemplate.TemplateText); + var constraintBuilder = new RouteConstraintBuilder(inlineConstraintResolver, parsedTemplate.TemplateText!); if (constraints != null) { @@ -189,12 +187,12 @@ namespace Microsoft.AspNetCore.Routing { if (parameter.IsOptional) { - constraintBuilder.SetOptional(parameter.Name); + constraintBuilder.SetOptional(parameter.Name!); } foreach (var inlineConstraint in parameter.InlineConstraints) { - constraintBuilder.AddResolvedConstraint(parameter.Name, inlineConstraint.Constraint); + constraintBuilder.AddResolvedConstraint(parameter.Name!, inlineConstraint.Constraint); } } @@ -219,7 +217,7 @@ namespace Microsoft.AspNetCore.Routing parameter.Name)); } #else - if (result.ContainsKey(parameter.Name)) + if (result.ContainsKey(parameter.Name!)) { throw new InvalidOperationException( Resources.FormatTemplateRoute_CannotHaveDefaultValueSpecifiedInlineAndExplicitly( @@ -227,7 +225,7 @@ namespace Microsoft.AspNetCore.Routing } else { - result.Add(parameter.Name, parameter.DefaultValue); + result.Add(parameter.Name!, parameter.DefaultValue); } #endif } @@ -300,7 +298,7 @@ namespace Microsoft.AspNetCore.Routing public override string ToString() { - return ParsedTemplate.TemplateText; + return ParsedTemplate.TemplateText!; } } } diff --git a/src/Http/Routing/src/RouteConstraintMatcher.cs b/src/Http/Routing/src/RouteConstraintMatcher.cs index 26728e817a..268e4110cc 100644 --- a/src/Http/Routing/src/RouteConstraintMatcher.cs +++ b/src/Http/Routing/src/RouteConstraintMatcher.cs @@ -53,7 +53,7 @@ namespace Microsoft.AspNetCore.Routing { routeValues.TryGetValue(kvp.Key, out var routeValue); - logger.ConstraintNotMatched(routeValue, kvp.Key, kvp.Value); + logger.ConstraintNotMatched(routeValue!, kvp.Key, kvp.Value); } return false; diff --git a/src/Http/Routing/src/RouteEndpoint.cs b/src/Http/Routing/src/RouteEndpoint.cs index a6750a2ef6..db4f9d4d2b 100644 --- a/src/Http/Routing/src/RouteEndpoint.cs +++ b/src/Http/Routing/src/RouteEndpoint.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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; @@ -28,8 +28,8 @@ namespace Microsoft.AspNetCore.Routing RequestDelegate requestDelegate, RoutePattern routePattern, int order, - EndpointMetadataCollection metadata, - string displayName) + EndpointMetadataCollection? metadata, + string? displayName) : base(requestDelegate, metadata, displayName) { if (requestDelegate == null) diff --git a/src/Http/Routing/src/RouteEndpointModel.cs b/src/Http/Routing/src/RouteEndpointBuilder.cs similarity index 82% rename from src/Http/Routing/src/RouteEndpointModel.cs rename to src/Http/Routing/src/RouteEndpointBuilder.cs index f06ccba0bf..4397c51cfc 100644 --- a/src/Http/Routing/src/RouteEndpointModel.cs +++ b/src/Http/Routing/src/RouteEndpointBuilder.cs @@ -1,6 +1,7 @@ // 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.Http; using Microsoft.AspNetCore.Routing.Patterns; @@ -25,6 +26,11 @@ namespace Microsoft.AspNetCore.Routing public override Endpoint Build() { + if (RequestDelegate is null) + { + throw new InvalidOperationException($"{nameof(RequestDelegate)} must be specified to construct a {nameof(RouteEndpoint)}."); + } + var routeEndpoint = new RouteEndpoint( RequestDelegate, RoutePattern, diff --git a/src/Http/Routing/src/RouteOptions.cs b/src/Http/Routing/src/RouteOptions.cs index dcff5482e7..796554dd58 100644 --- a/src/Http/Routing/src/RouteOptions.cs +++ b/src/Http/Routing/src/RouteOptions.cs @@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Routing public class RouteOptions { private IDictionary _constraintTypeMap = GetDefaultConstraintMap(); - private ICollection _endpointDataSources; + private ICollection _endpointDataSources = default!; /// /// Gets a collection of instances configured with routing. diff --git a/src/Http/Routing/src/RouteValueEqualityComparer.cs b/src/Http/Routing/src/RouteValueEqualityComparer.cs index f7cf0570c9..18ffc3070b 100644 --- a/src/Http/Routing/src/RouteValueEqualityComparer.cs +++ b/src/Http/Routing/src/RouteValueEqualityComparer.cs @@ -18,12 +18,12 @@ namespace Microsoft.AspNetCore.Routing /// /// strings are compared using . /// - public class RouteValueEqualityComparer : IEqualityComparer + public class RouteValueEqualityComparer : IEqualityComparer { public static readonly RouteValueEqualityComparer Default = new RouteValueEqualityComparer(); /// - public new bool Equals(object x, object y) + public new bool Equals(object? x, object? y) { var stringX = x as string ?? Convert.ToString(x, CultureInfo.InvariantCulture); var stringY = y as string ?? Convert.ToString(y, CultureInfo.InvariantCulture); @@ -52,4 +52,4 @@ namespace Microsoft.AspNetCore.Routing } } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/RouteValuesAddressScheme.cs b/src/Http/Routing/src/RouteValuesAddressScheme.cs index 3d0db2b0f9..80a74c19a4 100644 --- a/src/Http/Routing/src/RouteValuesAddressScheme.cs +++ b/src/Http/Routing/src/RouteValuesAddressScheme.cs @@ -30,7 +30,7 @@ namespace Microsoft.AspNetCore.Routing var state = State; - IList matchResults = null; + IList? matchResults = null; if (string.IsNullOrEmpty(address.RouteName)) { matchResults = state.AllMatchesLinkGenerationTree.GetMatches( @@ -141,8 +141,8 @@ namespace Microsoft.AspNetCore.Routing private OutboundRouteEntry CreateOutboundRouteEntry( RouteEndpoint endpoint, - IReadOnlyDictionary requiredValues, - string routeName) + IReadOnlyDictionary requiredValues, + string? routeName) { var entry = new OutboundRouteEntry() { diff --git a/src/Http/Routing/src/Template/InlineConstraint.cs b/src/Http/Routing/src/Template/InlineConstraint.cs index a711ecb136..71be48e247 100644 --- a/src/Http/Routing/src/Template/InlineConstraint.cs +++ b/src/Http/Routing/src/Template/InlineConstraint.cs @@ -32,7 +32,7 @@ namespace Microsoft.AspNetCore.Routing.Template throw new ArgumentNullException(nameof(other)); } - Constraint = other.Content; + Constraint = other.Content!; } /// @@ -40,4 +40,4 @@ namespace Microsoft.AspNetCore.Routing.Template /// public string Constraint { get; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Template/RouteTemplate.cs b/src/Http/Routing/src/Template/RouteTemplate.cs index ec5d5631f6..2b699e85cc 100644 --- a/src/Http/Routing/src/Template/RouteTemplate.cs +++ b/src/Http/Routing/src/Template/RouteTemplate.cs @@ -68,7 +68,7 @@ namespace Microsoft.AspNetCore.Routing.Template } } - public string TemplateText { get; } + public string? TemplateText { get; } public IList Parameters { get; } diff --git a/src/Http/Routing/src/Template/TemplateBinder.cs b/src/Http/Routing/src/Template/TemplateBinder.cs index 10af79ec2c..366a012b58 100644 --- a/src/Http/Routing/src/Template/TemplateBinder.cs +++ b/src/Http/Routing/src/Template/TemplateBinder.cs @@ -1,8 +1,6 @@ // 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. -#nullable enable - using System; using System.Collections; using System.Collections.Generic; diff --git a/src/Http/Routing/src/Template/TemplateMatcher.cs b/src/Http/Routing/src/Template/TemplateMatcher.cs index 97dc3565dd..9587525859 100644 --- a/src/Http/Routing/src/Template/TemplateMatcher.cs +++ b/src/Http/Routing/src/Template/TemplateMatcher.cs @@ -51,7 +51,7 @@ namespace Microsoft.AspNetCore.Routing.Template continue; } - if (Defaults.TryGetValue(part.Name, out var value)) + if (Defaults.TryGetValue(part.Name!, out var value)) { _hasDefaultValue[i] = true; _defaultValues[i] = value; diff --git a/src/Http/Routing/src/Template/TemplatePart.cs b/src/Http/Routing/src/Template/TemplatePart.cs index 5d84969a9c..c7acbd1b57 100644 --- a/src/Http/Routing/src/Template/TemplatePart.cs +++ b/src/Http/Routing/src/Template/TemplatePart.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; using System.Linq; using Microsoft.AspNetCore.Routing.Patterns; @@ -32,7 +33,7 @@ namespace Microsoft.AspNetCore.Routing.Template IsCatchAll = parameter.IsCatchAll; IsOptional = parameter.IsOptional; DefaultValue = parameter.Default; - InlineConstraints = parameter.ParameterPolicies?.Select(p => new InlineConstraint(p)); + InlineConstraints = parameter.ParameterPolicies?.Select(p => new InlineConstraint(p)) ?? Enumerable.Empty(); } else if (other.IsSeparator && other is RoutePatternSeparatorPart separator) { @@ -59,8 +60,8 @@ namespace Microsoft.AspNetCore.Routing.Template string name, bool isCatchAll, bool isOptional, - object defaultValue, - IEnumerable inlineConstraints) + object? defaultValue, + IEnumerable? inlineConstraints) { if (name == null) { @@ -83,12 +84,12 @@ namespace Microsoft.AspNetCore.Routing.Template public bool IsParameter { get; private set; } public bool IsOptional { get; private set; } public bool IsOptionalSeperator { get; set; } - public string Name { get; private set; } - public string Text { get; private set; } - public object DefaultValue { get; private set; } - public IEnumerable InlineConstraints { get; private set; } + public string? Name { get; private set; } + public string? Text { get; private set; } + public object? DefaultValue { get; private set; } + public IEnumerable InlineConstraints { get; private set; } = Enumerable.Empty(); - internal string DebuggerToString() + internal string? DebuggerToString() { if (IsParameter) { @@ -104,11 +105,11 @@ namespace Microsoft.AspNetCore.Routing.Template { if (IsLiteral && IsOptionalSeperator) { - return RoutePatternFactory.SeparatorPart(Text); + return RoutePatternFactory.SeparatorPart(Text!); } else if (IsLiteral) { - return RoutePatternFactory.LiteralPart(Text); + return RoutePatternFactory.LiteralPart(Text!); } else { @@ -119,7 +120,7 @@ namespace Microsoft.AspNetCore.Routing.Template RoutePatternParameterKind.Standard; var constraints = InlineConstraints.Select(c => new RoutePatternParameterPolicyReference(c.Constraint)); - return RoutePatternFactory.ParameterPart(Name, DefaultValue, kind, constraints); + return RoutePatternFactory.ParameterPart(Name!, DefaultValue, kind, constraints); } } } diff --git a/src/Http/Routing/src/Template/TemplateValuesResult.cs b/src/Http/Routing/src/Template/TemplateValuesResult.cs index 2a7c46398f..98489a93a8 100644 --- a/src/Http/Routing/src/Template/TemplateValuesResult.cs +++ b/src/Http/Routing/src/Template/TemplateValuesResult.cs @@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Routing.Template /// /// The set of values that will appear in the URL. /// - public RouteValueDictionary AcceptedValues { get; set; } + public RouteValueDictionary AcceptedValues { get; set; } = default!; /// /// The set of values that that were supplied for URL generation. @@ -24,6 +24,6 @@ namespace Microsoft.AspNetCore.Routing.Template /// Implicit (ambient) values which are invalidated due to changes in values lexically earlier in the /// route template are excluded from this set. /// - public RouteValueDictionary CombinedValues { get; set; } + public RouteValueDictionary CombinedValues { get; set; } = default!; } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Tree/InboundMatch.cs b/src/Http/Routing/src/Tree/InboundMatch.cs index 57f1b6db7b..9ddb321de0 100644 --- a/src/Http/Routing/src/Tree/InboundMatch.cs +++ b/src/Http/Routing/src/Tree/InboundMatch.cs @@ -1,6 +1,8 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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. +#nullable disable + using System.Diagnostics; using Microsoft.AspNetCore.Routing.Template; diff --git a/src/Http/Routing/src/Tree/InboundRouteEntry.cs b/src/Http/Routing/src/Tree/InboundRouteEntry.cs index 7c4a5f0abc..893a461d1c 100644 --- a/src/Http/Routing/src/Tree/InboundRouteEntry.cs +++ b/src/Http/Routing/src/Tree/InboundRouteEntry.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System.Collections.Generic; using Microsoft.AspNetCore.Routing.Template; diff --git a/src/Http/Routing/src/Tree/LinkGenerationDecisionTree.cs b/src/Http/Routing/src/Tree/LinkGenerationDecisionTree.cs index 6aa8b84867..47db9e345b 100644 --- a/src/Http/Routing/src/Tree/LinkGenerationDecisionTree.cs +++ b/src/Http/Routing/src/Tree/LinkGenerationDecisionTree.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System; using System.Collections.Generic; using System.Diagnostics; diff --git a/src/Http/Routing/src/Tree/OutboundMatch.cs b/src/Http/Routing/src/Tree/OutboundMatch.cs index 49980b9912..95653e3bb5 100644 --- a/src/Http/Routing/src/Tree/OutboundMatch.cs +++ b/src/Http/Routing/src/Tree/OutboundMatch.cs @@ -1,6 +1,8 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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. +#nullable disable + using Microsoft.AspNetCore.Routing.Template; namespace Microsoft.AspNetCore.Routing.Tree diff --git a/src/Http/Routing/src/Tree/OutboundRouteEntry.cs b/src/Http/Routing/src/Tree/OutboundRouteEntry.cs index 9c5258df1a..4df5ae351a 100644 --- a/src/Http/Routing/src/Tree/OutboundRouteEntry.cs +++ b/src/Http/Routing/src/Tree/OutboundRouteEntry.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System.Collections.Generic; using Microsoft.AspNetCore.Routing.Template; @@ -64,4 +66,4 @@ namespace Microsoft.AspNetCore.Routing.Tree /// public object Data { get; set; } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/src/Tree/TreeEnumerator.cs b/src/Http/Routing/src/Tree/TreeEnumerator.cs index 5a88f5bc35..2f7d3dc94a 100644 --- a/src/Http/Routing/src/Tree/TreeEnumerator.cs +++ b/src/Http/Routing/src/Tree/TreeEnumerator.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System.Collections; using System.Collections.Generic; using System.Diagnostics; diff --git a/src/Http/Routing/src/Tree/TreeRouteBuilder.cs b/src/Http/Routing/src/Tree/TreeRouteBuilder.cs index 59e06d83c0..1f9e9d0313 100644 --- a/src/Http/Routing/src/Tree/TreeRouteBuilder.cs +++ b/src/Http/Routing/src/Tree/TreeRouteBuilder.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/src/Http/Routing/src/Tree/TreeRouter.cs b/src/Http/Routing/src/Tree/TreeRouter.cs index 9dd6eb290b..5a27d237f3 100644 --- a/src/Http/Routing/src/Tree/TreeRouter.cs +++ b/src/Http/Routing/src/Tree/TreeRouter.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System; using System.Collections.Generic; using System.Text.Encodings.Web; diff --git a/src/Http/Routing/src/Tree/UrlMatchingNode.cs b/src/Http/Routing/src/Tree/UrlMatchingNode.cs index ffc387efe9..b829bc7036 100644 --- a/src/Http/Routing/src/Tree/UrlMatchingNode.cs +++ b/src/Http/Routing/src/Tree/UrlMatchingNode.cs @@ -1,6 +1,8 @@ // 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. +#nullable disable + using System; using System.Collections.Generic; using System.Diagnostics; diff --git a/src/Http/Routing/src/Tree/UrlMatchingTree.cs b/src/Http/Routing/src/Tree/UrlMatchingTree.cs index 570dce1b3a..3dec2b54bd 100644 --- a/src/Http/Routing/src/Tree/UrlMatchingTree.cs +++ b/src/Http/Routing/src/Tree/UrlMatchingTree.cs @@ -158,7 +158,7 @@ namespace Microsoft.AspNetCore.Routing.Tree current.Matches.Sort((x, y) => { var result = x.Entry.Precedence.CompareTo(y.Entry.Precedence); - return result == 0 ? x.Entry.RouteTemplate.TemplateText.CompareTo(y.Entry.RouteTemplate.TemplateText) : result; + return result == 0 ? x.Entry.RouteTemplate.TemplateText!.CompareTo(y.Entry.RouteTemplate.TemplateText) : result; }); } diff --git a/src/Http/Routing/test/FunctionalTests/Benchmarks/EndpointRoutingBenchmarkTest.cs b/src/Http/Routing/test/FunctionalTests/Benchmarks/EndpointRoutingBenchmarkTest.cs index b40da83fc9..003db4f95f 100644 --- a/src/Http/Routing/test/FunctionalTests/Benchmarks/EndpointRoutingBenchmarkTest.cs +++ b/src/Http/Routing/test/FunctionalTests/Benchmarks/EndpointRoutingBenchmarkTest.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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; @@ -6,6 +6,9 @@ using System.Net; using System.Net.Http; using System.Threading.Tasks; using Microsoft.AspNetCore.TestHost; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Xunit; namespace Microsoft.AspNetCore.Routing.FunctionalTests @@ -13,19 +16,24 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public class EndpointRoutingBenchmarkTest : IDisposable { private readonly HttpClient _client; + private readonly IHost _host; private readonly TestServer _testServer; public EndpointRoutingBenchmarkTest() { // This switch and value are set by benchmark server when running the app for profiling. var args = new[] { "--scenarios", "PlaintextEndpointRouting" }; - var webHostBuilder = Benchmarks.Program.GetWebHostBuilder(args); + var hostBuilder = Benchmarks.Program.GetHostBuilder(args); + + _host = hostBuilder.Build(); // Make sure we are using the right startup - var startupName = webHostBuilder.GetSetting("Startup"); - Assert.Equal(nameof(Benchmarks.StartupUsingEndpointRouting), startupName); + var configuration = _host.Services.GetService(); + var startupName = configuration["Startup"]; + Assert.Equal(nameof(Benchmarks.StartupUsingEndpointRouting), startupName); - _testServer = new TestServer(webHostBuilder); + _testServer = _host.GetTestServer(); + _host.Start(); _client = _testServer.CreateClient(); _client.BaseAddress = new Uri("http://localhost"); } @@ -53,6 +61,7 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests { _testServer.Dispose(); _client.Dispose(); + _host.Dispose(); } } } diff --git a/src/Http/Routing/test/FunctionalTests/Benchmarks/RouterBenchmarkTest.cs b/src/Http/Routing/test/FunctionalTests/Benchmarks/RouterBenchmarkTest.cs index aecbaaab8c..ccd11a551a 100644 --- a/src/Http/Routing/test/FunctionalTests/Benchmarks/RouterBenchmarkTest.cs +++ b/src/Http/Routing/test/FunctionalTests/Benchmarks/RouterBenchmarkTest.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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; @@ -6,6 +6,10 @@ using System.Net; using System.Net.Http; using System.Threading.Tasks; using Microsoft.AspNetCore.TestHost; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Xunit; namespace Microsoft.AspNetCore.Routing.FunctionalTests @@ -13,19 +17,24 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public class RouterBenchmarkTest : IDisposable { private readonly HttpClient _client; + private readonly IHost _host; private readonly TestServer _testServer; public RouterBenchmarkTest() { // This switch and value are set by benchmark server when running the app for profiling. var args = new[] { "--scenarios", "PlaintextRouting" }; - var webHostBuilder = Benchmarks.Program.GetWebHostBuilder(args); + var hostBuilder = Benchmarks.Program.GetHostBuilder(args); + + _host = hostBuilder.Build(); // Make sure we are using the right startup - var startupName = webHostBuilder.GetSetting("Startup"); + var configuration = _host.Services.GetService(); + var startupName = configuration["Startup"]; Assert.Equal(nameof(Benchmarks.StartupUsingRouter), startupName); - _testServer = new TestServer(webHostBuilder); + _testServer = _host.GetTestServer(); + _host.Start(); _client = _testServer.CreateClient(); _client.BaseAddress = new Uri("http://localhost"); } @@ -53,6 +62,7 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests { _testServer.Dispose(); _client.Dispose(); + _host.Dispose(); } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/test/FunctionalTests/EndpointRoutingIntegrationTest.cs b/src/Http/Routing/test/FunctionalTests/EndpointRoutingIntegrationTest.cs index f0fa4a4f59..860ebac133 100644 --- a/src/Http/Routing/test/FunctionalTests/EndpointRoutingIntegrationTest.cs +++ b/src/Http/Routing/test/FunctionalTests/EndpointRoutingIntegrationTest.cs @@ -10,6 +10,7 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.TestHost; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Xunit; namespace Microsoft.AspNetCore.Routing.FunctionalTests @@ -31,20 +32,28 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public async Task AuthorizationMiddleware_WhenNoAuthMetadataIsConfigured() { // Arrange - var builder = new WebHostBuilder(); - builder.Configure(app => - { - app.UseRouting(); - app.UseAuthorization(); - app.UseEndpoints(b => b.Map("/", TestDelegate)); - }) - .ConfigureServices(services => - { - services.AddAuthorization(); - services.AddRouting(); - }); + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .Configure(app => + { + app.UseRouting(); + app.UseAuthorization(); + app.UseEndpoints(b => b.Map("/", TestDelegate)); + }) + .UseTestServer(); + }) + .ConfigureServices(services => + { + services.AddAuthorization(); + services.AddRouting(); + }) + .Build(); - using var server = new TestServer(builder); + using var server = host.GetTestServer(); + + await host.StartAsync(); var response = await server.CreateRequest("/").SendAsync("GET"); @@ -55,20 +64,28 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public async Task AuthorizationMiddleware_WhenEndpointIsNotFound() { // Arrange - var builder = new WebHostBuilder(); - builder.Configure(app => - { - app.UseRouting(); - app.UseAuthorization(); - app.UseEndpoints(b => b.Map("/", TestDelegate)); - }) - .ConfigureServices(services => - { - services.AddAuthorization(); - services.AddRouting(); - }); + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .Configure(app => + { + app.UseRouting(); + app.UseAuthorization(); + app.UseEndpoints(b => b.Map("/", TestDelegate)); + }) + .UseTestServer(); + }) + .ConfigureServices(services => + { + services.AddAuthorization(); + services.AddRouting(); + }) + .Build(); - using var server = new TestServer(builder); + using var server = host.GetTestServer(); + + await host.StartAsync(); var response = await server.CreateRequest("/not-found").SendAsync("GET"); @@ -79,20 +96,28 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public async Task AuthorizationMiddleware_WithAuthorizedEndpoint() { // Arrange - var builder = new WebHostBuilder(); - builder.Configure(app => - { - app.UseRouting(); - app.UseAuthorization(); - app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization()); - }) - .ConfigureServices(services => - { - services.AddAuthorization(options => options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAssertion(_ => true).Build()); - services.AddRouting(); - }); + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .Configure(app => + { + app.UseRouting(); + app.UseAuthorization(); + app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization()); + }) + .UseTestServer(); + }) + .ConfigureServices(services => + { + services.AddAuthorization(options => options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAssertion(_ => true).Build()); + services.AddRouting(); + }) + .Build(); - using var server = new TestServer(builder); + using var server = host.GetTestServer(); + + await host.StartAsync(); var response = await server.CreateRequest("/").SendAsync("GET"); @@ -103,20 +128,28 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public async Task AuthorizationMiddleware_NotConfigured_Throws() { // Arrange - var builder = new WebHostBuilder(); - builder.Configure(app => - { - app.UseRouting(); - app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization()); + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .Configure(app => + { + app.UseRouting(); + app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization()); - }) - .ConfigureServices(services => - { - services.AddAuthorization(options => options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAssertion(_ => true).Build()); - services.AddRouting(); - }); + }) + .UseTestServer(); + }) + .ConfigureServices(services => + { + services.AddAuthorization(options => options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAssertion(_ => true).Build()); + services.AddRouting(); + }) + .Build(); - using var server = new TestServer(builder); + using var server = host.GetTestServer(); + + await host.StartAsync(); var ex = await Assert.ThrowsAsync(() => server.CreateRequest("/").SendAsync("GET")); Assert.Equal(AuthErrorMessage, ex.Message); @@ -126,18 +159,26 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public async Task AuthorizationMiddleware_NotConfigured_WhenEndpointIsNotFound() { // Arrange - var builder = new WebHostBuilder(); - builder.Configure(app => - { - app.UseRouting(); - app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization()); - }) - .ConfigureServices(services => - { - services.AddRouting(); - }); + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .Configure(app => + { + app.UseRouting(); + app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization()); + }) + .UseTestServer(); + }) + .ConfigureServices(services => + { + services.AddRouting(); + }) + .Build(); - using var server = new TestServer(builder); + using var server = host.GetTestServer(); + + await host.StartAsync(); var response = await server.CreateRequest("/not-found").SendAsync("GET"); @@ -148,20 +189,28 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public async Task AuthorizationMiddleware_ConfiguredBeforeRouting_Throws() { // Arrange - var builder = new WebHostBuilder(); - builder.Configure(app => - { - app.UseAuthorization(); - app.UseRouting(); - app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization()); - }) - .ConfigureServices(services => - { - services.AddAuthorization(options => options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAssertion(_ => true).Build()); - services.AddRouting(); - }); + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .Configure(app => + { + app.UseAuthorization(); + app.UseRouting(); + app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization()); + }) + .UseTestServer(); + }) + .ConfigureServices(services => + { + services.AddAuthorization(options => options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAssertion(_ => true).Build()); + services.AddRouting(); + }) + .Build(); - using var server = new TestServer(builder); + using var server = host.GetTestServer(); + + await host.StartAsync(); var ex = await Assert.ThrowsAsync(() => server.CreateRequest("/").SendAsync("GET")); Assert.Equal(AuthErrorMessage, ex.Message); @@ -171,20 +220,28 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public async Task AuthorizationMiddleware_ConfiguredAfterRouting_Throws() { // Arrange - var builder = new WebHostBuilder(); - builder.Configure(app => - { - app.UseRouting(); - app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization()); - app.UseAuthorization(); - }) - .ConfigureServices(services => - { - services.AddAuthorization(options => options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAssertion(_ => true).Build()); - services.AddRouting(); - }); + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .Configure(app => + { + app.UseRouting(); + app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization()); + app.UseAuthorization(); + }) + .UseTestServer(); + }) + .ConfigureServices(services => + { + services.AddAuthorization(options => options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAssertion(_ => true).Build()); + services.AddRouting(); + }) + .Build(); - using var server = new TestServer(builder); + using var server = host.GetTestServer(); + + await host.StartAsync(); var ex = await Assert.ThrowsAsync(() => server.CreateRequest("/").SendAsync("GET")); Assert.Equal(AuthErrorMessage, ex.Message); @@ -194,20 +251,28 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public async Task CorsMiddleware_WithCorsEndpoint() { // Arrange - var builder = new WebHostBuilder(); - builder.Configure(app => - { - app.UseRouting(); - app.UseCors(); - app.UseEndpoints(b => b.Map("/", TestDelegate).RequireCors(policy => policy.AllowAnyOrigin())); - }) - .ConfigureServices(services => - { - services.AddCors(); - services.AddRouting(); - }); + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .Configure(app => + { + app.UseRouting(); + app.UseCors(); + app.UseEndpoints(b => b.Map("/", TestDelegate).RequireCors(policy => policy.AllowAnyOrigin())); + }) + .UseTestServer(); + }) + .ConfigureServices(services => + { + services.AddCors(); + services.AddRouting(); + }) + .Build(); - using var server = new TestServer(builder); + using var server = host.GetTestServer(); + + await host.StartAsync(); var response = await server.CreateRequest("/").SendAsync("PUT"); @@ -218,20 +283,28 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public async Task CorsMiddleware_ConfiguredBeforeRouting_Throws() { // Arrange - var builder = new WebHostBuilder(); - builder.Configure(app => - { - app.UseCors(); - app.UseRouting(); - app.UseEndpoints(b => b.Map("/", TestDelegate).RequireCors(policy => policy.AllowAnyOrigin())); - }) - .ConfigureServices(services => - { - services.AddCors(); - services.AddRouting(); - }); + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .Configure(app => + { + app.UseCors(); + app.UseRouting(); + app.UseEndpoints(b => b.Map("/", TestDelegate).RequireCors(policy => policy.AllowAnyOrigin())); + }) + .UseTestServer(); + }) + .ConfigureServices(services => + { + services.AddCors(); + services.AddRouting(); + }) + .Build(); - using var server = new TestServer(builder); + using var server = host.GetTestServer(); + + await host.StartAsync(); var ex = await Assert.ThrowsAsync(() => server.CreateRequest("/").SendAsync("GET")); Assert.Equal(CORSErrorMessage, ex.Message); diff --git a/src/Http/Routing/test/FunctionalTests/EndpointRoutingSampleTest.cs b/src/Http/Routing/test/FunctionalTests/EndpointRoutingSampleTest.cs index e5ad2bd10a..aa575ab084 100644 --- a/src/Http/Routing/test/FunctionalTests/EndpointRoutingSampleTest.cs +++ b/src/Http/Routing/test/FunctionalTests/EndpointRoutingSampleTest.cs @@ -6,6 +6,7 @@ using System.Net; using System.Net.Http; using System.Threading.Tasks; using Microsoft.AspNetCore.TestHost; +using Microsoft.Extensions.Hosting; using RoutingWebSite; using Xunit; @@ -14,12 +15,17 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public class EndpointRoutingSampleTest : IDisposable { private readonly HttpClient _client; + private readonly IHost _host; private readonly TestServer _testServer; public EndpointRoutingSampleTest() { - var webHostBuilder = Program.GetWebHostBuilder(new[] { Program.EndpointRoutingScenario, }); - _testServer = new TestServer(webHostBuilder); + var hostBuilder = Program.GetHostBuilder(new[] { Program.EndpointRoutingScenario, }); + _host = hostBuilder.Build(); + + _testServer = _host.GetTestServer(); + _host.Start(); + _client = _testServer.CreateClient(); _client.BaseAddress = new Uri("http://localhost"); } @@ -227,6 +233,7 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests { _testServer.Dispose(); _client.Dispose(); + _host.Dispose(); } } } diff --git a/src/Http/Routing/test/FunctionalTests/RouterSampleTest.cs b/src/Http/Routing/test/FunctionalTests/RouterSampleTest.cs index 9388a03781..d0b93a8965 100644 --- a/src/Http/Routing/test/FunctionalTests/RouterSampleTest.cs +++ b/src/Http/Routing/test/FunctionalTests/RouterSampleTest.cs @@ -6,6 +6,7 @@ using System.Net; using System.Net.Http; using System.Threading.Tasks; using Microsoft.AspNetCore.TestHost; +using Microsoft.Extensions.Hosting; using RoutingWebSite; using Xunit; @@ -14,12 +15,15 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public class RouterSampleTest : IDisposable { private readonly HttpClient _client; + private readonly IHost _host; private readonly TestServer _testServer; public RouterSampleTest() { - var webHostBuilder = Program.GetWebHostBuilder(new[] { Program.RouterScenario, }); - _testServer = new TestServer(webHostBuilder); + var hostBuilder = Program.GetHostBuilder(new[] { Program.RouterScenario, }); + _host = hostBuilder.Build(); + _testServer = _host.GetTestServer(); + _host.Start(); _client = _testServer.CreateClient(); _client.BaseAddress = new Uri("http://localhost"); } @@ -96,6 +100,7 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests { _testServer.Dispose(); _client.Dispose(); + _host.Dispose(); } } } diff --git a/src/Http/Routing/test/FunctionalTests/RoutingTestFixture.cs b/src/Http/Routing/test/FunctionalTests/RoutingTestFixture.cs index 51c9bc8c5a..c0c97347f3 100644 --- a/src/Http/Routing/test/FunctionalTests/RoutingTestFixture.cs +++ b/src/Http/Routing/test/FunctionalTests/RoutingTestFixture.cs @@ -5,6 +5,7 @@ using System; using System.Net.Http; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.TestHost; +using Microsoft.Extensions.Hosting; namespace Microsoft.AspNetCore.Routing.FunctionalTests { @@ -14,10 +15,18 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public RoutingTestFixture() { - var builder = new WebHostBuilder() - .UseStartup(typeof(TStartup)); + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseStartup(typeof(TStartup)) + .UseTestServer(); + }) + .Build(); - _server = new TestServer(builder); + _server = host.GetTestServer(); + + host.Start(); Client = _server.CreateClient(); Client.BaseAddress = new Uri("http://localhost"); diff --git a/src/Http/Routing/test/FunctionalTests/WebHostBuilderExtensionsTest.cs b/src/Http/Routing/test/FunctionalTests/WebHostBuilderExtensionsTest.cs index 7466006026..59373e2594 100644 --- a/src/Http/Routing/test/FunctionalTests/WebHostBuilderExtensionsTest.cs +++ b/src/Http/Routing/test/FunctionalTests/WebHostBuilderExtensionsTest.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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; @@ -12,6 +12,7 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.TestHost; using Microsoft.Extensions.DependencyInjection; using Xunit; +using Microsoft.Extensions.Hosting; namespace Microsoft.AspNetCore.Routing.FunctionalTests { @@ -79,14 +80,21 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests public async Task UseRouter_MapGet_MatchesRequest(Action routeBuilder, HttpRequestMessage request, string expected) { // Arrange - var webhostbuilder = new WebHostBuilder(); - webhostbuilder - .ConfigureServices(services => services.AddRouting()) - .Configure(app => + using var host = new HostBuilder() + .ConfigureWebHost(webhostbuilder => { - app.UseRouter(routeBuilder); - }); - var testServer = new TestServer(webhostbuilder); + webhostbuilder + .Configure(app => + { + app.UseRouter(routeBuilder); + }) + .UseTestServer(); + }) + .ConfigureServices(services => services.AddRouting()) + .Build(); + + var testServer = host.GetTestServer(); + await host.StartAsync(); var client = testServer.CreateClient(); // Act diff --git a/src/Http/Routing/test/testassets/Benchmarks/Benchmarks.csproj b/src/Http/Routing/test/testassets/Benchmarks/Benchmarks.csproj index 8bab94164f..6f70f9b391 100644 --- a/src/Http/Routing/test/testassets/Benchmarks/Benchmarks.csproj +++ b/src/Http/Routing/test/testassets/Benchmarks/Benchmarks.csproj @@ -8,6 +8,7 @@ + diff --git a/src/Http/Routing/test/testassets/Benchmarks/Program.cs b/src/Http/Routing/test/testassets/Benchmarks/Program.cs index 4e832df4a2..b4b29acb03 100644 --- a/src/Http/Routing/test/testassets/Benchmarks/Program.cs +++ b/src/Http/Routing/test/testassets/Benchmarks/Program.cs @@ -1,20 +1,23 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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.Hosting; +using Microsoft.AspNetCore.TestHost; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; namespace Benchmarks { public class Program { - public static void Main(string[] args) + public static Task Main(string[] args) { - GetWebHostBuilder(args).Build().Run(); + return GetHostBuilder(args).Build().RunAsync(); } - public static IWebHostBuilder GetWebHostBuilder(string[] args) + public static IHostBuilder GetHostBuilder(string[] args) { var config = new ConfigurationBuilder() .AddCommandLine(args) @@ -24,22 +27,35 @@ namespace Benchmarks // Consoler logger has a major impact on perf results, so do not use // default builder. - var webHostBuilder = new WebHostBuilder() - .UseConfiguration(config) - .UseKestrel(); + var hostBuilder = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseKestrel() + .UseTestServer() + .UseConfiguration(config); + }); var scenario = config["scenarios"]?.ToLower(); if (scenario == "plaintextdispatcher" || scenario == "plaintextendpointrouting") { - webHostBuilder.UseStartup(); - // for testing - webHostBuilder.UseSetting("Startup", nameof(StartupUsingEndpointRouting)); + hostBuilder.ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseStartup() + // for testing + .UseSetting("Startup", nameof(StartupUsingEndpointRouting)); + }); } else if (scenario == "plaintextrouting" || scenario == "plaintextrouter") { - webHostBuilder.UseStartup(); - // for testing - webHostBuilder.UseSetting("Startup", nameof(StartupUsingRouter)); + hostBuilder.ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseStartup() + // for testing + .UseSetting("Startup", nameof(StartupUsingRouter)); + }); } else { @@ -47,7 +63,7 @@ namespace Benchmarks $"Invalid scenario '{scenario}'. Allowed scenarios are PlaintextEndpointRouting and PlaintextRouter"); } - return webHostBuilder; + return hostBuilder; } } } diff --git a/src/Http/Routing/test/testassets/RoutingSandbox/Program.cs b/src/Http/Routing/test/testassets/RoutingSandbox/Program.cs index 4f2d60bc76..edcc062745 100644 --- a/src/Http/Routing/test/testassets/RoutingSandbox/Program.cs +++ b/src/Http/Routing/test/testassets/RoutingSandbox/Program.cs @@ -2,8 +2,11 @@ // 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.Hosting; +using Microsoft.AspNetCore.TestHost; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace RoutingSandbox @@ -13,14 +16,14 @@ namespace RoutingSandbox public const string EndpointRoutingScenario = "endpointrouting"; public const string RouterScenario = "router"; - public static void Main(string[] args) + public static Task Main(string[] args) { - var webHost = GetWebHostBuilder(args).Build(); - webHost.Run(); + var host = GetHostBuilder(args).Build(); + return host.RunAsync(); } // For unit testing - public static IWebHostBuilder GetWebHostBuilder(string[] args) + public static IHostBuilder GetHostBuilder(string[] args) { string scenario; if (args.Length == 0) @@ -57,16 +60,20 @@ namespace RoutingSandbox } - return new WebHostBuilder() - .UseKestrel() - .UseIISIntegration() + return new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseKestrel() + .UseIISIntegration() + .UseContentRoot(Environment.CurrentDirectory) + .UseStartup(startupType); + }) .ConfigureLogging(b => { b.AddConsole(); b.SetMinimumLevel(LogLevel.Critical); - }) - .UseContentRoot(Environment.CurrentDirectory) - .UseStartup(startupType); + }); } } } diff --git a/src/Http/Routing/test/testassets/RoutingSandbox/RoutingSandbox.csproj b/src/Http/Routing/test/testassets/RoutingSandbox/RoutingSandbox.csproj index 873236404f..554514e46f 100644 --- a/src/Http/Routing/test/testassets/RoutingSandbox/RoutingSandbox.csproj +++ b/src/Http/Routing/test/testassets/RoutingSandbox/RoutingSandbox.csproj @@ -5,6 +5,7 @@ + diff --git a/src/Http/Routing/test/testassets/RoutingWebSite/Program.cs b/src/Http/Routing/test/testassets/RoutingWebSite/Program.cs index d96af1814f..3727c9a9a8 100644 --- a/src/Http/Routing/test/testassets/RoutingWebSite/Program.cs +++ b/src/Http/Routing/test/testassets/RoutingWebSite/Program.cs @@ -1,9 +1,12 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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.Hosting; +using Microsoft.AspNetCore.TestHost; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace RoutingWebSite @@ -13,14 +16,14 @@ namespace RoutingWebSite public const string EndpointRoutingScenario = "endpointrouting"; public const string RouterScenario = "router"; - public static void Main(string[] args) + public static Task Main(string[] args) { - var webHost = GetWebHostBuilder(args).Build(); - webHost.Run(); + var host = GetHostBuilder(args).Build(); + return host.RunAsync(); } // For unit testing - public static IWebHostBuilder GetWebHostBuilder(string[] args) + public static IHostBuilder GetHostBuilder(string[] args) { string scenario; if (args.Length == 0) @@ -57,16 +60,21 @@ namespace RoutingWebSite } - return new WebHostBuilder() - .UseKestrel() - .UseIISIntegration() + return new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseKestrel() + .UseIISIntegration() + .UseContentRoot(Environment.CurrentDirectory) + .UseStartup(startupType) + .UseTestServer(); + }) .ConfigureLogging(b => { b.AddConsole(); b.SetMinimumLevel(LogLevel.Critical); - }) - .UseContentRoot(Environment.CurrentDirectory) - .UseStartup(startupType); + }); } } } diff --git a/src/Http/Routing/test/testassets/RoutingWebSite/RoutingWebSite.csproj b/src/Http/Routing/test/testassets/RoutingWebSite/RoutingWebSite.csproj index 873236404f..554514e46f 100644 --- a/src/Http/Routing/test/testassets/RoutingWebSite/RoutingWebSite.csproj +++ b/src/Http/Routing/test/testassets/RoutingWebSite/RoutingWebSite.csproj @@ -5,6 +5,7 @@ + diff --git a/src/Http/WebUtilities/src/FileBufferingReadStream.cs b/src/Http/WebUtilities/src/FileBufferingReadStream.cs index 66c53f6951..f03fd29edd 100644 --- a/src/Http/WebUtilities/src/FileBufferingReadStream.cs +++ b/src/Http/WebUtilities/src/FileBufferingReadStream.cs @@ -208,39 +208,41 @@ namespace Microsoft.AspNetCore.WebUtilities FileOptions.Asynchronous | FileOptions.DeleteOnClose | FileOptions.SequentialScan); } - public override int Read(byte[] buffer, int offset, int count) + public override int Read(Span buffer) { ThrowIfDisposed(); + if (_buffer.Position < _buffer.Length || _completelyBuffered) { // Just read from the buffer - return _buffer.Read(buffer, offset, (int)Math.Min(count, _buffer.Length - _buffer.Position)); + return _buffer.Read(buffer); } - int read = _inner.Read(buffer, offset, count); + var read = _inner.Read(buffer); if (_bufferLimit.HasValue && _bufferLimit - read < _buffer.Length) { - Dispose(); throw new IOException("Buffer limit exceeded."); } - if (_inMemory && _buffer.Length + read > _memoryThreshold) + // We're about to go over the threshold, switch to a file + if (_inMemory && _memoryThreshold - read < _buffer.Length) { _inMemory = false; var oldBuffer = _buffer; _buffer = CreateTempFile(); if (_rentedBuffer == null) { + // Copy data from the in memory buffer to the file stream using a pooled buffer oldBuffer.Position = 0; var rentedBuffer = _bytePool.Rent(Math.Min((int)oldBuffer.Length, _maxRentedBufferSize)); try { - var copyRead = oldBuffer.Read(rentedBuffer, 0, rentedBuffer.Length); + var copyRead = oldBuffer.Read(rentedBuffer); while (copyRead > 0) { - _buffer.Write(rentedBuffer, 0, copyRead); - copyRead = oldBuffer.Read(rentedBuffer, 0, rentedBuffer.Length); + _buffer.Write(rentedBuffer.AsSpan(0, copyRead)); + copyRead = oldBuffer.Read(rentedBuffer); } } finally @@ -250,7 +252,7 @@ namespace Microsoft.AspNetCore.WebUtilities } else { - _buffer.Write(_rentedBuffer, 0, (int)oldBuffer.Length); + _buffer.Write(_rentedBuffer.AsSpan(0, (int)oldBuffer.Length)); _bytePool.Return(_rentedBuffer); _rentedBuffer = null; } @@ -258,7 +260,7 @@ namespace Microsoft.AspNetCore.WebUtilities if (read > 0) { - _buffer.Write(buffer, offset, read); + _buffer.Write(buffer.Slice(0, read)); } else { @@ -268,24 +270,34 @@ namespace Microsoft.AspNetCore.WebUtilities return read; } - public override async Task ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) + public override int Read(byte[] buffer, int offset, int count) + { + return Read(buffer.AsSpan(offset, count)); + } + + public override Task ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) + { + return ReadAsync(buffer.AsMemory(offset, count), cancellationToken).AsTask(); + } + + public override async ValueTask ReadAsync(Memory buffer, CancellationToken cancellationToken = default) { ThrowIfDisposed(); + if (_buffer.Position < _buffer.Length || _completelyBuffered) { // Just read from the buffer - return await _buffer.ReadAsync(buffer, offset, (int)Math.Min(count, _buffer.Length - _buffer.Position), cancellationToken); + return await _buffer.ReadAsync(buffer, cancellationToken); } - int read = await _inner.ReadAsync(buffer, offset, count, cancellationToken); + var read = await _inner.ReadAsync(buffer, cancellationToken); if (_bufferLimit.HasValue && _bufferLimit - read < _buffer.Length) { - Dispose(); throw new IOException("Buffer limit exceeded."); } - if (_inMemory && _buffer.Length + read > _memoryThreshold) + if (_inMemory && _memoryThreshold - read < _buffer.Length) { _inMemory = false; var oldBuffer = _buffer; @@ -297,11 +309,11 @@ namespace Microsoft.AspNetCore.WebUtilities try { // oldBuffer is a MemoryStream, no need to do async reads. - var copyRead = oldBuffer.Read(rentedBuffer, 0, rentedBuffer.Length); + var copyRead = oldBuffer.Read(rentedBuffer); while (copyRead > 0) { - await _buffer.WriteAsync(rentedBuffer, 0, copyRead, cancellationToken); - copyRead = oldBuffer.Read(rentedBuffer, 0, rentedBuffer.Length); + await _buffer.WriteAsync(rentedBuffer.AsMemory(0, copyRead), cancellationToken); + copyRead = oldBuffer.Read(rentedBuffer); } } finally @@ -311,7 +323,7 @@ namespace Microsoft.AspNetCore.WebUtilities } else { - await _buffer.WriteAsync(_rentedBuffer, 0, (int)oldBuffer.Length, cancellationToken); + await _buffer.WriteAsync(_rentedBuffer.AsMemory(0, (int)oldBuffer.Length), cancellationToken); _bytePool.Return(_rentedBuffer); _rentedBuffer = null; } @@ -319,7 +331,7 @@ namespace Microsoft.AspNetCore.WebUtilities if (read > 0) { - await _buffer.WriteAsync(buffer, offset, read, cancellationToken); + await _buffer.WriteAsync(buffer.Slice(0, read), cancellationToken); } else { @@ -349,6 +361,39 @@ namespace Microsoft.AspNetCore.WebUtilities throw new NotSupportedException(); } + public override Task CopyToAsync(Stream destination, int bufferSize, CancellationToken cancellationToken) + { + // If we're completed buffered then copy from the underlying source + if (_completelyBuffered) + { + return _buffer.CopyToAsync(destination, bufferSize, cancellationToken); + } + + async Task CopyToAsyncImpl() + { + // At least a 4K buffer + byte[] buffer = _bytePool.Rent(Math.Min(bufferSize, 4096)); + try + { + while (true) + { + int bytesRead = await ReadAsync(buffer, cancellationToken); + if (bytesRead == 0) + { + break; + } + await destination.WriteAsync(buffer.AsMemory(0, bytesRead), cancellationToken); + } + } + finally + { + _bytePool.Return(buffer); + } + } + + return CopyToAsyncImpl(); + } + protected override void Dispose(bool disposing) { if (!_disposed) diff --git a/src/Http/WebUtilities/src/FormPipeReader.cs b/src/Http/WebUtilities/src/FormPipeReader.cs index bcb553458d..18a9762f7f 100644 --- a/src/Http/WebUtilities/src/FormPipeReader.cs +++ b/src/Http/WebUtilities/src/FormPipeReader.cs @@ -47,10 +47,10 @@ namespace Microsoft.AspNetCore.WebUtilities public FormPipeReader(PipeReader pipeReader, Encoding encoding) { -#pragma warning disable CS0618, MSLIB0001 // Type or member is obsolete +#pragma warning disable CS0618, SYSLIB0001 // Type or member is obsolete if (encoding == Encoding.UTF7) { -#pragma warning restore CS0618, MSLIB0001 // Type or member is obsolete +#pragma warning restore CS0618, SYSLIB0001 // Type or member is obsolete throw new ArgumentException("UTF7 is unsupported and insecure. Please select a different encoding."); } @@ -271,7 +271,7 @@ namespace Microsoft.AspNetCore.WebUtilities var keyValueReader = new SequenceReader(keyValuePair); ReadOnlySequence value; - if (keyValueReader.TryReadTo(out var key, equalsDelimiter)) + if (keyValueReader.TryReadTo(out ReadOnlySequence key, equalsDelimiter)) { if (key.Length > KeyLengthLimit) { diff --git a/src/Http/WebUtilities/src/MultipartSectionStreamExtensions.cs b/src/Http/WebUtilities/src/MultipartSectionStreamExtensions.cs index 58c16bd605..e7d9ab0353 100644 --- a/src/Http/WebUtilities/src/MultipartSectionStreamExtensions.cs +++ b/src/Http/WebUtilities/src/MultipartSectionStreamExtensions.cs @@ -34,9 +34,9 @@ namespace Microsoft.AspNetCore.WebUtilities MediaTypeHeaderValue.TryParse(section.ContentType, out var sectionMediaType); var streamEncoding = sectionMediaType?.Encoding; -#pragma warning disable CS0618, MSLIB0001 // Type or member is obsolete +#pragma warning disable CS0618, SYSLIB0001 // Type or member is obsolete if (streamEncoding == null || streamEncoding == Encoding.UTF7) -#pragma warning restore CS0618, MSLIB0001 // Type or member is obsolete +#pragma warning restore CS0618, SYSLIB0001 // Type or member is obsolete { streamEncoding = Encoding.UTF8; } diff --git a/src/Http/WebUtilities/test/FileBufferingReadStreamTests.cs b/src/Http/WebUtilities/test/FileBufferingReadStreamTests.cs index 1c4be62508..e00292acc1 100644 --- a/src/Http/WebUtilities/test/FileBufferingReadStreamTests.cs +++ b/src/Http/WebUtilities/test/FileBufferingReadStreamTests.cs @@ -4,6 +4,7 @@ using System; using System.Buffers; using System.IO; +using System.Linq; using System.Text; using System.Threading.Tasks; using Moq; @@ -157,7 +158,6 @@ namespace Microsoft.AspNetCore.WebUtilities Assert.Equal("Buffer limit exceeded.", exception.Message); Assert.False(stream.InMemory); Assert.NotNull(stream.TempFileName); - Assert.False(File.Exists(tempFileName)); } Assert.False(File.Exists(tempFileName)); @@ -287,7 +287,6 @@ namespace Microsoft.AspNetCore.WebUtilities Assert.Equal("Buffer limit exceeded.", exception.Message); Assert.False(stream.InMemory); Assert.NotNull(stream.TempFileName); - Assert.False(File.Exists(tempFileName)); } Assert.False(File.Exists(tempFileName)); @@ -351,6 +350,138 @@ namespace Microsoft.AspNetCore.WebUtilities Assert.False(File.Exists(tempFileName)); } + [Fact] + public async Task CopyToAsyncWorks() + { + var data = Enumerable.Range(0, 1024).Select(b => (byte)b).Reverse().ToArray(); + var inner = new MemoryStream(data); + + using var stream = new FileBufferingReadStream(inner, 1024 * 1024, bufferLimit: null, GetCurrentDirectory()); + + var withoutBufferMs = new MemoryStream(); + await stream.CopyToAsync(withoutBufferMs); + + var withBufferMs = new MemoryStream(); + stream.Position = 0; + await stream.CopyToAsync(withBufferMs); + + Assert.Equal(data, withoutBufferMs.ToArray()); + Assert.Equal(data, withBufferMs.ToArray()); + } + + [Fact] + public async Task CopyToAsyncWorksWithFileThreshold() + { + var data = Enumerable.Range(0, 1024).Select(b => (byte)b).Reverse().ToArray(); + var inner = new MemoryStream(data); + + using var stream = new FileBufferingReadStream(inner, 100, bufferLimit: null, GetCurrentDirectory()); + + var withoutBufferMs = new MemoryStream(); + await stream.CopyToAsync(withoutBufferMs); + + var withBufferMs = new MemoryStream(); + stream.Position = 0; + await stream.CopyToAsync(withBufferMs); + + Assert.Equal(data, withoutBufferMs.ToArray()); + Assert.Equal(data, withBufferMs.ToArray()); + } + + [Fact] + public async Task ReadAsyncThenCopyToAsyncWorks() + { + var data = Enumerable.Range(0, 1024).Select(b => (byte)b).ToArray(); + var inner = new MemoryStream(data); + + using var stream = new FileBufferingReadStream(inner, 1024 * 1024, bufferLimit: null, GetCurrentDirectory()); + + var withoutBufferMs = new MemoryStream(); + var buffer = new byte[100]; + await stream.ReadAsync(buffer); + await stream.CopyToAsync(withoutBufferMs); + + Assert.Equal(data.AsMemory(0, 100).ToArray(), buffer); + Assert.Equal(data.AsMemory(100).ToArray(), withoutBufferMs.ToArray()); + } + + [Fact] + public async Task ReadThenCopyToAsyncWorks() + { + var data = Enumerable.Range(0, 1024).Select(b => (byte)b).ToArray(); + var inner = new MemoryStream(data); + + using var stream = new FileBufferingReadStream(inner, 1024 * 1024, bufferLimit: null, GetCurrentDirectory()); + + var withoutBufferMs = new MemoryStream(); + var buffer = new byte[100]; + var read = stream.Read(buffer); + await stream.CopyToAsync(withoutBufferMs); + + Assert.Equal(100, read); + Assert.Equal(data.AsMemory(0, read).ToArray(), buffer); + Assert.Equal(data.AsMemory(read).ToArray(), withoutBufferMs.ToArray()); + } + + [Fact] + public async Task ReadThenSeekThenCopyToAsyncWorks() + { + var data = Enumerable.Range(0, 1024).Select(b => (byte)b).ToArray(); + var inner = new MemoryStream(data); + + using var stream = new FileBufferingReadStream(inner, 1024 * 1024, bufferLimit: null, GetCurrentDirectory()); + + var withoutBufferMs = new MemoryStream(); + var buffer = new byte[100]; + var read = stream.Read(buffer); + stream.Position = 0; + await stream.CopyToAsync(withoutBufferMs); + + Assert.Equal(100, read); + Assert.Equal(data.AsMemory(0, read).ToArray(), buffer); + Assert.Equal(data.ToArray(), withoutBufferMs.ToArray()); + } + + [Fact] + public void PartialReadThenSeekReplaysBuffer() + { + var data = Enumerable.Range(0, 1024).Select(b => (byte)b).ToArray(); + var inner = new MemoryStream(data); + + using var stream = new FileBufferingReadStream(inner, 1024 * 1024, bufferLimit: null, GetCurrentDirectory()); + + var withoutBufferMs = new MemoryStream(); + var buffer = new byte[100]; + var read1 = stream.Read(buffer); + stream.Position = 0; + var buffer2 = new byte[200]; + var read2 = stream.Read(buffer2); + Assert.Equal(100, read1); + Assert.Equal(100, read2); + Assert.Equal(data.AsMemory(0, read1).ToArray(), buffer); + Assert.Equal(data.AsMemory(0, read2).ToArray(), buffer2.AsMemory(0, read2).ToArray()); + } + + [Fact] + public async Task PartialReadAsyncThenSeekReplaysBuffer() + { + var data = Enumerable.Range(0, 1024).Select(b => (byte)b).ToArray(); + var inner = new MemoryStream(data); + + using var stream = new FileBufferingReadStream(inner, 1024 * 1024, bufferLimit: null, GetCurrentDirectory()); + + var withoutBufferMs = new MemoryStream(); + var buffer = new byte[100]; + var read1 = await stream.ReadAsync(buffer); + stream.Position = 0; + var buffer2 = new byte[200]; + var read2 = await stream.ReadAsync(buffer2); + Assert.Equal(100, read1); + Assert.Equal(100, read2); + Assert.Equal(data.AsMemory(0, read1).ToArray(), buffer); + Assert.Equal(data.AsMemory(0, read2).ToArray(), buffer2.AsMemory(0, read2).ToArray()); + } + private static string GetCurrentDirectory() { return AppContext.BaseDirectory; diff --git a/src/Identity/EntityFrameworkCore/src/UserStore.cs b/src/Identity/EntityFrameworkCore/src/UserStore.cs index 4709916a12..362d046548 100644 --- a/src/Identity/EntityFrameworkCore/src/UserStore.cs +++ b/src/Identity/EntityFrameworkCore/src/UserStore.cs @@ -322,7 +322,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore return UserLogins.SingleOrDefaultAsync(userLogin => userLogin.LoginProvider == loginProvider && userLogin.ProviderKey == providerKey, cancellationToken); } - /// /// Adds the given to the specified . /// @@ -637,7 +636,7 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore cancellationToken.ThrowIfCancellationRequested(); ThrowIfDisposed(); - return Task.FromResult(Users.Where(u => u.NormalizedEmail == normalizedEmail).SingleOrDefault()); + return Users.SingleOrDefaultAsync(u => u.NormalizedEmail == normalizedEmail); } /// @@ -719,7 +718,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore return Task.CompletedTask; } - /// /// Remove a new user token. /// diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Login.cshtml.cs b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Login.cshtml.cs index 8b21750186..c052f1ec01 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Login.cshtml.cs +++ b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Login.cshtml.cs @@ -109,7 +109,7 @@ namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Account.Internal ModelState.AddModelError(string.Empty, ErrorMessage); } - returnUrl = returnUrl ?? Url.Content("~/"); + returnUrl ??= Url.Content("~/"); // Clear the existing external cookie to ensure a clean login process await HttpContext.SignOutAsync(IdentityConstants.ExternalScheme); @@ -121,7 +121,7 @@ namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Account.Internal public override async Task OnPostAsync(string returnUrl = null) { - returnUrl = returnUrl ?? Url.Content("~/"); + returnUrl ??= Url.Content("~/"); ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList(); diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/PersonalData.cshtml b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/PersonalData.cshtml index 8786fb8858..d64bd826cf 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/PersonalData.cshtml +++ b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/PersonalData.cshtml @@ -17,7 +17,7 @@

- Delete + Delete

diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Register.cshtml.cs b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Register.cshtml.cs index 8e2a7e2faf..1276e61969 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Register.cshtml.cs +++ b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Register.cshtml.cs @@ -126,7 +126,7 @@ namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Account.Internal public override async Task OnPostAsync(string returnUrl = null) { - returnUrl = returnUrl ?? Url.Content("~/"); + returnUrl ??= Url.Content("~/"); ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList(); if (ModelState.IsValid) { diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/ResendEmailConfirmation.cshtml.cs b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/ResendEmailConfirmation.cshtml.cs index 559ce47bc5..d762777c5f 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/ResendEmailConfirmation.cshtml.cs +++ b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/ResendEmailConfirmation.cshtml.cs @@ -20,7 +20,7 @@ namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Account.Internal ///
[AllowAnonymous] [IdentityDefaultUI(typeof(ResendEmailConfirmationModel<>))] - public abstract class ResendEmailConfirmationModel : PageModel + public class ResendEmailConfirmationModel : PageModel { /// /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V4/_Layout.cshtml b/src/Identity/UI/src/Areas/Identity/Pages/V4/_Layout.cshtml index fba362e452..f3af76940b 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V4/_Layout.cshtml +++ b/src/Identity/UI/src/Areas/Identity/Pages/V4/_Layout.cshtml @@ -89,6 +89,6 @@ - @RenderSection("Scripts", required: false) + @await RenderSectionAsync("Scripts", required: false) diff --git a/src/Middleware/Diagnostics/test/UnitTests/ExceptionHandlerTest.cs b/src/Middleware/Diagnostics/test/UnitTests/ExceptionHandlerTest.cs index a61576cc78..c09bc66768 100644 --- a/src/Middleware/Diagnostics/test/UnitTests/ExceptionHandlerTest.cs +++ b/src/Middleware/Diagnostics/test/UnitTests/ExceptionHandlerTest.cs @@ -15,6 +15,7 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.TestHost; +using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Xunit; @@ -122,6 +123,7 @@ namespace Microsoft.AspNetCore.Diagnostics } [Fact] + [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/24146")] public async Task ClearsResponseBuffer_BeforeRequestIsReexecuted() { var expectedResponseBody = "New response body"; diff --git a/src/MusicStore/samples/MusicStore/Program.cs b/src/MusicStore/samples/MusicStore/Program.cs index ca81340f1f..6a5993d459 100644 --- a/src/MusicStore/samples/MusicStore/Program.cs +++ b/src/MusicStore/samples/MusicStore/Program.cs @@ -1,72 +1,78 @@ using System; using System.IO; +using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Server.HttpSys; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace MusicStore { public static class Program { - public static void Main(string[] args) + public static Task Main(string[] args) { var config = new ConfigurationBuilder() .AddCommandLine(args) .AddEnvironmentVariables(prefix: "ASPNETCORE_") .Build(); - var builder = new WebHostBuilder() - .UseConfiguration(config) - .UseIISIntegration() - .UseStartup("MusicStore") + var builder = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseConfiguration(config) + .UseIISIntegration() + .UseStartup("MusicStore"); + + var environment = webHostBuilder.GetSetting("environment") ?? + Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); + + if (string.Equals(webHostBuilder.GetSetting("server"), "Microsoft.AspNetCore.Server.HttpSys", System.StringComparison.Ordinal)) + { + if (string.Equals(environment, "NtlmAuthentication", System.StringComparison.Ordinal)) + { + // Set up NTLM authentication for WebListener like below. + // For IIS and IISExpress: Use inetmgr to setup NTLM authentication on the application vDir or + // modify the applicationHost.config to enable NTLM. + webHostBuilder.UseHttpSys(options => + { + options.Authentication.Schemes = AuthenticationSchemes.NTLM; + options.Authentication.AllowAnonymous = false; + }); + } + else + { + webHostBuilder.UseHttpSys(); + } + } + else + { + webHostBuilder.UseKestrel(); + } + + // In Proc + webHostBuilder.UseIIS(); + + webHostBuilder.ConfigureLogging(factory => + { + factory.AddConsole(); + + var logLevel = string.Equals(environment, "Development", StringComparison.Ordinal) ? LogLevel.Information : LogLevel.Warning; + factory.SetMinimumLevel(logLevel); + + // Turn off Info logging for EF commands + factory.AddFilter("Microsoft.EntityFrameworkCore.Database.Command", LogLevel.Warning); + }); + }) .UseDefaultServiceProvider((context, options) => { options.ValidateScopes = true; }); - var environment = builder.GetSetting("environment") ?? - Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); - - if (string.Equals(builder.GetSetting("server"), "Microsoft.AspNetCore.Server.HttpSys", System.StringComparison.Ordinal)) - { - if (string.Equals(environment, "NtlmAuthentication", System.StringComparison.Ordinal)) - { - // Set up NTLM authentication for WebListener like below. - // For IIS and IISExpress: Use inetmgr to setup NTLM authentication on the application vDir or - // modify the applicationHost.config to enable NTLM. - builder.UseHttpSys(options => - { - options.Authentication.Schemes = AuthenticationSchemes.NTLM; - options.Authentication.AllowAnonymous = false; - }); - } - else - { - builder.UseHttpSys(); - } - } - else - { - builder.UseKestrel(); - } - - // In Proc - builder.UseIIS(); - - builder.ConfigureLogging(factory => - { - factory.AddConsole(); - - var logLevel = string.Equals(environment, "Development", StringComparison.Ordinal) ? LogLevel.Information : LogLevel.Warning; - factory.SetMinimumLevel(logLevel); - - // Turn off Info logging for EF commands - factory.AddFilter("Microsoft.EntityFrameworkCore.Database.Command", LogLevel.Warning); - }); - var host = builder.Build(); - host.Run(); + return host.RunAsync(); } } } diff --git a/src/Mvc/Mvc.Abstractions/src/ActionConstraints/ActionConstraintProviderContext.cs b/src/Mvc/Mvc.Abstractions/src/ActionConstraints/ActionConstraintProviderContext.cs index d740257203..7d23cd50f5 100644 --- a/src/Mvc/Mvc.Abstractions/src/ActionConstraints/ActionConstraintProviderContext.cs +++ b/src/Mvc/Mvc.Abstractions/src/ActionConstraints/ActionConstraintProviderContext.cs @@ -59,4 +59,4 @@ namespace Microsoft.AspNetCore.Mvc.ActionConstraints /// public IList Results { get; } } -} \ No newline at end of file +} diff --git a/src/Mvc/Mvc.Abstractions/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.Abstractions/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.Abstractions/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.Abstractions/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.Abstractions/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..af32a8728d --- /dev/null +++ b/src/Mvc/Mvc.Abstractions/src/PublicAPI.Unshipped.txt @@ -0,0 +1,859 @@ +#nullable enable +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.ActionConstraints.get -> System.Collections.Generic.IList? +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.ActionConstraints.set -> void +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.ActionDescriptor() -> void +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.AttributeRouteInfo.get -> Microsoft.AspNetCore.Mvc.Routing.AttributeRouteInfo? +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.AttributeRouteInfo.set -> void +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.BoundProperties.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.BoundProperties.set -> void +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.EndpointMetadata.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.EndpointMetadata.set -> void +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.FilterDescriptors.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.FilterDescriptors.set -> void +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.Id.get -> string! +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.Parameters.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.Parameters.set -> void +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.Properties.get -> System.Collections.Generic.IDictionary! +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.Properties.set -> void +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.RouteValues.get -> System.Collections.Generic.IDictionary! +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.RouteValues.set -> void +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptorExtensions +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptorProviderContext +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptorProviderContext.ActionDescriptorProviderContext() -> void +Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptorProviderContext.Results.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.Abstractions.ActionInvokerProviderContext +Microsoft.AspNetCore.Mvc.Abstractions.ActionInvokerProviderContext.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext! +Microsoft.AspNetCore.Mvc.Abstractions.ActionInvokerProviderContext.ActionInvokerProviderContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext) -> void +Microsoft.AspNetCore.Mvc.Abstractions.ActionInvokerProviderContext.Result.get -> Microsoft.AspNetCore.Mvc.Abstractions.IActionInvoker? +Microsoft.AspNetCore.Mvc.Abstractions.ActionInvokerProviderContext.Result.set -> void +Microsoft.AspNetCore.Mvc.Abstractions.IActionDescriptorProvider +Microsoft.AspNetCore.Mvc.Abstractions.IActionDescriptorProvider.OnProvidersExecuted(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptorProviderContext! context) -> void +Microsoft.AspNetCore.Mvc.Abstractions.IActionDescriptorProvider.OnProvidersExecuting(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptorProviderContext! context) -> void +Microsoft.AspNetCore.Mvc.Abstractions.IActionDescriptorProvider.Order.get -> int +Microsoft.AspNetCore.Mvc.Abstractions.IActionInvoker +Microsoft.AspNetCore.Mvc.Abstractions.IActionInvoker.InvokeAsync() -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.Mvc.Abstractions.IActionInvokerProvider +Microsoft.AspNetCore.Mvc.Abstractions.IActionInvokerProvider.OnProvidersExecuted(Microsoft.AspNetCore.Mvc.Abstractions.ActionInvokerProviderContext! context) -> void +Microsoft.AspNetCore.Mvc.Abstractions.IActionInvokerProvider.OnProvidersExecuting(Microsoft.AspNetCore.Mvc.Abstractions.ActionInvokerProviderContext! context) -> void +Microsoft.AspNetCore.Mvc.Abstractions.IActionInvokerProvider.Order.get -> int +Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor +Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor.BindingInfo.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo! +Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor.BindingInfo.set -> void +Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor.Name.get -> string! +Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor.Name.set -> void +Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor.ParameterDescriptor() -> void +Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor.ParameterType.get -> System.Type! +Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor.ParameterType.set -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintContext +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintContext.ActionConstraintContext() -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintContext.Candidates.get -> System.Collections.Generic.IReadOnlyList! +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintContext.Candidates.set -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintContext.CurrentCandidate.get -> Microsoft.AspNetCore.Mvc.ActionConstraints.ActionSelectorCandidate +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintContext.CurrentCandidate.set -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintContext.RouteContext.get -> Microsoft.AspNetCore.Routing.RouteContext! +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintContext.RouteContext.set -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintItem +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintItem.ActionConstraintItem(Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraintMetadata! metadata) -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintItem.Constraint.get -> Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraint! +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintItem.Constraint.set -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintItem.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintItem.IsReusable.set -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintItem.Metadata.get -> Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraintMetadata! +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintProviderContext +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintProviderContext.Action.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor! +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintProviderContext.ActionConstraintProviderContext(Microsoft.AspNetCore.Http.HttpContext! context, Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor! action, System.Collections.Generic.IList! items) -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintProviderContext.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext! +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintProviderContext.Results.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionSelectorCandidate +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionSelectorCandidate.Action.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor! +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionSelectorCandidate.ActionSelectorCandidate(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor! action, System.Collections.Generic.IReadOnlyList! constraints) -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionSelectorCandidate.Constraints.get -> System.Collections.Generic.IReadOnlyList! +Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraint +Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraint.Accept(Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintContext! context) -> bool +Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraint.Order.get -> int +Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraintFactory +Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraintFactory.CreateInstance(System.IServiceProvider! services) -> Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraint! +Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraintFactory.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraintMetadata +Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraintProvider +Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraintProvider.OnProvidersExecuted(Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintProviderContext! context) -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraintProvider.OnProvidersExecuting(Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintProviderContext! context) -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.IActionConstraintProvider.Order.get -> int +Microsoft.AspNetCore.Mvc.ActionContext +Microsoft.AspNetCore.Mvc.ActionContext.ActionContext() -> void +Microsoft.AspNetCore.Mvc.ActionContext.ActionContext(Microsoft.AspNetCore.Http.HttpContext! httpContext, Microsoft.AspNetCore.Routing.RouteData! routeData, Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor! actionDescriptor) -> void +Microsoft.AspNetCore.Mvc.ActionContext.ActionContext(Microsoft.AspNetCore.Http.HttpContext! httpContext, Microsoft.AspNetCore.Routing.RouteData! routeData, Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor! actionDescriptor, Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! modelState) -> void +Microsoft.AspNetCore.Mvc.ActionContext.ActionContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext) -> void +Microsoft.AspNetCore.Mvc.ActionContext.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor! +Microsoft.AspNetCore.Mvc.ActionContext.ActionDescriptor.set -> void +Microsoft.AspNetCore.Mvc.ActionContext.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext! +Microsoft.AspNetCore.Mvc.ActionContext.HttpContext.set -> void +Microsoft.AspNetCore.Mvc.ActionContext.ModelState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! +Microsoft.AspNetCore.Mvc.ActionContext.RouteData.get -> Microsoft.AspNetCore.Routing.RouteData! +Microsoft.AspNetCore.Mvc.ActionContext.RouteData.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.ActionDescriptor.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.ApiDescription() -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.GroupName.get -> string? +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.GroupName.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.HttpMethod.get -> string? +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.HttpMethod.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.ParameterDescriptions.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.Properties.get -> System.Collections.Generic.IDictionary! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.RelativePath.get -> string! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.RelativePath.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.SupportedRequestFormats.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.SupportedResponseTypes.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext.Actions.get -> System.Collections.Generic.IReadOnlyList! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext.ApiDescriptionProviderContext(System.Collections.Generic.IReadOnlyList! actions) -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext.Results.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.ApiParameterDescription() -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.BindingInfo.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo? +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.BindingInfo.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.DefaultValue.get -> object? +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.DefaultValue.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.IsRequired.get -> bool +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.IsRequired.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.ModelMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.ModelMetadata.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.Name.get -> string! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.Name.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.ParameterDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.ParameterDescriptor.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.RouteInfo.get -> Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo? +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.RouteInfo.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.Source.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.Source.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.Type.get -> System.Type! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.Type.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.ApiParameterRouteInfo() -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.Constraints.get -> System.Collections.Generic.IEnumerable? +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.Constraints.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.DefaultValue.get -> object? +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.DefaultValue.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.IsOptional.get -> bool +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.IsOptional.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiRequestFormat +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiRequestFormat.ApiRequestFormat() -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiRequestFormat.Formatter.get -> Microsoft.AspNetCore.Mvc.Formatters.IInputFormatter! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiRequestFormat.Formatter.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiRequestFormat.MediaType.get -> string! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiRequestFormat.MediaType.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseFormat +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseFormat.ApiResponseFormat() -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseFormat.Formatter.get -> Microsoft.AspNetCore.Mvc.Formatters.IOutputFormatter! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseFormat.Formatter.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseFormat.MediaType.get -> string! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseFormat.MediaType.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.ApiResponseFormats.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.ApiResponseFormats.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.ApiResponseType() -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.IsDefaultResponse.get -> bool +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.IsDefaultResponse.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.ModelMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata? +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.ModelMetadata.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.StatusCode.get -> int +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.StatusCode.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.Type.get -> System.Type? +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.Type.set -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionProvider +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionProvider.OnProvidersExecuted(Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext! context) -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionProvider.OnProvidersExecuting(Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext! context) -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionProvider.Order.get -> int +Microsoft.AspNetCore.Mvc.Authorization.IAllowAnonymousFilter +Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext +Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext.ActionExecutedContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext, System.Collections.Generic.IList! filters, object! controller) -> void +Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext +Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext.ActionExecutingContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext, System.Collections.Generic.IList! filters, System.Collections.Generic.IDictionary! actionArguments, object! controller) -> void +Microsoft.AspNetCore.Mvc.Filters.ActionExecutionDelegate +Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext +Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext.AuthorizationFilterContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext, System.Collections.Generic.IList! filters) -> void +Microsoft.AspNetCore.Mvc.Filters.ExceptionContext +Microsoft.AspNetCore.Mvc.Filters.ExceptionContext.ExceptionContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext, System.Collections.Generic.IList! filters) -> void +Microsoft.AspNetCore.Mvc.Filters.FilterContext +Microsoft.AspNetCore.Mvc.Filters.FilterContext.FilterContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext, System.Collections.Generic.IList! filters) -> void +Microsoft.AspNetCore.Mvc.Filters.FilterContext.FindEffectivePolicy() -> TMetadata +Microsoft.AspNetCore.Mvc.Filters.FilterContext.IsEffectivePolicy(TMetadata policy) -> bool +Microsoft.AspNetCore.Mvc.Filters.FilterDescriptor +Microsoft.AspNetCore.Mvc.Filters.FilterDescriptor.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata! +Microsoft.AspNetCore.Mvc.Filters.FilterDescriptor.FilterDescriptor(Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata! filter, int filterScope) -> void +Microsoft.AspNetCore.Mvc.Filters.FilterDescriptor.Order.get -> int +Microsoft.AspNetCore.Mvc.Filters.FilterDescriptor.Order.set -> void +Microsoft.AspNetCore.Mvc.Filters.FilterDescriptor.Scope.get -> int +Microsoft.AspNetCore.Mvc.Filters.FilterItem +Microsoft.AspNetCore.Mvc.Filters.FilterItem.Descriptor.get -> Microsoft.AspNetCore.Mvc.Filters.FilterDescriptor! +Microsoft.AspNetCore.Mvc.Filters.FilterItem.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata! +Microsoft.AspNetCore.Mvc.Filters.FilterItem.Filter.set -> void +Microsoft.AspNetCore.Mvc.Filters.FilterItem.FilterItem(Microsoft.AspNetCore.Mvc.Filters.FilterDescriptor! descriptor) -> void +Microsoft.AspNetCore.Mvc.Filters.FilterItem.FilterItem(Microsoft.AspNetCore.Mvc.Filters.FilterDescriptor! descriptor, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata! filter) -> void +Microsoft.AspNetCore.Mvc.Filters.FilterItem.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.Filters.FilterItem.IsReusable.set -> void +Microsoft.AspNetCore.Mvc.Filters.FilterProviderContext +Microsoft.AspNetCore.Mvc.Filters.FilterProviderContext.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext! +Microsoft.AspNetCore.Mvc.Filters.FilterProviderContext.ActionContext.set -> void +Microsoft.AspNetCore.Mvc.Filters.FilterProviderContext.FilterProviderContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext, System.Collections.Generic.IList! items) -> void +Microsoft.AspNetCore.Mvc.Filters.FilterProviderContext.Results.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.Filters.FilterProviderContext.Results.set -> void +Microsoft.AspNetCore.Mvc.Filters.IActionFilter +Microsoft.AspNetCore.Mvc.Filters.IActionFilter.OnActionExecuted(Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext! context) -> void +Microsoft.AspNetCore.Mvc.Filters.IActionFilter.OnActionExecuting(Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext! context) -> void +Microsoft.AspNetCore.Mvc.Filters.IAlwaysRunResultFilter +Microsoft.AspNetCore.Mvc.Filters.IAsyncActionFilter +Microsoft.AspNetCore.Mvc.Filters.IAsyncActionFilter.OnActionExecutionAsync(Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext! context, Microsoft.AspNetCore.Mvc.Filters.ActionExecutionDelegate! next) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.Mvc.Filters.IAsyncAlwaysRunResultFilter +Microsoft.AspNetCore.Mvc.Filters.IAsyncAuthorizationFilter +Microsoft.AspNetCore.Mvc.Filters.IAsyncAuthorizationFilter.OnAuthorizationAsync(Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext! context) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.Mvc.Filters.IAsyncExceptionFilter +Microsoft.AspNetCore.Mvc.Filters.IAsyncExceptionFilter.OnExceptionAsync(Microsoft.AspNetCore.Mvc.Filters.ExceptionContext! context) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.Mvc.Filters.IAsyncResourceFilter +Microsoft.AspNetCore.Mvc.Filters.IAsyncResourceFilter.OnResourceExecutionAsync(Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext! context, Microsoft.AspNetCore.Mvc.Filters.ResourceExecutionDelegate! next) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.Mvc.Filters.IAsyncResultFilter +Microsoft.AspNetCore.Mvc.Filters.IAsyncResultFilter.OnResultExecutionAsync(Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext! context, Microsoft.AspNetCore.Mvc.Filters.ResultExecutionDelegate! next) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.Mvc.Filters.IAuthorizationFilter +Microsoft.AspNetCore.Mvc.Filters.IAuthorizationFilter.OnAuthorization(Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext! context) -> void +Microsoft.AspNetCore.Mvc.Filters.IExceptionFilter +Microsoft.AspNetCore.Mvc.Filters.IExceptionFilter.OnException(Microsoft.AspNetCore.Mvc.Filters.ExceptionContext! context) -> void +Microsoft.AspNetCore.Mvc.Filters.IFilterContainer +Microsoft.AspNetCore.Mvc.Filters.IFilterContainer.FilterDefinition.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata! +Microsoft.AspNetCore.Mvc.Filters.IFilterContainer.FilterDefinition.set -> void +Microsoft.AspNetCore.Mvc.Filters.IFilterFactory +Microsoft.AspNetCore.Mvc.Filters.IFilterFactory.CreateInstance(System.IServiceProvider! serviceProvider) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata! +Microsoft.AspNetCore.Mvc.Filters.IFilterFactory.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +Microsoft.AspNetCore.Mvc.Filters.IFilterProvider +Microsoft.AspNetCore.Mvc.Filters.IFilterProvider.OnProvidersExecuted(Microsoft.AspNetCore.Mvc.Filters.FilterProviderContext! context) -> void +Microsoft.AspNetCore.Mvc.Filters.IFilterProvider.OnProvidersExecuting(Microsoft.AspNetCore.Mvc.Filters.FilterProviderContext! context) -> void +Microsoft.AspNetCore.Mvc.Filters.IFilterProvider.Order.get -> int +Microsoft.AspNetCore.Mvc.Filters.IOrderedFilter +Microsoft.AspNetCore.Mvc.Filters.IOrderedFilter.Order.get -> int +Microsoft.AspNetCore.Mvc.Filters.IResourceFilter +Microsoft.AspNetCore.Mvc.Filters.IResourceFilter.OnResourceExecuted(Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext! context) -> void +Microsoft.AspNetCore.Mvc.Filters.IResourceFilter.OnResourceExecuting(Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext! context) -> void +Microsoft.AspNetCore.Mvc.Filters.IResultFilter +Microsoft.AspNetCore.Mvc.Filters.IResultFilter.OnResultExecuted(Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext! context) -> void +Microsoft.AspNetCore.Mvc.Filters.IResultFilter.OnResultExecuting(Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext! context) -> void +Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext +Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext.ResourceExecutedContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext, System.Collections.Generic.IList! filters) -> void +Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext +Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext.ResourceExecutingContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext, System.Collections.Generic.IList! filters, System.Collections.Generic.IList! valueProviderFactories) -> void +Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext.ValueProviderFactories.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.Filters.ResourceExecutionDelegate +Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext +Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext.ResultExecutedContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext, System.Collections.Generic.IList! filters, Microsoft.AspNetCore.Mvc.IActionResult! result, object! controller) -> void +Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext +Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext.ResultExecutingContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext, System.Collections.Generic.IList! filters, Microsoft.AspNetCore.Mvc.IActionResult! result, object! controller) -> void +Microsoft.AspNetCore.Mvc.Filters.ResultExecutionDelegate +Microsoft.AspNetCore.Mvc.Formatters.FormatterCollection +Microsoft.AspNetCore.Mvc.Formatters.FormatterCollection.FormatterCollection() -> void +Microsoft.AspNetCore.Mvc.Formatters.FormatterCollection.FormatterCollection(System.Collections.Generic.IList! list) -> void +Microsoft.AspNetCore.Mvc.Formatters.FormatterCollection.RemoveType(System.Type! formatterType) -> void +Microsoft.AspNetCore.Mvc.Formatters.FormatterCollection.RemoveType() -> void +Microsoft.AspNetCore.Mvc.Formatters.IInputFormatter +Microsoft.AspNetCore.Mvc.Formatters.IInputFormatter.CanRead(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext! context) -> bool +Microsoft.AspNetCore.Mvc.Formatters.IInputFormatter.ReadAsync(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext! context) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.Mvc.Formatters.IInputFormatterExceptionPolicy +Microsoft.AspNetCore.Mvc.Formatters.IInputFormatterExceptionPolicy.ExceptionPolicy.get -> Microsoft.AspNetCore.Mvc.Formatters.InputFormatterExceptionPolicy +Microsoft.AspNetCore.Mvc.Formatters.IOutputFormatter +Microsoft.AspNetCore.Mvc.Formatters.IOutputFormatter.CanWriteResult(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext! context) -> bool +Microsoft.AspNetCore.Mvc.Formatters.IOutputFormatter.WriteAsync(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext! context) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext! +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext.InputFormatterContext(Microsoft.AspNetCore.Http.HttpContext! httpContext, string! modelName, Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! modelState, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! metadata, System.Func! readerFactory) -> void +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext.InputFormatterContext(Microsoft.AspNetCore.Http.HttpContext! httpContext, string! modelName, Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! modelState, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! metadata, System.Func! readerFactory, bool treatEmptyInputAsDefaultValue) -> void +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext.Metadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext.ModelName.get -> string! +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext.ModelState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext.ModelType.get -> System.Type! +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext.ReaderFactory.get -> System.Func! +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext.TreatEmptyInputAsDefaultValue.get -> bool +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterException +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterException.InputFormatterException() -> void +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterException.InputFormatterException(string! message) -> void +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterException.InputFormatterException(string! message, System.Exception! innerException) -> void +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterExceptionPolicy +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterExceptionPolicy.AllExceptions = 0 -> Microsoft.AspNetCore.Mvc.Formatters.InputFormatterExceptionPolicy +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterExceptionPolicy.MalformedInputExceptions = 1 -> Microsoft.AspNetCore.Mvc.Formatters.InputFormatterExceptionPolicy +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterResult +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterResult.HasError.get -> bool +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterResult.IsModelSet.get -> bool +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterResult.Model.get -> object? +Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext +Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext.OutputFormatterCanWriteContext(Microsoft.AspNetCore.Http.HttpContext! httpContext) -> void +Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext +Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext.OutputFormatterWriteContext(Microsoft.AspNetCore.Http.HttpContext! httpContext, System.Func! writerFactory, System.Type! objectType, object! object) -> void +Microsoft.AspNetCore.Mvc.IActionResult +Microsoft.AspNetCore.Mvc.IActionResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext! context) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.Mvc.IUrlHelper +Microsoft.AspNetCore.Mvc.IUrlHelper.Action(Microsoft.AspNetCore.Mvc.Routing.UrlActionContext! actionContext) -> string! +Microsoft.AspNetCore.Mvc.IUrlHelper.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext! +Microsoft.AspNetCore.Mvc.IUrlHelper.Content(string! contentPath) -> string! +Microsoft.AspNetCore.Mvc.IUrlHelper.IsLocalUrl(string! url) -> bool +Microsoft.AspNetCore.Mvc.IUrlHelper.Link(string! routeName, object! values) -> string! +Microsoft.AspNetCore.Mvc.IUrlHelper.RouteUrl(Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext! routeContext) -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.BinderModelName.get -> string? +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.BinderModelName.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.BinderType.get -> System.Type? +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.BinderType.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.BindingInfo() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.BindingInfo(Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo! other) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource? +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.BindingSource.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.EmptyBodyBehavior.get -> Microsoft.AspNetCore.Mvc.ModelBinding.EmptyBodyBehavior +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.EmptyBodyBehavior.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.PropertyFilterProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IPropertyFilterProvider? +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.PropertyFilterProvider.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.RequestPredicate.get -> System.Func? +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.RequestPredicate.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.TryApplyBindingInfo(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! modelMetadata) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.BindingSource(string! id, string! displayName, bool isGreedy, bool isFromRequest) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.DisplayName.get -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.Equals(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource? other) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.Id.get -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.IsFromRequest.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.IsGreedy.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.CompositeBindingSource +Microsoft.AspNetCore.Mvc.ModelBinding.CompositeBindingSource.BindingSources.get -> System.Collections.Generic.IEnumerable! +Microsoft.AspNetCore.Mvc.ModelBinding.EmptyBodyBehavior +Microsoft.AspNetCore.Mvc.ModelBinding.EmptyBodyBehavior.Allow = 1 -> Microsoft.AspNetCore.Mvc.ModelBinding.EmptyBodyBehavior +Microsoft.AspNetCore.Mvc.ModelBinding.EmptyBodyBehavior.Default = 0 -> Microsoft.AspNetCore.Mvc.ModelBinding.EmptyBodyBehavior +Microsoft.AspNetCore.Mvc.ModelBinding.EmptyBodyBehavior.Disallow = 2 -> Microsoft.AspNetCore.Mvc.ModelBinding.EmptyBodyBehavior +Microsoft.AspNetCore.Mvc.ModelBinding.EnumGroupAndName +Microsoft.AspNetCore.Mvc.ModelBinding.EnumGroupAndName.EnumGroupAndName(string! group, System.Func! name) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.EnumGroupAndName.EnumGroupAndName(string! group, string! name) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.EnumGroupAndName.Group.get -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.EnumGroupAndName.Name.get -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.IBinderTypeProviderMetadata +Microsoft.AspNetCore.Mvc.ModelBinding.IBinderTypeProviderMetadata.BinderType.get -> System.Type! +Microsoft.AspNetCore.Mvc.ModelBinding.IBindingSourceMetadata +Microsoft.AspNetCore.Mvc.ModelBinding.IBindingSourceMetadata.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource? +Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext! bindingContext) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext! context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder! +Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider +Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider.GetMetadataForProperties(System.Type! modelType) -> System.Collections.Generic.IEnumerable! +Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider.GetMetadataForType(System.Type! modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +Microsoft.AspNetCore.Mvc.ModelBinding.IModelNameProvider +Microsoft.AspNetCore.Mvc.ModelBinding.IModelNameProvider.Name.get -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.IPropertyFilterProvider +Microsoft.AspNetCore.Mvc.ModelBinding.IPropertyFilterProvider.PropertyFilter.get -> System.Func! +Microsoft.AspNetCore.Mvc.ModelBinding.IRequestPredicateProvider +Microsoft.AspNetCore.Mvc.ModelBinding.IRequestPredicateProvider.RequestPredicate.get -> System.Func! +Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider +Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider.ContainsPrefix(string! prefix) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider.GetValue(string! key) -> Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult +Microsoft.AspNetCore.Mvc.ModelBinding.IValueProviderFactory +Microsoft.AspNetCore.Mvc.ModelBinding.IValueProviderFactory.CreateValueProviderAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryContext! context) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider.ModelBindingMessageProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.ConstructorInfo.get -> System.Reflection.ConstructorInfo? +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.ContainerType.get -> System.Type? +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.Equals(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity other) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.MetadataKind.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.ModelType.get -> System.Type! +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.Name.get -> string? +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.ParameterInfo.get -> System.Reflection.ParameterInfo? +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.PropertyInfo.get -> System.Reflection.PropertyInfo? +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind.Constructor = 3 -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind.Parameter = 2 -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind.Property = 1 -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind.Type = 0 -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext.ModelBinderProviderContext() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ModelBindingContext() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.NestedScope +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.NestedScope.Dispose() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.NestedScope.NestedScope(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext! context) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.OriginalModelName.get -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.OriginalModelName.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult.Equals(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult other) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult.IsModelSet.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult.Model.get -> object? +Microsoft.AspNetCore.Mvc.ModelBinding.ModelError +Microsoft.AspNetCore.Mvc.ModelBinding.ModelError.ErrorMessage.get -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.ModelError.Exception.get -> System.Exception? +Microsoft.AspNetCore.Mvc.ModelBinding.ModelError.ModelError(System.Exception! exception) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelError.ModelError(System.Exception! exception, string? errorMessage) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelError.ModelError(string? errorMessage) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelErrorCollection +Microsoft.AspNetCore.Mvc.ModelBinding.ModelErrorCollection.Add(System.Exception! exception) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelErrorCollection.Add(string! errorMessage) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelErrorCollection.ModelErrorCollection() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.ContainerType.get -> System.Type? +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.ElementType.get -> System.Type? +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.Equals(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata? other) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.GetDisplayName() -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.Identity.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.IsCollectionType.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.IsComplexType.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.IsEnumerableType.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.IsNullableValueType.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.IsReferenceOrNullableType.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.MetadataKind.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataKind +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.ModelMetadata(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity identity) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.ModelType.get -> System.Type! +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.Name.get -> string? +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.ParameterName.get -> string? +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.PropertyName.get -> string? +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.UnderlyingOrModelType.get -> System.Type! +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadataProvider +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadataProvider.ModelMetadataProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelPropertyCollection +Microsoft.AspNetCore.Mvc.ModelBinding.ModelPropertyCollection.ModelPropertyCollection(System.Collections.Generic.IEnumerable! properties) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelPropertyCollection.this[string! propertyName].get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata? +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.AddModelError(string! key, System.Exception! exception, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! metadata) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.AddModelError(string! key, string! errorMessage) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Clear() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ClearValidationState(string! key) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ContainsKey(string! key) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Count.get -> int +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Enumerator +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Enumerator.Current.get -> System.Collections.Generic.KeyValuePair +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Enumerator.Dispose() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Enumerator.Enumerator(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! dictionary, string! prefix) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Enumerator.MoveNext() -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Enumerator.Reset() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ErrorCount.get -> int +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.FindKeysWithPrefix(string! prefix) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.PrefixEnumerable +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.GetEnumerator() -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Enumerator +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.GetFieldValidationState(string! key) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.GetValidationState(string! key) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.HasReachedMaxErrors.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.IsValid.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.KeyEnumerable +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.KeyEnumerable.GetEnumerator() -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.KeyEnumerator +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.KeyEnumerable.KeyEnumerable(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! dictionary) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.KeyEnumerator +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.KeyEnumerator.Current.get -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.KeyEnumerator.Dispose() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.KeyEnumerator.KeyEnumerator(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! dictionary, string! prefix) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.KeyEnumerator.MoveNext() -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.KeyEnumerator.Reset() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Keys.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.KeyEnumerable +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.MarkFieldSkipped(string! key) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.MarkFieldValid(string! key) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.MaxAllowedErrors.get -> int +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.MaxAllowedErrors.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Merge(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! dictionary) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ModelStateDictionary() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ModelStateDictionary(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! dictionary) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ModelStateDictionary(int maxAllowedErrors) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.PrefixEnumerable +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.PrefixEnumerable.GetEnumerator() -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Enumerator +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.PrefixEnumerable.PrefixEnumerable(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! dictionary, string! prefix) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Remove(string! key) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Root.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry! +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.SetModelValue(string! key, Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult valueProviderResult) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.SetModelValue(string! key, object? rawValue, string! attemptedValue) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.TryAddModelError(string! key, System.Exception! exception, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! metadata) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.TryAddModelError(string! key, string! errorMessage) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.TryAddModelException(string! key, System.Exception! exception) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.TryGetValue(string! key, out Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry? value) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ValidationState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ValueEnumerable +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ValueEnumerable.GetEnumerator() -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ValueEnumerator +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ValueEnumerable.ValueEnumerable(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! dictionary) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ValueEnumerator +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ValueEnumerator.Current.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry! +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ValueEnumerator.Dispose() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ValueEnumerator.MoveNext() -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ValueEnumerator.Reset() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ValueEnumerator.ValueEnumerator(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! dictionary, string! prefix) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.Values.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ValueEnumerable +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.this[string! key].get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry! +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry.AttemptedValue.get -> string? +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry.AttemptedValue.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry.Errors.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelErrorCollection! +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry.ModelStateEntry() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry.RawValue.get -> object? +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry.RawValue.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry.ValidationState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry.ValidationState.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState +Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState.Invalid = 1 -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState +Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState.Skipped = 3 -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState +Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState.Unvalidated = 0 -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState +Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState.Valid = 2 -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState +Microsoft.AspNetCore.Mvc.ModelBinding.TooManyModelErrorsException +Microsoft.AspNetCore.Mvc.ModelBinding.TooManyModelErrorsException.TooManyModelErrorsException(string! message) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientModelValidationContext +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientModelValidationContext.Attributes.get -> System.Collections.Generic.IDictionary! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientModelValidationContext.ClientModelValidationContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! metadata, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider! metadataProvider, System.Collections.Generic.IDictionary! attributes) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorItem +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorItem.ClientValidatorItem() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorItem.ClientValidatorItem(object! validatorMetadata) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorItem.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorItem.IsReusable.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorItem.Validator.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IClientModelValidator! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorItem.Validator.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorItem.ValidatorMetadata.get -> object! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorProviderContext +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorProviderContext.ClientValidatorProviderContext(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! modelMetadata, System.Collections.Generic.IList! items) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorProviderContext.ModelMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorProviderContext.Results.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorProviderContext.ValidatorMetadata.get -> System.Collections.Generic.IReadOnlyList! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IClientModelValidator +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IClientModelValidator.AddValidation(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientModelValidationContext! context) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IClientModelValidatorProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IClientModelValidatorProvider.CreateValidators(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorProviderContext! context) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IModelValidator +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IModelValidator.Validate(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationContext! context) -> System.Collections.Generic.IEnumerable! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IModelValidatorProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IModelValidatorProvider.CreateValidators(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidatorProviderContext! context) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IPropertyValidationFilter +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IPropertyValidationFilter.ShouldValidateEntry(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationEntry entry, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationEntry parentEntry) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IValidationStrategy +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IValidationStrategy.GetChildren(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! metadata, string! key, object! model) -> System.Collections.Generic.IEnumerator! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationContext +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationContext.Container.get -> object! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationContext.Model.get -> object! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationContext.ModelValidationContext(Microsoft.AspNetCore.Mvc.ActionContext! actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! modelMetadata, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider! metadataProvider, object! container, object! model) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationContextBase +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationContextBase.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationContextBase.MetadataProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationContextBase.ModelMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationContextBase.ModelValidationContextBase(Microsoft.AspNetCore.Mvc.ActionContext! actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! modelMetadata, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider! metadataProvider) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationResult +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationResult.MemberName.get -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationResult.Message.get -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationResult.ModelValidationResult(string! memberName, string! message) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidatorProviderContext +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidatorProviderContext.ModelMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidatorProviderContext.ModelMetadata.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidatorProviderContext.ModelValidatorProviderContext(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! modelMetadata, System.Collections.Generic.IList! items) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidatorProviderContext.Results.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidatorProviderContext.ValidatorMetadata.get -> System.Collections.Generic.IReadOnlyList! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationEntry +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationEntry.Key.get -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationEntry.Metadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationEntry.Model.get -> object? +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationEntry.ValidationEntry(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! metadata, string! key, System.Func! modelAccessor) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationEntry.ValidationEntry(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! metadata, string! key, object! model) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.Add(System.Collections.Generic.KeyValuePair item) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.Add(object! key, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry! value) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.Clear() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.Contains(System.Collections.Generic.KeyValuePair item) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.ContainsKey(object! key) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.CopyTo(System.Collections.Generic.KeyValuePair[]! array, int arrayIndex) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.Count.get -> int +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.GetEnumerator() -> System.Collections.Generic.IEnumerator>! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.IsReadOnly.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.Keys.get -> System.Collections.Generic.ICollection! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.Remove(System.Collections.Generic.KeyValuePair item) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.Remove(object! key) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.TryGetValue(object! key, out Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry! value) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.ValidationStateDictionary() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.Values.get -> System.Collections.Generic.ICollection! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.this[object! key].get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry? +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary.this[object! key].set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry.Key.get -> string! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry.Key.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry.Metadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry.Metadata.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry.Strategy.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IValidationStrategy! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry.Strategy.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry.SuppressValidation.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry.SuppressValidation.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry.ValidationStateEntry() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorItem +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorItem.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorItem.IsReusable.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorItem.Validator.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IModelValidator! +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorItem.Validator.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorItem.ValidatorItem() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorItem.ValidatorItem(object! validatorMetadata) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorItem.ValidatorMetadata.get -> object! +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderException +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderException.ValueProviderException(string! message) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderException.ValueProviderException(string! message, System.Exception! innerException) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryContext +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryContext.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext! +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryContext.ValueProviderFactoryContext(Microsoft.AspNetCore.Mvc.ActionContext! context) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryContext.ValueProviders.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.Culture.get -> System.Globalization.CultureInfo! +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.Equals(Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult other) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.FirstValue.get -> string? +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.GetEnumerator() -> System.Collections.Generic.IEnumerator! +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.Length.get -> int +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.ValueProviderResult(Microsoft.Extensions.Primitives.StringValues values) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.ValueProviderResult(Microsoft.Extensions.Primitives.StringValues values, System.Globalization.CultureInfo! culture) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.Values.get -> Microsoft.Extensions.Primitives.StringValues +Microsoft.AspNetCore.Mvc.Routing.AttributeRouteInfo +Microsoft.AspNetCore.Mvc.Routing.AttributeRouteInfo.AttributeRouteInfo() -> void +Microsoft.AspNetCore.Mvc.Routing.AttributeRouteInfo.Name.get -> string! +Microsoft.AspNetCore.Mvc.Routing.AttributeRouteInfo.Name.set -> void +Microsoft.AspNetCore.Mvc.Routing.AttributeRouteInfo.Order.get -> int +Microsoft.AspNetCore.Mvc.Routing.AttributeRouteInfo.Order.set -> void +Microsoft.AspNetCore.Mvc.Routing.AttributeRouteInfo.SuppressLinkGeneration.get -> bool +Microsoft.AspNetCore.Mvc.Routing.AttributeRouteInfo.SuppressLinkGeneration.set -> void +Microsoft.AspNetCore.Mvc.Routing.AttributeRouteInfo.SuppressPathMatching.get -> bool +Microsoft.AspNetCore.Mvc.Routing.AttributeRouteInfo.SuppressPathMatching.set -> void +Microsoft.AspNetCore.Mvc.Routing.AttributeRouteInfo.Template.get -> string? +Microsoft.AspNetCore.Mvc.Routing.AttributeRouteInfo.Template.set -> void +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext.Action.get -> string? +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext.Action.set -> void +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext.Controller.get -> string? +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext.Controller.set -> void +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext.Fragment.get -> string? +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext.Fragment.set -> void +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext.Host.get -> string? +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext.Host.set -> void +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext.Protocol.get -> string? +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext.Protocol.set -> void +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext.UrlActionContext() -> void +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext.Values.get -> object? +Microsoft.AspNetCore.Mvc.Routing.UrlActionContext.Values.set -> void +Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext +Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext.Fragment.get -> string? +Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext.Fragment.set -> void +Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext.Host.get -> string? +Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext.Host.set -> void +Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext.Protocol.get -> string? +Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext.Protocol.set -> void +Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext.RouteName.get -> string? +Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext.RouteName.set -> void +Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext.UrlRouteContext() -> void +Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext.Values.get -> object? +Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext.Values.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext.BindingInfo.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext.CreateBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! metadata) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext.Metadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext.MetadataProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ActionContext.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.BinderModelName.get -> string! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.BinderModelName.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.BindingSource.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.EnterNestedScope() -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.NestedScope +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.EnterNestedScope(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! modelMetadata, string! fieldName, string! modelName, object! model) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.NestedScope +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ExitNestedScope() -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.FieldName.get -> string! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.FieldName.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.IsTopLevelObject.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.IsTopLevelObject.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.Model.get -> object! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.Model.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ModelMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ModelMetadata.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ModelName.get -> string! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ModelName.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ModelState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ModelState.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.PropertyFilter.get -> System.Func! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.PropertyFilter.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.Result.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.Result.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ValidationState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ValidationState.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ValueProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ValueProvider.set -> void +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.AdditionalValues.get -> System.Collections.Generic.IReadOnlyDictionary! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.BinderModelName.get -> string! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.BinderType.get -> System.Type! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.ConvertEmptyStringToNull.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.DataTypeName.get -> string! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.Description.get -> string! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.DisplayFormatString.get -> string! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.DisplayName.get -> string! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.EditFormatString.get -> string! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.ElementMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata? +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.EnumGroupedDisplayNamesAndValues.get -> System.Collections.Generic.IEnumerable>! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.EnumNamesAndValues.get -> System.Collections.Generic.IReadOnlyDictionary! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.HasNonDefaultEditFormat.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.HideSurroundingHtml.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.HtmlEncode.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.IsBindingAllowed.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.IsBindingRequired.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.IsEnum.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.IsFlagsEnum.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.IsReadOnly.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.IsRequired.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.ModelBindingMessageProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.NullDisplayText.get -> string! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.Order.get -> int +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.Placeholder.get -> string! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.Properties.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelPropertyCollection! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.PropertyFilterProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IPropertyFilterProvider! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.PropertyGetter.get -> System.Func! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.PropertySetter.get -> System.Action! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.ShowForDisplay.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.ShowForEdit.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.SimpleDisplayProperty.get -> string! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.TemplateHint.get -> string! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.ValidateChildren.get -> bool +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.ValidatorMetadata.get -> System.Collections.Generic.IReadOnlyList! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadataProvider.GetMetadataForParameter(System.Reflection.ParameterInfo! parameter) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadataProvider.GetMetadataForProperties(System.Type! modelType) -> System.Collections.Generic.IEnumerable! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadataProvider.GetMetadataForType(System.Type! modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry.Children.get -> System.Collections.Generic.IReadOnlyList? +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry.GetModelStateForProperty(string! propertyName) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry? +abstract Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry.IsContainerNode.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.Equals(object? obj) -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.GetHashCode() -> int +override Microsoft.AspNetCore.Mvc.ModelBinding.CompositeBindingSource.CanAcceptDataFrom(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! bindingSource) -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.Equals(object? obj) -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.GetHashCode() -> int +override Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult.Equals(object? obj) -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult.GetHashCode() -> int +override Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult.ToString() -> string! +override Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.Equals(object? obj) -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.GetHashCode() -> int +override Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.Equals(object? obj) -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.GetHashCode() -> int +override Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.ToString() -> string! +static Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptorExtensions.GetProperty(this Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor! actionDescriptor) -> T +static Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptorExtensions.SetProperty(this Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor! actionDescriptor, T value) -> void +static Microsoft.AspNetCore.Mvc.Formatters.InputFormatterResult.Failure() -> Microsoft.AspNetCore.Mvc.Formatters.InputFormatterResult! +static Microsoft.AspNetCore.Mvc.Formatters.InputFormatterResult.FailureAsync() -> System.Threading.Tasks.Task! +static Microsoft.AspNetCore.Mvc.Formatters.InputFormatterResult.NoValue() -> Microsoft.AspNetCore.Mvc.Formatters.InputFormatterResult! +static Microsoft.AspNetCore.Mvc.Formatters.InputFormatterResult.NoValueAsync() -> System.Threading.Tasks.Task! +static Microsoft.AspNetCore.Mvc.Formatters.InputFormatterResult.Success(object! model) -> Microsoft.AspNetCore.Mvc.Formatters.InputFormatterResult! +static Microsoft.AspNetCore.Mvc.Formatters.InputFormatterResult.SuccessAsync(object! model) -> System.Threading.Tasks.Task! +static Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.GetBindingInfo(System.Collections.Generic.IEnumerable! attributes) -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo? +static Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo.GetBindingInfo(System.Collections.Generic.IEnumerable! attributes, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! modelMetadata) -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo? +static Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.operator !=(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource? s1, Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource? s2) -> bool +static Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.operator ==(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource? s1, Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource? s2) -> bool +static Microsoft.AspNetCore.Mvc.ModelBinding.CompositeBindingSource.Create(System.Collections.Generic.IEnumerable! bindingSources, string! displayName) -> Microsoft.AspNetCore.Mvc.ModelBinding.CompositeBindingSource! +static Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.ForConstructor(System.Reflection.ConstructorInfo! constructor, System.Type! modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity +static Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.ForParameter(System.Reflection.ParameterInfo! parameter) -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity +static Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.ForParameter(System.Reflection.ParameterInfo! parameter, System.Type! modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity +static Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.ForProperty(System.Reflection.PropertyInfo! propertyInfo, System.Type! modelType, System.Type! containerType) -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity +static Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.ForProperty(System.Type! modelType, string! name, System.Type! containerType) -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity +static Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity.ForType(System.Type! modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity +static Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult.Failed() -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult +static Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult.Success(object! model) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult +static Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult.operator !=(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult x, Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult y) -> bool +static Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult.operator ==(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult x, Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult y) -> bool +static Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.StartsWithPrefix(string! prefix, string! key) -> bool +static Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.None -> Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult +static Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.explicit operator string!(Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult result) -> string! +static Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.explicit operator string![]!(Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult result) -> string![]! +static Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.operator !=(Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult x, Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult y) -> bool +static Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult.operator ==(Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult x, Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult y) -> bool +static readonly Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.Body -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! +static readonly Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.Custom -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! +static readonly Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.Form -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! +static readonly Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.FormFile -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! +static readonly Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.Header -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! +static readonly Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.ModelBinding -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! +static readonly Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.Path -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! +static readonly Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.Query -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! +static readonly Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.Services -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! +static readonly Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.Special -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! +static readonly Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.DefaultOrder -> int +static readonly Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.DefaultMaxAllowedErrors -> int +virtual Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.DisplayName.get -> string? +virtual Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor.DisplayName.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext.Canceled.get -> bool +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext.Canceled.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext.Controller.get -> object! +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext.Exception.get -> System.Exception? +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext.Exception.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext.ExceptionDispatchInfo.get -> System.Runtime.ExceptionServices.ExceptionDispatchInfo? +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext.ExceptionDispatchInfo.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext.ExceptionHandled.get -> bool +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext.ExceptionHandled.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult! +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext.Result.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext.ActionArguments.get -> System.Collections.Generic.IDictionary! +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext.Controller.get -> object! +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult? +virtual Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext.Result.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult? +virtual Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext.Result.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ExceptionContext.Exception.get -> System.Exception! +virtual Microsoft.AspNetCore.Mvc.Filters.ExceptionContext.Exception.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ExceptionContext.ExceptionDispatchInfo.get -> System.Runtime.ExceptionServices.ExceptionDispatchInfo? +virtual Microsoft.AspNetCore.Mvc.Filters.ExceptionContext.ExceptionDispatchInfo.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ExceptionContext.ExceptionHandled.get -> bool +virtual Microsoft.AspNetCore.Mvc.Filters.ExceptionContext.ExceptionHandled.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ExceptionContext.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult? +virtual Microsoft.AspNetCore.Mvc.Filters.ExceptionContext.Result.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.FilterContext.Filters.get -> System.Collections.Generic.IList! +virtual Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext.Canceled.get -> bool +virtual Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext.Canceled.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext.Exception.get -> System.Exception? +virtual Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext.Exception.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext.ExceptionDispatchInfo.get -> System.Runtime.ExceptionServices.ExceptionDispatchInfo? +virtual Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext.ExceptionDispatchInfo.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext.ExceptionHandled.get -> bool +virtual Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext.ExceptionHandled.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult? +virtual Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext.Result.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult? +virtual Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext.Result.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext.Canceled.get -> bool +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext.Canceled.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext.Controller.get -> object! +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext.Exception.get -> System.Exception? +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext.Exception.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext.ExceptionDispatchInfo.get -> System.Runtime.ExceptionServices.ExceptionDispatchInfo? +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext.ExceptionDispatchInfo.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext.ExceptionHandled.get -> bool +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext.ExceptionHandled.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult! +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext.Cancel.get -> bool +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext.Cancel.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext.Controller.get -> object! +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult! +virtual Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext.Result.set -> void +virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext.ContentType.get -> Microsoft.Extensions.Primitives.StringSegment +virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext.ContentType.set -> void +virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext.ContentTypeIsServerDefined.get -> bool +virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext.ContentTypeIsServerDefined.set -> void +virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext! +virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext.HttpContext.set -> void +virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext.Object.get -> object? +virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext.Object.set -> void +virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext.ObjectType.get -> System.Type? +virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext.ObjectType.set -> void +virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext.WriterFactory.get -> System.Func! +virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext.WriterFactory.set -> void +virtual Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource.CanAcceptDataFrom(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! bindingSource) -> bool +virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider.AttemptedValueIsInvalidAccessor.get -> System.Func! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider.MissingBindRequiredValueAccessor.get -> System.Func! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider.MissingKeyOrValueAccessor.get -> System.Func! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider.MissingRequestBodyRequiredValueAccessor.get -> System.Func! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider.NonPropertyAttemptedValueIsInvalidAccessor.get -> System.Func! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider.NonPropertyUnknownValueIsInvalidAccessor.get -> System.Func! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider.NonPropertyValueMustBeANumberAccessor.get -> System.Func! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider.UnknownValueIsInvalidAccessor.get -> System.Func! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider.ValueIsInvalidAccessor.get -> System.Func! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider.ValueMustBeANumberAccessor.get -> System.Func! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider.ValueMustNotBeNullAccessor.get -> System.Func! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext.CreateBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! metadata, Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo! bindingInfo) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext.Services.get -> System.IServiceProvider! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.ModelType.get -> System.Type! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.BoundConstructor.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata? +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.BoundConstructorInvoker.get -> System.Func? +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.BoundConstructorParameters.get -> System.Collections.Generic.IReadOnlyList? +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.ContainerMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.GetMetadataForProperties(System.Type! modelType) -> System.Collections.Generic.IEnumerable! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.GetMetadataForType(System.Type! modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.HasValidators.get -> bool? +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.PropertyValidationFilter.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IPropertyValidationFilter? +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadataProvider.GetMetadataForConstructor(System.Reflection.ConstructorInfo! constructor, System.Type! modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadataProvider.GetMetadataForParameter(System.Reflection.ParameterInfo! parameter, System.Type! modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! +virtual Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadataProvider.GetMetadataForProperty(System.Reflection.PropertyInfo! propertyInfo, System.Type! modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! diff --git a/src/Mvc/Mvc.ApiExplorer/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.ApiExplorer/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.ApiExplorer/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.ApiExplorer/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.ApiExplorer/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..350535acbe --- /dev/null +++ b/src/Mvc/Mvc.ApiExplorer/src/PublicAPI.Unshipped.txt @@ -0,0 +1,98 @@ +#nullable enable +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.ActionDescriptor.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.ApiDescription() -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.GroupName.get -> string? (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.GroupName.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.HttpMethod.get -> string? (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.HttpMethod.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.ParameterDescriptions.get -> System.Collections.Generic.IList! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.Properties.get -> System.Collections.Generic.IDictionary! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.RelativePath.get -> string! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.RelativePath.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.SupportedRequestFormats.get -> System.Collections.Generic.IList! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription.SupportedResponseTypes.get -> System.Collections.Generic.IList! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionExtensions +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroup +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroupCollection +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroupCollection.Version.get -> int +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroupCollectionProvider +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext.Actions.get -> System.Collections.Generic.IReadOnlyList! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext.ApiDescriptionProviderContext(System.Collections.Generic.IReadOnlyList! actions) -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext.Results.get -> System.Collections.Generic.IList! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.ApiParameterDescription() -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.BindingInfo.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo? (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.BindingInfo.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.DefaultValue.get -> object? (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.DefaultValue.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.IsRequired.get -> bool (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.IsRequired.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.ModelMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.ModelMetadata.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.Name.get -> string! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.Name.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.ParameterDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.ParameterDescriptor.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.RouteInfo.get -> Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo? (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.RouteInfo.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.Source.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.Source.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.Type.get -> System.Type! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription.Type.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.ApiParameterRouteInfo() -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.Constraints.get -> System.Collections.Generic.IEnumerable? (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.Constraints.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.DefaultValue.get -> object? (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.DefaultValue.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.IsOptional.get -> bool (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterRouteInfo.IsOptional.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiRequestFormat (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiRequestFormat.ApiRequestFormat() -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiRequestFormat.Formatter.get -> Microsoft.AspNetCore.Mvc.Formatters.IInputFormatter! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiRequestFormat.Formatter.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiRequestFormat.MediaType.get -> string! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiRequestFormat.MediaType.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseFormat (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseFormat.ApiResponseFormat() -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseFormat.Formatter.get -> Microsoft.AspNetCore.Mvc.Formatters.IOutputFormatter! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseFormat.Formatter.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseFormat.MediaType.get -> string! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseFormat.MediaType.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.ApiResponseFormats.get -> System.Collections.Generic.IList! (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.ApiResponseFormats.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.ApiResponseType() -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.IsDefaultResponse.get -> bool (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.IsDefaultResponse.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.ModelMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata? (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.ModelMetadata.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.StatusCode.get -> int (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.StatusCode.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.Type.get -> System.Type? (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiResponseType.Type.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.DefaultApiDescriptionProvider +Microsoft.AspNetCore.Mvc.ApiExplorer.DefaultApiDescriptionProvider.Order.get -> int +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionGroupCollectionProvider +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionProvider (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionProvider.OnProvidersExecuted(Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext! context) -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionProvider.OnProvidersExecuting(Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext! context) -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionProvider.Order.get -> int (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.Extensions.DependencyInjection.MvcApiExplorerMvcCoreBuilderExtensions +~Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroup.ApiDescriptionGroup(string groupName, System.Collections.Generic.IReadOnlyList items) -> void +~Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroup.GroupName.get -> string +~Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroup.Items.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroupCollection.ApiDescriptionGroupCollection(System.Collections.Generic.IReadOnlyList items, int version) -> void +~Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroupCollection.Items.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroupCollectionProvider.ApiDescriptionGroupCollectionProvider(Microsoft.AspNetCore.Mvc.Infrastructure.IActionDescriptorCollectionProvider actionDescriptorCollectionProvider, System.Collections.Generic.IEnumerable apiDescriptionProviders) -> void +~Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroupCollectionProvider.ApiDescriptionGroups.get -> Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroupCollection +~Microsoft.AspNetCore.Mvc.ApiExplorer.DefaultApiDescriptionProvider.DefaultApiDescriptionProvider(Microsoft.Extensions.Options.IOptions optionsAccessor, Microsoft.AspNetCore.Routing.IInlineConstraintResolver constraintResolver, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider modelMetadataProvider, Microsoft.AspNetCore.Mvc.Infrastructure.IActionResultTypeMapper mapper, Microsoft.Extensions.Options.IOptions routeOptions) -> void +~Microsoft.AspNetCore.Mvc.ApiExplorer.DefaultApiDescriptionProvider.OnProvidersExecuted(Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ApiExplorer.DefaultApiDescriptionProvider.OnProvidersExecuting(Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionGroupCollectionProvider.ApiDescriptionGroups.get -> Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroupCollection +~static Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionExtensions.GetProperty(this Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription apiDescription) -> T +~static Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionExtensions.SetProperty(this Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription apiDescription, T value) -> void +~static Microsoft.Extensions.DependencyInjection.MvcApiExplorerMvcCoreBuilderExtensions.AddApiExplorer(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder diff --git a/src/Mvc/Mvc.Core/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.Core/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.Core/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.Core/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.Core/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..b122b73175 --- /dev/null +++ b/src/Mvc/Mvc.Core/src/PublicAPI.Unshipped.txt @@ -0,0 +1,2468 @@ +#nullable enable +Microsoft.AspNetCore.Builder.ControllerActionEndpointConventionBuilder +Microsoft.AspNetCore.Builder.ControllerEndpointRouteBuilderExtensions +Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions +Microsoft.AspNetCore.Builder.MvcAreaRouteBuilderExtensions +Microsoft.AspNetCore.Mvc.AcceptVerbsAttribute +Microsoft.AspNetCore.Mvc.AcceptVerbsAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.AcceptVerbsAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.AcceptedAtActionResult +Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult +Microsoft.AspNetCore.Mvc.AcceptedResult +Microsoft.AspNetCore.Mvc.AcceptedResult.AcceptedResult() -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionMethodSelectorAttribute +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionMethodSelectorAttribute.ActionMethodSelectorAttribute() -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionMethodSelectorAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.ActionConstraints.ActionMethodSelectorAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.ActionConstraints.HttpMethodActionConstraint +Microsoft.AspNetCore.Mvc.ActionConstraints.HttpMethodActionConstraint.Order.get -> int +Microsoft.AspNetCore.Mvc.ActionContextAttribute +Microsoft.AspNetCore.Mvc.ActionContextAttribute.ActionContextAttribute() -> void +Microsoft.AspNetCore.Mvc.ActionNameAttribute +Microsoft.AspNetCore.Mvc.ActionResult +Microsoft.AspNetCore.Mvc.ActionResult.ActionResult() -> void +Microsoft.AspNetCore.Mvc.ActionResult +Microsoft.AspNetCore.Mvc.ActionResult.ActionResult(TValue value) -> void +Microsoft.AspNetCore.Mvc.ActionResult.Value.get -> TValue +Microsoft.AspNetCore.Mvc.AntiforgeryValidationFailedResult +Microsoft.AspNetCore.Mvc.AntiforgeryValidationFailedResult.AntiforgeryValidationFailedResult() -> void +Microsoft.AspNetCore.Mvc.ApiBehaviorOptions +Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.ApiBehaviorOptions() -> void +Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.SuppressConsumesConstraintForFormFileParameters.get -> bool +Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.SuppressConsumesConstraintForFormFileParameters.set -> void +Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.SuppressInferBindingSourcesForParameters.get -> bool +Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.SuppressInferBindingSourcesForParameters.set -> void +Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.SuppressMapClientErrors.get -> bool +Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.SuppressMapClientErrors.set -> void +Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.SuppressModelStateInvalidFilter.get -> bool +Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.SuppressModelStateInvalidFilter.set -> void +Microsoft.AspNetCore.Mvc.ApiControllerAttribute +Microsoft.AspNetCore.Mvc.ApiControllerAttribute.ApiControllerAttribute() -> void +Microsoft.AspNetCore.Mvc.ApiConventionMethodAttribute +Microsoft.AspNetCore.Mvc.ApiConventionTypeAttribute +Microsoft.AspNetCore.Mvc.ApiDescriptionActionData +Microsoft.AspNetCore.Mvc.ApiDescriptionActionData.ApiDescriptionActionData() -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchAttribute +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchAttribute.ApiConventionNameMatchAttribute(Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior matchBehavior) -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchAttribute.MatchBehavior.get -> Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior.Any = 0 -> Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior.Exact = 1 -> Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior.Prefix = 2 -> Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior.Suffix = 3 -> Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionNameMatchBehavior +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionResult +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionTypeMatchAttribute +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionTypeMatchAttribute.ApiConventionTypeMatchAttribute(Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionTypeMatchBehavior matchBehavior) -> void +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionTypeMatchAttribute.MatchBehavior.get -> Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionTypeMatchBehavior +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionTypeMatchBehavior +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionTypeMatchBehavior.Any = 0 -> Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionTypeMatchBehavior +Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionTypeMatchBehavior.AssignableFrom = 1 -> Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionTypeMatchBehavior +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDefaultResponseMetadataProvider +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionGroupNameProvider +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionVisibilityProvider +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionVisibilityProvider.IgnoreApi.get -> bool +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiRequestFormatMetadataProvider +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiRequestMetadataProvider +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiResponseMetadataProvider +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiResponseMetadataProvider.StatusCode.get -> int +Microsoft.AspNetCore.Mvc.ApiExplorer.IApiResponseTypeMetadataProvider +Microsoft.AspNetCore.Mvc.ApiExplorerSettingsAttribute +Microsoft.AspNetCore.Mvc.ApiExplorerSettingsAttribute.ApiExplorerSettingsAttribute() -> void +Microsoft.AspNetCore.Mvc.ApiExplorerSettingsAttribute.IgnoreApi.get -> bool +Microsoft.AspNetCore.Mvc.ApiExplorerSettingsAttribute.IgnoreApi.set -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel +Microsoft.AspNetCore.Mvc.ApplicationModels.ApiConventionApplicationModelConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.ApiExplorerModel +Microsoft.AspNetCore.Mvc.ApplicationModels.ApiExplorerModel.ApiExplorerModel() -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.ApiExplorerModel.IsVisible.get -> bool? +Microsoft.AspNetCore.Mvc.ApplicationModels.ApiExplorerModel.IsVisible.set -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.ApiVisibilityConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.ApiVisibilityConvention.ApiVisibilityConvention() -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModel +Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModel.ApplicationModel() -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModelProviderContext +Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel +Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.AttributeRouteModel() -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.IsAbsoluteTemplate.get -> bool +Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.Order.get -> int? +Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.Order.set -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.SuppressLinkGeneration.get -> bool +Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.SuppressLinkGeneration.set -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.SuppressPathMatching.get -> bool +Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.SuppressPathMatching.set -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.ClientErrorResultFilterConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.ClientErrorResultFilterConvention.ClientErrorResultFilterConvention() -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.ConsumesConstraintForFormFileParameterConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.ConsumesConstraintForFormFileParameterConvention.ConsumesConstraintForFormFileParameterConvention() -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel +Microsoft.AspNetCore.Mvc.ApplicationModels.IActionModelConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.IApiExplorerModel +Microsoft.AspNetCore.Mvc.ApplicationModels.IApplicationModelConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.IApplicationModelProvider +Microsoft.AspNetCore.Mvc.ApplicationModels.IApplicationModelProvider.Order.get -> int +Microsoft.AspNetCore.Mvc.ApplicationModels.IBindingModel +Microsoft.AspNetCore.Mvc.ApplicationModels.ICommonModel +Microsoft.AspNetCore.Mvc.ApplicationModels.IControllerModelConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.IFilterModel +Microsoft.AspNetCore.Mvc.ApplicationModels.IParameterModelBaseConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.IParameterModelConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.IPropertyModel +Microsoft.AspNetCore.Mvc.ApplicationModels.InferParameterBindingInfoConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.InvalidModelStateFilterConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.InvalidModelStateFilterConvention.InvalidModelStateFilterConvention() -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModel +Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModelBase +Microsoft.AspNetCore.Mvc.ApplicationModels.PropertyModel +Microsoft.AspNetCore.Mvc.ApplicationModels.RouteTokenTransformerConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.SelectorModel +Microsoft.AspNetCore.Mvc.ApplicationModels.SelectorModel.SelectorModel() -> void +Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPart +Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPart.ApplicationPart() -> void +Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartAttribute +Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartFactory +Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartFactory.ApplicationPartFactory() -> void +Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartManager +Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartManager.ApplicationPartManager() -> void +Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartManager.PopulateFeature(TFeature feature) -> void +Microsoft.AspNetCore.Mvc.ApplicationParts.AssemblyPart +Microsoft.AspNetCore.Mvc.ApplicationParts.DefaultApplicationPartFactory +Microsoft.AspNetCore.Mvc.ApplicationParts.DefaultApplicationPartFactory.DefaultApplicationPartFactory() -> void +Microsoft.AspNetCore.Mvc.ApplicationParts.IApplicationFeatureProvider +Microsoft.AspNetCore.Mvc.ApplicationParts.IApplicationFeatureProvider +Microsoft.AspNetCore.Mvc.ApplicationParts.IApplicationPartTypeProvider +Microsoft.AspNetCore.Mvc.ApplicationParts.ICompilationReferencesProvider +Microsoft.AspNetCore.Mvc.ApplicationParts.NullApplicationPartFactory +Microsoft.AspNetCore.Mvc.ApplicationParts.NullApplicationPartFactory.NullApplicationPartFactory() -> void +Microsoft.AspNetCore.Mvc.ApplicationParts.ProvideApplicationPartFactoryAttribute +Microsoft.AspNetCore.Mvc.ApplicationParts.RelatedAssemblyAttribute +Microsoft.AspNetCore.Mvc.AreaAttribute +Microsoft.AspNetCore.Mvc.Authorization.AllowAnonymousFilter +Microsoft.AspNetCore.Mvc.Authorization.AllowAnonymousFilter.AllowAnonymousFilter() -> void +Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter +Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter.AuthorizeFilter() -> void +Microsoft.AspNetCore.Mvc.BadRequestObjectResult +Microsoft.AspNetCore.Mvc.BadRequestResult +Microsoft.AspNetCore.Mvc.BadRequestResult.BadRequestResult() -> void +Microsoft.AspNetCore.Mvc.BindAttribute +Microsoft.AspNetCore.Mvc.BindPropertiesAttribute +Microsoft.AspNetCore.Mvc.BindPropertiesAttribute.BindPropertiesAttribute() -> void +Microsoft.AspNetCore.Mvc.BindPropertiesAttribute.SupportsGet.get -> bool +Microsoft.AspNetCore.Mvc.BindPropertiesAttribute.SupportsGet.set -> void +Microsoft.AspNetCore.Mvc.BindPropertyAttribute +Microsoft.AspNetCore.Mvc.BindPropertyAttribute.BindPropertyAttribute() -> void +Microsoft.AspNetCore.Mvc.BindPropertyAttribute.SupportsGet.get -> bool +Microsoft.AspNetCore.Mvc.BindPropertyAttribute.SupportsGet.set -> void +Microsoft.AspNetCore.Mvc.CacheProfile +Microsoft.AspNetCore.Mvc.CacheProfile.CacheProfile() -> void +Microsoft.AspNetCore.Mvc.CacheProfile.Duration.get -> int? +Microsoft.AspNetCore.Mvc.CacheProfile.Duration.set -> void +Microsoft.AspNetCore.Mvc.CacheProfile.Location.get -> Microsoft.AspNetCore.Mvc.ResponseCacheLocation? +Microsoft.AspNetCore.Mvc.CacheProfile.Location.set -> void +Microsoft.AspNetCore.Mvc.CacheProfile.NoStore.get -> bool? +Microsoft.AspNetCore.Mvc.CacheProfile.NoStore.set -> void +Microsoft.AspNetCore.Mvc.ChallengeResult +Microsoft.AspNetCore.Mvc.ChallengeResult.ChallengeResult() -> void +Microsoft.AspNetCore.Mvc.ClientErrorData +Microsoft.AspNetCore.Mvc.ClientErrorData.ClientErrorData() -> void +Microsoft.AspNetCore.Mvc.CompatibilityVersion +Microsoft.AspNetCore.Mvc.CompatibilityVersion.Latest = 2147483647 -> Microsoft.AspNetCore.Mvc.CompatibilityVersion +Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_2_0 = 0 -> Microsoft.AspNetCore.Mvc.CompatibilityVersion +Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_2_1 = 1 -> Microsoft.AspNetCore.Mvc.CompatibilityVersion +Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_2_2 = 2 -> Microsoft.AspNetCore.Mvc.CompatibilityVersion +Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_3_0 = 3 -> Microsoft.AspNetCore.Mvc.CompatibilityVersion +Microsoft.AspNetCore.Mvc.ConflictObjectResult +Microsoft.AspNetCore.Mvc.ConflictResult +Microsoft.AspNetCore.Mvc.ConflictResult.ConflictResult() -> void +Microsoft.AspNetCore.Mvc.ConsumesAttribute +Microsoft.AspNetCore.Mvc.ContentResult +Microsoft.AspNetCore.Mvc.ContentResult.ContentResult() -> void +Microsoft.AspNetCore.Mvc.ContentResult.StatusCode.get -> int? +Microsoft.AspNetCore.Mvc.ContentResult.StatusCode.set -> void +Microsoft.AspNetCore.Mvc.ControllerAttribute +Microsoft.AspNetCore.Mvc.ControllerAttribute.ControllerAttribute() -> void +Microsoft.AspNetCore.Mvc.ControllerBase +Microsoft.AspNetCore.Mvc.ControllerBase.ControllerBase() -> void +Microsoft.AspNetCore.Mvc.ControllerContext +Microsoft.AspNetCore.Mvc.ControllerContext.ControllerContext() -> void +Microsoft.AspNetCore.Mvc.ControllerContextAttribute +Microsoft.AspNetCore.Mvc.ControllerContextAttribute.ControllerContextAttribute() -> void +Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor +Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor.ControllerActionDescriptor() -> void +Microsoft.AspNetCore.Mvc.Controllers.ControllerActivatorProvider +Microsoft.AspNetCore.Mvc.Controllers.ControllerBoundPropertyDescriptor +Microsoft.AspNetCore.Mvc.Controllers.ControllerBoundPropertyDescriptor.ControllerBoundPropertyDescriptor() -> void +Microsoft.AspNetCore.Mvc.Controllers.ControllerFeature +Microsoft.AspNetCore.Mvc.Controllers.ControllerFeature.ControllerFeature() -> void +Microsoft.AspNetCore.Mvc.Controllers.ControllerFeatureProvider +Microsoft.AspNetCore.Mvc.Controllers.ControllerFeatureProvider.ControllerFeatureProvider() -> void +Microsoft.AspNetCore.Mvc.Controllers.ControllerParameterDescriptor +Microsoft.AspNetCore.Mvc.Controllers.ControllerParameterDescriptor.ControllerParameterDescriptor() -> void +Microsoft.AspNetCore.Mvc.Controllers.IControllerActivator +Microsoft.AspNetCore.Mvc.Controllers.IControllerActivatorProvider +Microsoft.AspNetCore.Mvc.Controllers.IControllerFactory +Microsoft.AspNetCore.Mvc.Controllers.IControllerFactoryProvider +Microsoft.AspNetCore.Mvc.Controllers.ServiceBasedControllerActivator +Microsoft.AspNetCore.Mvc.Controllers.ServiceBasedControllerActivator.ServiceBasedControllerActivator() -> void +Microsoft.AspNetCore.Mvc.Core.Infrastructure.IAntiforgeryValidationFailedResult +Microsoft.AspNetCore.Mvc.CreatedAtActionResult +Microsoft.AspNetCore.Mvc.CreatedAtRouteResult +Microsoft.AspNetCore.Mvc.CreatedResult +Microsoft.AspNetCore.Mvc.DefaultApiConventions +Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutedEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutingEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutionEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionResultEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterAuthorizationFilterOnAuthorizationEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterControllerActionMethodEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterExceptionFilterOnExceptionEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutedEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutingEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutionEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutedEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutingEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutionEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutedEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutingEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutionEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionResultEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeAuthorizationFilterOnAuthorizationEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeControllerActionMethodEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeExceptionFilterOnException +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutedEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutingEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutionEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutedEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutingEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutionEventData +Microsoft.AspNetCore.Mvc.Diagnostics.EventData +Microsoft.AspNetCore.Mvc.Diagnostics.EventData.Enumerator +Microsoft.AspNetCore.Mvc.Diagnostics.EventData.Enumerator.Dispose() -> void +Microsoft.AspNetCore.Mvc.Diagnostics.EventData.Enumerator.MoveNext() -> bool +Microsoft.AspNetCore.Mvc.Diagnostics.EventData.EventData() -> void +Microsoft.AspNetCore.Mvc.DisableRequestSizeLimitAttribute +Microsoft.AspNetCore.Mvc.DisableRequestSizeLimitAttribute.DisableRequestSizeLimitAttribute() -> void +Microsoft.AspNetCore.Mvc.DisableRequestSizeLimitAttribute.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.DisableRequestSizeLimitAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.DisableRequestSizeLimitAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.EmptyResult +Microsoft.AspNetCore.Mvc.EmptyResult.EmptyResult() -> void +Microsoft.AspNetCore.Mvc.FileContentResult +Microsoft.AspNetCore.Mvc.FileResult +Microsoft.AspNetCore.Mvc.FileResult.EnableRangeProcessing.get -> bool +Microsoft.AspNetCore.Mvc.FileResult.EnableRangeProcessing.set -> void +Microsoft.AspNetCore.Mvc.FileResult.LastModified.get -> System.DateTimeOffset? +Microsoft.AspNetCore.Mvc.FileResult.LastModified.set -> void +Microsoft.AspNetCore.Mvc.FileStreamResult +Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute +Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute.ActionFilterAttribute() -> void +Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.Filters.ExceptionFilterAttribute +Microsoft.AspNetCore.Mvc.Filters.ExceptionFilterAttribute.ExceptionFilterAttribute() -> void +Microsoft.AspNetCore.Mvc.Filters.ExceptionFilterAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.Filters.ExceptionFilterAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.Filters.FilterCollection +Microsoft.AspNetCore.Mvc.Filters.FilterCollection.FilterCollection() -> void +Microsoft.AspNetCore.Mvc.Filters.FilterScope +Microsoft.AspNetCore.Mvc.Filters.ResultFilterAttribute +Microsoft.AspNetCore.Mvc.Filters.ResultFilterAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.Filters.ResultFilterAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.Filters.ResultFilterAttribute.ResultFilterAttribute() -> void +Microsoft.AspNetCore.Mvc.ForbidResult +Microsoft.AspNetCore.Mvc.ForbidResult.ForbidResult() -> void +Microsoft.AspNetCore.Mvc.FormatFilterAttribute +Microsoft.AspNetCore.Mvc.FormatFilterAttribute.FormatFilterAttribute() -> void +Microsoft.AspNetCore.Mvc.FormatFilterAttribute.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.Formatters.FormatFilter +Microsoft.AspNetCore.Mvc.Formatters.FormatterMappings +Microsoft.AspNetCore.Mvc.Formatters.FormatterMappings.FormatterMappings() -> void +Microsoft.AspNetCore.Mvc.Formatters.HttpNoContentOutputFormatter +Microsoft.AspNetCore.Mvc.Formatters.HttpNoContentOutputFormatter.HttpNoContentOutputFormatter() -> void +Microsoft.AspNetCore.Mvc.Formatters.HttpNoContentOutputFormatter.TreatNullValueAsNoContent.get -> bool +Microsoft.AspNetCore.Mvc.Formatters.HttpNoContentOutputFormatter.TreatNullValueAsNoContent.set -> void +Microsoft.AspNetCore.Mvc.Formatters.InputFormatter +Microsoft.AspNetCore.Mvc.Formatters.InputFormatter.InputFormatter() -> void +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterException (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterException.InputFormatterException() -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterException.InputFormatterException(string! message) -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.Formatters.InputFormatterException.InputFormatterException(string! message, System.Exception! innerException) -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Abstractions) +Microsoft.AspNetCore.Mvc.Formatters.MediaType +Microsoft.AspNetCore.Mvc.Formatters.MediaType.Charset.get -> Microsoft.Extensions.Primitives.StringSegment +Microsoft.AspNetCore.Mvc.Formatters.MediaType.GetParameter(Microsoft.Extensions.Primitives.StringSegment parameterName) -> Microsoft.Extensions.Primitives.StringSegment +Microsoft.AspNetCore.Mvc.Formatters.MediaType.HasWildcard.get -> bool +Microsoft.AspNetCore.Mvc.Formatters.MediaType.IsSubsetOf(Microsoft.AspNetCore.Mvc.Formatters.MediaType set) -> bool +Microsoft.AspNetCore.Mvc.Formatters.MediaType.MatchesAllSubTypes.get -> bool +Microsoft.AspNetCore.Mvc.Formatters.MediaType.MatchesAllSubTypesWithoutSuffix.get -> bool +Microsoft.AspNetCore.Mvc.Formatters.MediaType.MatchesAllTypes.get -> bool +Microsoft.AspNetCore.Mvc.Formatters.MediaType.MediaType(Microsoft.Extensions.Primitives.StringSegment mediaType) -> void +Microsoft.AspNetCore.Mvc.Formatters.MediaType.SubType.get -> Microsoft.Extensions.Primitives.StringSegment +Microsoft.AspNetCore.Mvc.Formatters.MediaType.SubTypeSuffix.get -> Microsoft.Extensions.Primitives.StringSegment +Microsoft.AspNetCore.Mvc.Formatters.MediaType.SubTypeWithoutSuffix.get -> Microsoft.Extensions.Primitives.StringSegment +Microsoft.AspNetCore.Mvc.Formatters.MediaType.Type.get -> Microsoft.Extensions.Primitives.StringSegment +Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection +Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection.MediaTypeCollection() -> void +Microsoft.AspNetCore.Mvc.Formatters.MediaTypeSegmentWithQuality +Microsoft.AspNetCore.Mvc.Formatters.MediaTypeSegmentWithQuality.MediaType.get -> Microsoft.Extensions.Primitives.StringSegment +Microsoft.AspNetCore.Mvc.Formatters.MediaTypeSegmentWithQuality.MediaTypeSegmentWithQuality(Microsoft.Extensions.Primitives.StringSegment mediaType, double quality) -> void +Microsoft.AspNetCore.Mvc.Formatters.MediaTypeSegmentWithQuality.Quality.get -> double +Microsoft.AspNetCore.Mvc.Formatters.OutputFormatter +Microsoft.AspNetCore.Mvc.Formatters.OutputFormatter.OutputFormatter() -> void +Microsoft.AspNetCore.Mvc.Formatters.StreamOutputFormatter +Microsoft.AspNetCore.Mvc.Formatters.StreamOutputFormatter.StreamOutputFormatter() -> void +Microsoft.AspNetCore.Mvc.Formatters.StringOutputFormatter +Microsoft.AspNetCore.Mvc.Formatters.StringOutputFormatter.StringOutputFormatter() -> void +Microsoft.AspNetCore.Mvc.Formatters.SystemTextJsonInputFormatter +Microsoft.AspNetCore.Mvc.Formatters.SystemTextJsonOutputFormatter +Microsoft.AspNetCore.Mvc.Formatters.TextInputFormatter +Microsoft.AspNetCore.Mvc.Formatters.TextInputFormatter.TextInputFormatter() -> void +Microsoft.AspNetCore.Mvc.Formatters.TextOutputFormatter +Microsoft.AspNetCore.Mvc.Formatters.TextOutputFormatter.TextOutputFormatter() -> void +Microsoft.AspNetCore.Mvc.FromBodyAttribute +Microsoft.AspNetCore.Mvc.FromBodyAttribute.EmptyBodyBehavior.get -> Microsoft.AspNetCore.Mvc.ModelBinding.EmptyBodyBehavior +Microsoft.AspNetCore.Mvc.FromBodyAttribute.EmptyBodyBehavior.set -> void +Microsoft.AspNetCore.Mvc.FromBodyAttribute.FromBodyAttribute() -> void +Microsoft.AspNetCore.Mvc.FromFormAttribute +Microsoft.AspNetCore.Mvc.FromFormAttribute.FromFormAttribute() -> void +Microsoft.AspNetCore.Mvc.FromHeaderAttribute +Microsoft.AspNetCore.Mvc.FromHeaderAttribute.FromHeaderAttribute() -> void +Microsoft.AspNetCore.Mvc.FromQueryAttribute +Microsoft.AspNetCore.Mvc.FromQueryAttribute.FromQueryAttribute() -> void +Microsoft.AspNetCore.Mvc.FromRouteAttribute +Microsoft.AspNetCore.Mvc.FromRouteAttribute.FromRouteAttribute() -> void +Microsoft.AspNetCore.Mvc.FromServicesAttribute +Microsoft.AspNetCore.Mvc.FromServicesAttribute.FromServicesAttribute() -> void +Microsoft.AspNetCore.Mvc.HttpDeleteAttribute +Microsoft.AspNetCore.Mvc.HttpDeleteAttribute.HttpDeleteAttribute() -> void +Microsoft.AspNetCore.Mvc.HttpGetAttribute +Microsoft.AspNetCore.Mvc.HttpGetAttribute.HttpGetAttribute() -> void +Microsoft.AspNetCore.Mvc.HttpHeadAttribute +Microsoft.AspNetCore.Mvc.HttpHeadAttribute.HttpHeadAttribute() -> void +Microsoft.AspNetCore.Mvc.HttpOptionsAttribute +Microsoft.AspNetCore.Mvc.HttpOptionsAttribute.HttpOptionsAttribute() -> void +Microsoft.AspNetCore.Mvc.HttpPatchAttribute +Microsoft.AspNetCore.Mvc.HttpPatchAttribute.HttpPatchAttribute() -> void +Microsoft.AspNetCore.Mvc.HttpPostAttribute +Microsoft.AspNetCore.Mvc.HttpPostAttribute.HttpPostAttribute() -> void +Microsoft.AspNetCore.Mvc.HttpPutAttribute +Microsoft.AspNetCore.Mvc.HttpPutAttribute.HttpPutAttribute() -> void +Microsoft.AspNetCore.Mvc.IDesignTimeMvcBuilderConfiguration +Microsoft.AspNetCore.Mvc.IRequestFormLimitsPolicy +Microsoft.AspNetCore.Mvc.IRequestSizePolicy +Microsoft.AspNetCore.Mvc.Infrastructure.ActionContextAccessor +Microsoft.AspNetCore.Mvc.Infrastructure.ActionContextAccessor.ActionContextAccessor() -> void +Microsoft.AspNetCore.Mvc.Infrastructure.ActionDescriptorCollection +Microsoft.AspNetCore.Mvc.Infrastructure.ActionDescriptorCollection.Version.get -> int +Microsoft.AspNetCore.Mvc.Infrastructure.ActionDescriptorCollectionProvider +Microsoft.AspNetCore.Mvc.Infrastructure.ActionDescriptorCollectionProvider.ActionDescriptorCollectionProvider() -> void +Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute +Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute.ActionResultObjectValueAttribute() -> void +Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultStatusCodeAttribute +Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultStatusCodeAttribute.ActionResultStatusCodeAttribute() -> void +Microsoft.AspNetCore.Mvc.Infrastructure.AmbiguousActionException +Microsoft.AspNetCore.Mvc.Infrastructure.CompatibilitySwitch +Microsoft.AspNetCore.Mvc.Infrastructure.CompatibilitySwitch.IsValueSet.get -> bool +Microsoft.AspNetCore.Mvc.Infrastructure.CompatibilitySwitch.Value.get -> TValue +Microsoft.AspNetCore.Mvc.Infrastructure.CompatibilitySwitch.Value.set -> void +Microsoft.AspNetCore.Mvc.Infrastructure.ConfigureCompatibilityOptions.Version.get -> Microsoft.AspNetCore.Mvc.CompatibilityVersion +Microsoft.AspNetCore.Mvc.Infrastructure.ContentResultExecutor +Microsoft.AspNetCore.Mvc.Infrastructure.DefaultOutputFormatterSelector +Microsoft.AspNetCore.Mvc.Infrastructure.DefaultStatusCodeAttribute +Microsoft.AspNetCore.Mvc.Infrastructure.DefaultStatusCodeAttribute.DefaultStatusCodeAttribute(int statusCode) -> void +Microsoft.AspNetCore.Mvc.Infrastructure.DefaultStatusCodeAttribute.StatusCode.get -> int +Microsoft.AspNetCore.Mvc.Infrastructure.FileContentResultExecutor +Microsoft.AspNetCore.Mvc.Infrastructure.FileResultExecutorBase +Microsoft.AspNetCore.Mvc.Infrastructure.FileStreamResultExecutor +Microsoft.AspNetCore.Mvc.Infrastructure.IActionContextAccessor +Microsoft.AspNetCore.Mvc.Infrastructure.IActionDescriptorChangeProvider +Microsoft.AspNetCore.Mvc.Infrastructure.IActionDescriptorCollectionProvider +Microsoft.AspNetCore.Mvc.Infrastructure.IActionInvokerFactory +Microsoft.AspNetCore.Mvc.Infrastructure.IActionResultTypeMapper +Microsoft.AspNetCore.Mvc.Infrastructure.IActionSelector +Microsoft.AspNetCore.Mvc.Infrastructure.IApiBehaviorMetadata +Microsoft.AspNetCore.Mvc.Infrastructure.IClientErrorActionResult +Microsoft.AspNetCore.Mvc.Infrastructure.IClientErrorFactory +Microsoft.AspNetCore.Mvc.Infrastructure.ICompatibilitySwitch +Microsoft.AspNetCore.Mvc.Infrastructure.ICompatibilitySwitch.IsValueSet.get -> bool +Microsoft.AspNetCore.Mvc.Infrastructure.IConvertToActionResult +Microsoft.AspNetCore.Mvc.Infrastructure.IHttpRequestStreamReaderFactory +Microsoft.AspNetCore.Mvc.Infrastructure.IHttpResponseStreamWriterFactory +Microsoft.AspNetCore.Mvc.Infrastructure.IParameterInfoParameterDescriptor +Microsoft.AspNetCore.Mvc.Infrastructure.IPropertyInfoParameterDescriptor +Microsoft.AspNetCore.Mvc.Infrastructure.IStatusCodeActionResult +Microsoft.AspNetCore.Mvc.Infrastructure.IStatusCodeActionResult.StatusCode.get -> int? +Microsoft.AspNetCore.Mvc.Infrastructure.LocalRedirectResultExecutor +Microsoft.AspNetCore.Mvc.Infrastructure.ModelStateInvalidFilter +Microsoft.AspNetCore.Mvc.Infrastructure.ModelStateInvalidFilter.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.Infrastructure.ModelStateInvalidFilter.Order.get -> int +Microsoft.AspNetCore.Mvc.Infrastructure.MvcCompatibilityOptions +Microsoft.AspNetCore.Mvc.Infrastructure.MvcCompatibilityOptions.CompatibilityVersion.get -> Microsoft.AspNetCore.Mvc.CompatibilityVersion +Microsoft.AspNetCore.Mvc.Infrastructure.MvcCompatibilityOptions.CompatibilityVersion.set -> void +Microsoft.AspNetCore.Mvc.Infrastructure.MvcCompatibilityOptions.MvcCompatibilityOptions() -> void +Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor +Microsoft.AspNetCore.Mvc.Infrastructure.OutputFormatterSelector +Microsoft.AspNetCore.Mvc.Infrastructure.OutputFormatterSelector.OutputFormatterSelector() -> void +Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor +Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.FileMetadata +Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.FileMetadata.Exists.get -> bool +Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.FileMetadata.Exists.set -> void +Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.FileMetadata.FileMetadata() -> void +Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.FileMetadata.LastModified.get -> System.DateTimeOffset +Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.FileMetadata.LastModified.set -> void +Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.FileMetadata.Length.get -> long +Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.FileMetadata.Length.set -> void +Microsoft.AspNetCore.Mvc.Infrastructure.ProblemDetailsFactory +Microsoft.AspNetCore.Mvc.Infrastructure.ProblemDetailsFactory.ProblemDetailsFactory() -> void +Microsoft.AspNetCore.Mvc.Infrastructure.RedirectResultExecutor +Microsoft.AspNetCore.Mvc.Infrastructure.RedirectToActionResultExecutor +Microsoft.AspNetCore.Mvc.Infrastructure.RedirectToPageResultExecutor +Microsoft.AspNetCore.Mvc.Infrastructure.RedirectToRouteResultExecutor +Microsoft.AspNetCore.Mvc.Infrastructure.VirtualFileResultExecutor +Microsoft.AspNetCore.Mvc.JsonOptions +Microsoft.AspNetCore.Mvc.JsonOptions.JsonOptions() -> void +Microsoft.AspNetCore.Mvc.JsonResult +Microsoft.AspNetCore.Mvc.JsonResult.StatusCode.get -> int? +Microsoft.AspNetCore.Mvc.JsonResult.StatusCode.set -> void +Microsoft.AspNetCore.Mvc.LocalRedirectResult +Microsoft.AspNetCore.Mvc.LocalRedirectResult.Permanent.get -> bool +Microsoft.AspNetCore.Mvc.LocalRedirectResult.Permanent.set -> void +Microsoft.AspNetCore.Mvc.LocalRedirectResult.PreserveMethod.get -> bool +Microsoft.AspNetCore.Mvc.LocalRedirectResult.PreserveMethod.set -> void +Microsoft.AspNetCore.Mvc.MiddlewareFilterAttribute +Microsoft.AspNetCore.Mvc.MiddlewareFilterAttribute.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.MiddlewareFilterAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.MiddlewareFilterAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.ModelBinderAttribute +Microsoft.AspNetCore.Mvc.ModelBinderAttribute.ModelBinderAttribute() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.BindNeverAttribute +Microsoft.AspNetCore.Mvc.ModelBinding.BindNeverAttribute.BindNeverAttribute() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.BindRequiredAttribute +Microsoft.AspNetCore.Mvc.ModelBinding.BindRequiredAttribute.BindRequiredAttribute() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ArrayModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ArrayModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ArrayModelBinderProvider.ArrayModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BinderTypeModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BinderTypeModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BinderTypeModelBinderProvider.BinderTypeModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BodyModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BodyModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ByteArrayModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ByteArrayModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ByteArrayModelBinderProvider.ByteArrayModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CancellationTokenModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CancellationTokenModelBinder.CancellationTokenModelBinder() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CancellationTokenModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CancellationTokenModelBinderProvider.CancellationTokenModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinderProvider.CollectionModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexObjectModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexObjectModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexObjectModelBinderProvider.ComplexObjectModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinderProvider.ComplexTypeModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DecimalModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DictionaryModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DictionaryModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DictionaryModelBinderProvider.DictionaryModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DoubleModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.EnumTypeModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.EnumTypeModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FloatModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FloatingPointTypeModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FloatingPointTypeModelBinderProvider.FloatingPointTypeModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormCollectionModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormCollectionModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormCollectionModelBinderProvider.FormCollectionModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormFileModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormFileModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormFileModelBinderProvider.FormFileModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.HeaderModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.HeaderModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.HeaderModelBinderProvider.HeaderModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.KeyValuePairModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.KeyValuePairModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.KeyValuePairModelBinderProvider.KeyValuePairModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ServicesModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ServicesModelBinder.ServicesModelBinder() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ServicesModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ServicesModelBinderProvider.ServicesModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.SimpleTypeModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.SimpleTypeModelBinderProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Binders.SimpleTypeModelBinderProvider.SimpleTypeModelBinderProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.BindingBehavior +Microsoft.AspNetCore.Mvc.ModelBinding.BindingBehavior.Never = 1 -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingBehavior +Microsoft.AspNetCore.Mvc.ModelBinding.BindingBehavior.Optional = 0 -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingBehavior +Microsoft.AspNetCore.Mvc.ModelBinding.BindingBehavior.Required = 2 -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingBehavior +Microsoft.AspNetCore.Mvc.ModelBinding.BindingBehaviorAttribute +Microsoft.AspNetCore.Mvc.ModelBinding.BindingBehaviorAttribute.Behavior.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingBehavior +Microsoft.AspNetCore.Mvc.ModelBinding.BindingBehaviorAttribute.BindingBehaviorAttribute(Microsoft.AspNetCore.Mvc.ModelBinding.BindingBehavior behavior) -> void +Microsoft.AspNetCore.Mvc.ModelBinding.BindingSourceValueProvider +Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider +Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.CompositeValueProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext +Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.DefaultModelBindingContext() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.DefaultPropertyFilterProvider.DefaultPropertyFilterProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.EmptyModelMetadataProvider +Microsoft.AspNetCore.Mvc.ModelBinding.EmptyModelMetadataProvider.EmptyModelMetadataProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.FormFileValueProvider +Microsoft.AspNetCore.Mvc.ModelBinding.FormFileValueProviderFactory +Microsoft.AspNetCore.Mvc.ModelBinding.FormFileValueProviderFactory.FormFileValueProviderFactory() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.FormValueProvider +Microsoft.AspNetCore.Mvc.ModelBinding.FormValueProviderFactory +Microsoft.AspNetCore.Mvc.ModelBinding.FormValueProviderFactory.FormValueProviderFactory() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.IBindingSourceValueProvider +Microsoft.AspNetCore.Mvc.ModelBinding.ICollectionModelBinder +Microsoft.AspNetCore.Mvc.ModelBinding.IEnumerableValueProvider +Microsoft.AspNetCore.Mvc.ModelBinding.IKeyRewriterValueProvider +Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinderFactory +Microsoft.AspNetCore.Mvc.ModelBinding.JQueryFormValueProvider +Microsoft.AspNetCore.Mvc.ModelBinding.JQueryFormValueProviderFactory +Microsoft.AspNetCore.Mvc.ModelBinding.JQueryFormValueProviderFactory.JQueryFormValueProviderFactory() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.JQueryQueryStringValueProvider +Microsoft.AspNetCore.Mvc.ModelBinding.JQueryQueryStringValueProviderFactory +Microsoft.AspNetCore.Mvc.ModelBinding.JQueryQueryStringValueProviderFactory.JQueryQueryStringValueProviderFactory() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.JQueryValueProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.BindingMetadata() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.IsBindingAllowed.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.IsBindingAllowed.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.IsBindingRequired.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.IsBindingRequired.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.IsReadOnly.get -> bool? +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.IsReadOnly.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadataProviderContext +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadataProviderContext.Key.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingSourceMetadataProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.Key.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.DefaultModelBindingMessageProvider() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.ConvertEmptyStringToNull.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.ConvertEmptyStringToNull.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.DisplayMetadata() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.HasNonDefaultEditFormat.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.HasNonDefaultEditFormat.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.HideSurroundingHtml.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.HideSurroundingHtml.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.HtmlEncode.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.HtmlEncode.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.IsEnum.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.IsEnum.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.IsFlagsEnum.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.IsFlagsEnum.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.Order.get -> int +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.Order.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.ShowForDisplay.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.ShowForDisplay.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.ShowForEdit.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.ShowForEdit.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadataProviderContext +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadataProviderContext.Key.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ExcludeBindingMetadataProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.IBindingMetadataProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ICompositeMetadataDetailsProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.IDisplayMetadataProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.IMetadataDetailsProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.IValidationMetadataProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.MetadataDetailsProviderExtensions +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata.HasValidators.get -> bool? +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata.HasValidators.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata.IsRequired.get -> bool? +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata.IsRequired.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata.ValidateChildren.get -> bool? +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata.ValidateChildren.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata.ValidationMetadata() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadataProviderContext +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadataProviderContext.Key.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity +Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactory +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactoryContext +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactoryContext.ModelBinderFactoryContext() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderExtensions +Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadataProviderExtensions +Microsoft.AspNetCore.Mvc.ModelBinding.ModelNames +Microsoft.AspNetCore.Mvc.ModelBinding.ObjectModelValidator +Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder +Microsoft.AspNetCore.Mvc.ModelBinding.PrefixContainer +Microsoft.AspNetCore.Mvc.ModelBinding.QueryStringValueProvider +Microsoft.AspNetCore.Mvc.ModelBinding.QueryStringValueProviderFactory +Microsoft.AspNetCore.Mvc.ModelBinding.QueryStringValueProviderFactory.QueryStringValueProviderFactory() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.RouteValueProvider +Microsoft.AspNetCore.Mvc.ModelBinding.RouteValueProviderFactory +Microsoft.AspNetCore.Mvc.ModelBinding.RouteValueProviderFactory.RouteValueProviderFactory() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.SuppressChildValidationMetadataProvider +Microsoft.AspNetCore.Mvc.ModelBinding.UnsupportedContentTypeException +Microsoft.AspNetCore.Mvc.ModelBinding.UnsupportedContentTypeFilter +Microsoft.AspNetCore.Mvc.ModelBinding.UnsupportedContentTypeFilter.Order.get -> int +Microsoft.AspNetCore.Mvc.ModelBinding.UnsupportedContentTypeFilter.Order.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.UnsupportedContentTypeFilter.UnsupportedContentTypeFilter() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorCache +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorCache.ClientValidatorCache() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.CompositeClientModelValidatorProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.CompositeModelValidatorProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IMetadataBasedModelValidatorProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IObjectModelValidator +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidatorProviderExtensions +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidateNeverAttribute +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidateNeverAttribute.ShouldValidateEntry(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationEntry entry, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationEntry parentEntry) -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidateNeverAttribute.ValidateNeverAttribute() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.AllowShortCircuitingValidationWhenNoValidatorsArePresent.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.AllowShortCircuitingValidationWhenNoValidatorsArePresent.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.MaxValidationDepth.get -> int? +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.MaxValidationDepth.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.StateManager +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.StateManager.Dispose() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.ValidateComplexTypesIfChildValidationFails.get -> bool +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.ValidateComplexTypesIfChildValidationFails.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorCache +Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorCache.ValidatorCache() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryExtensions +Microsoft.AspNetCore.Mvc.ModelMetadataTypeAttribute +Microsoft.AspNetCore.Mvc.MvcOptions +Microsoft.AspNetCore.Mvc.MvcOptions.AllowEmptyInputInBodyModelBinding.get -> bool +Microsoft.AspNetCore.Mvc.MvcOptions.AllowEmptyInputInBodyModelBinding.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.EnableEndpointRouting.get -> bool +Microsoft.AspNetCore.Mvc.MvcOptions.EnableEndpointRouting.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.MaxIAsyncEnumerableBufferLimit.get -> int +Microsoft.AspNetCore.Mvc.MvcOptions.MaxIAsyncEnumerableBufferLimit.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.MaxModelBindingCollectionSize.get -> int +Microsoft.AspNetCore.Mvc.MvcOptions.MaxModelBindingCollectionSize.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.MaxModelBindingRecursionDepth.get -> int +Microsoft.AspNetCore.Mvc.MvcOptions.MaxModelBindingRecursionDepth.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.MaxModelValidationErrors.get -> int +Microsoft.AspNetCore.Mvc.MvcOptions.MaxModelValidationErrors.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.MaxValidationDepth.get -> int? +Microsoft.AspNetCore.Mvc.MvcOptions.MaxValidationDepth.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.MvcOptions() -> void +Microsoft.AspNetCore.Mvc.MvcOptions.RequireHttpsPermanent.get -> bool +Microsoft.AspNetCore.Mvc.MvcOptions.RequireHttpsPermanent.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.RespectBrowserAcceptHeader.get -> bool +Microsoft.AspNetCore.Mvc.MvcOptions.RespectBrowserAcceptHeader.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.ReturnHttpNotAcceptable.get -> bool +Microsoft.AspNetCore.Mvc.MvcOptions.ReturnHttpNotAcceptable.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.SslPort.get -> int? +Microsoft.AspNetCore.Mvc.MvcOptions.SslPort.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.SuppressAsyncSuffixInActionNames.get -> bool +Microsoft.AspNetCore.Mvc.MvcOptions.SuppressAsyncSuffixInActionNames.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes.get -> bool +Microsoft.AspNetCore.Mvc.MvcOptions.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.SuppressInputFormatterBuffering.get -> bool +Microsoft.AspNetCore.Mvc.MvcOptions.SuppressInputFormatterBuffering.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.SuppressOutputFormatterBuffering.get -> bool +Microsoft.AspNetCore.Mvc.MvcOptions.SuppressOutputFormatterBuffering.set -> void +Microsoft.AspNetCore.Mvc.MvcOptions.ValidateComplexTypesIfChildValidationFails.get -> bool +Microsoft.AspNetCore.Mvc.MvcOptions.ValidateComplexTypesIfChildValidationFails.set -> void +Microsoft.AspNetCore.Mvc.NoContentResult +Microsoft.AspNetCore.Mvc.NoContentResult.NoContentResult() -> void +Microsoft.AspNetCore.Mvc.NonActionAttribute +Microsoft.AspNetCore.Mvc.NonActionAttribute.NonActionAttribute() -> void +Microsoft.AspNetCore.Mvc.NonControllerAttribute +Microsoft.AspNetCore.Mvc.NonControllerAttribute.NonControllerAttribute() -> void +Microsoft.AspNetCore.Mvc.NonViewComponentAttribute +Microsoft.AspNetCore.Mvc.NonViewComponentAttribute.NonViewComponentAttribute() -> void +Microsoft.AspNetCore.Mvc.NotFoundObjectResult +Microsoft.AspNetCore.Mvc.NotFoundResult +Microsoft.AspNetCore.Mvc.NotFoundResult.NotFoundResult() -> void +Microsoft.AspNetCore.Mvc.ObjectResult +Microsoft.AspNetCore.Mvc.ObjectResult.StatusCode.get -> int? +Microsoft.AspNetCore.Mvc.ObjectResult.StatusCode.set -> void +Microsoft.AspNetCore.Mvc.OkObjectResult +Microsoft.AspNetCore.Mvc.OkResult +Microsoft.AspNetCore.Mvc.OkResult.OkResult() -> void +Microsoft.AspNetCore.Mvc.PhysicalFileResult +Microsoft.AspNetCore.Mvc.ProblemDetails +Microsoft.AspNetCore.Mvc.ProblemDetails.ProblemDetails() -> void +Microsoft.AspNetCore.Mvc.ProblemDetails.Status.get -> int? +Microsoft.AspNetCore.Mvc.ProblemDetails.Status.set -> void +Microsoft.AspNetCore.Mvc.ProducesAttribute +Microsoft.AspNetCore.Mvc.ProducesAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.ProducesAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.ProducesAttribute.StatusCode.get -> int +Microsoft.AspNetCore.Mvc.ProducesDefaultResponseTypeAttribute +Microsoft.AspNetCore.Mvc.ProducesDefaultResponseTypeAttribute.ProducesDefaultResponseTypeAttribute() -> void +Microsoft.AspNetCore.Mvc.ProducesDefaultResponseTypeAttribute.StatusCode.get -> int +Microsoft.AspNetCore.Mvc.ProducesErrorResponseTypeAttribute +Microsoft.AspNetCore.Mvc.ProducesResponseTypeAttribute +Microsoft.AspNetCore.Mvc.ProducesResponseTypeAttribute.ProducesResponseTypeAttribute(int statusCode) -> void +Microsoft.AspNetCore.Mvc.ProducesResponseTypeAttribute.StatusCode.get -> int +Microsoft.AspNetCore.Mvc.ProducesResponseTypeAttribute.StatusCode.set -> void +Microsoft.AspNetCore.Mvc.RedirectResult +Microsoft.AspNetCore.Mvc.RedirectResult.Permanent.get -> bool +Microsoft.AspNetCore.Mvc.RedirectResult.Permanent.set -> void +Microsoft.AspNetCore.Mvc.RedirectResult.PreserveMethod.get -> bool +Microsoft.AspNetCore.Mvc.RedirectResult.PreserveMethod.set -> void +Microsoft.AspNetCore.Mvc.RedirectToActionResult +Microsoft.AspNetCore.Mvc.RedirectToActionResult.Permanent.get -> bool +Microsoft.AspNetCore.Mvc.RedirectToActionResult.Permanent.set -> void +Microsoft.AspNetCore.Mvc.RedirectToActionResult.PreserveMethod.get -> bool +Microsoft.AspNetCore.Mvc.RedirectToActionResult.PreserveMethod.set -> void +Microsoft.AspNetCore.Mvc.RedirectToPageResult +Microsoft.AspNetCore.Mvc.RedirectToPageResult.Permanent.get -> bool +Microsoft.AspNetCore.Mvc.RedirectToPageResult.Permanent.set -> void +Microsoft.AspNetCore.Mvc.RedirectToPageResult.PreserveMethod.get -> bool +Microsoft.AspNetCore.Mvc.RedirectToPageResult.PreserveMethod.set -> void +Microsoft.AspNetCore.Mvc.RedirectToRouteResult +Microsoft.AspNetCore.Mvc.RedirectToRouteResult.Permanent.get -> bool +Microsoft.AspNetCore.Mvc.RedirectToRouteResult.Permanent.set -> void +Microsoft.AspNetCore.Mvc.RedirectToRouteResult.PreserveMethod.get -> bool +Microsoft.AspNetCore.Mvc.RedirectToRouteResult.PreserveMethod.set -> void +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.BufferBody.get -> bool +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.BufferBody.set -> void +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.BufferBodyLengthLimit.get -> long +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.BufferBodyLengthLimit.set -> void +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.KeyLengthLimit.get -> int +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.KeyLengthLimit.set -> void +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.MemoryBufferThreshold.get -> int +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.MemoryBufferThreshold.set -> void +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.MultipartBodyLengthLimit.get -> long +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.MultipartBodyLengthLimit.set -> void +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.MultipartBoundaryLengthLimit.get -> int +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.MultipartBoundaryLengthLimit.set -> void +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.MultipartHeadersCountLimit.get -> int +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.MultipartHeadersCountLimit.set -> void +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.MultipartHeadersLengthLimit.get -> int +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.MultipartHeadersLengthLimit.set -> void +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.RequestFormLimitsAttribute() -> void +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.ValueCountLimit.get -> int +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.ValueCountLimit.set -> void +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.ValueLengthLimit.get -> int +Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.ValueLengthLimit.set -> void +Microsoft.AspNetCore.Mvc.RequestSizeLimitAttribute +Microsoft.AspNetCore.Mvc.RequestSizeLimitAttribute.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.RequestSizeLimitAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.RequestSizeLimitAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.RequestSizeLimitAttribute.RequestSizeLimitAttribute(long bytes) -> void +Microsoft.AspNetCore.Mvc.RequireHttpsAttribute +Microsoft.AspNetCore.Mvc.RequireHttpsAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.RequireHttpsAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.RequireHttpsAttribute.Permanent.get -> bool +Microsoft.AspNetCore.Mvc.RequireHttpsAttribute.Permanent.set -> void +Microsoft.AspNetCore.Mvc.RequireHttpsAttribute.RequireHttpsAttribute() -> void +Microsoft.AspNetCore.Mvc.ResponseCacheAttribute +Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.Duration.get -> int +Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.Duration.set -> void +Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.Location.get -> Microsoft.AspNetCore.Mvc.ResponseCacheLocation +Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.Location.set -> void +Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.NoStore.get -> bool +Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.NoStore.set -> void +Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.ResponseCacheAttribute() -> void +Microsoft.AspNetCore.Mvc.ResponseCacheLocation +Microsoft.AspNetCore.Mvc.ResponseCacheLocation.Any = 0 -> Microsoft.AspNetCore.Mvc.ResponseCacheLocation +Microsoft.AspNetCore.Mvc.ResponseCacheLocation.Client = 1 -> Microsoft.AspNetCore.Mvc.ResponseCacheLocation +Microsoft.AspNetCore.Mvc.ResponseCacheLocation.None = 2 -> Microsoft.AspNetCore.Mvc.ResponseCacheLocation +Microsoft.AspNetCore.Mvc.RouteAttribute +Microsoft.AspNetCore.Mvc.RouteAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.RouteAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.Routing.DynamicRouteValueTransformer +Microsoft.AspNetCore.Mvc.Routing.DynamicRouteValueTransformer.DynamicRouteValueTransformer() -> void +Microsoft.AspNetCore.Mvc.Routing.HttpMethodAttribute +Microsoft.AspNetCore.Mvc.Routing.HttpMethodAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.Routing.HttpMethodAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.Routing.IActionHttpMethodProvider +Microsoft.AspNetCore.Mvc.Routing.IRouteTemplateProvider +Microsoft.AspNetCore.Mvc.Routing.IRouteTemplateProvider.Order.get -> int? +Microsoft.AspNetCore.Mvc.Routing.IRouteValueProvider +Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory +Microsoft.AspNetCore.Mvc.Routing.KnownRouteValueConstraint +Microsoft.AspNetCore.Mvc.Routing.RouteValueAttribute +Microsoft.AspNetCore.Mvc.Routing.UrlHelper +Microsoft.AspNetCore.Mvc.Routing.UrlHelperBase +Microsoft.AspNetCore.Mvc.Routing.UrlHelperFactory +Microsoft.AspNetCore.Mvc.Routing.UrlHelperFactory.UrlHelperFactory() -> void +Microsoft.AspNetCore.Mvc.SerializableError +Microsoft.AspNetCore.Mvc.SerializableError.SerializableError() -> void +Microsoft.AspNetCore.Mvc.ServiceFilterAttribute +Microsoft.AspNetCore.Mvc.ServiceFilterAttribute.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.ServiceFilterAttribute.IsReusable.set -> void +Microsoft.AspNetCore.Mvc.ServiceFilterAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.ServiceFilterAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.SignInResult +Microsoft.AspNetCore.Mvc.SignOutResult +Microsoft.AspNetCore.Mvc.SignOutResult.SignOutResult() -> void +Microsoft.AspNetCore.Mvc.StatusCodeResult +Microsoft.AspNetCore.Mvc.StatusCodeResult.StatusCode.get -> int +Microsoft.AspNetCore.Mvc.StatusCodeResult.StatusCodeResult(int statusCode) -> void +Microsoft.AspNetCore.Mvc.TypeFilterAttribute +Microsoft.AspNetCore.Mvc.TypeFilterAttribute.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.TypeFilterAttribute.IsReusable.set -> void +Microsoft.AspNetCore.Mvc.TypeFilterAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.TypeFilterAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.UnauthorizedObjectResult +Microsoft.AspNetCore.Mvc.UnauthorizedResult +Microsoft.AspNetCore.Mvc.UnauthorizedResult.UnauthorizedResult() -> void +Microsoft.AspNetCore.Mvc.UnprocessableEntityObjectResult +Microsoft.AspNetCore.Mvc.UnprocessableEntityResult +Microsoft.AspNetCore.Mvc.UnprocessableEntityResult.UnprocessableEntityResult() -> void +Microsoft.AspNetCore.Mvc.UnsupportedMediaTypeResult +Microsoft.AspNetCore.Mvc.UnsupportedMediaTypeResult.UnsupportedMediaTypeResult() -> void +Microsoft.AspNetCore.Mvc.UrlHelperExtensions +Microsoft.AspNetCore.Mvc.ValidationProblemDetails +Microsoft.AspNetCore.Mvc.ValidationProblemDetails.ValidationProblemDetails() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.IKeepTempDataResult +Microsoft.AspNetCore.Mvc.VirtualFileResult +Microsoft.AspNetCore.Routing.ControllerLinkGeneratorExtensions +Microsoft.AspNetCore.Routing.PageLinkGeneratorExtensions +Microsoft.Extensions.DependencyInjection.ApplicationModelConventionExtensions +Microsoft.Extensions.DependencyInjection.IMvcBuilder +Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +Microsoft.Extensions.DependencyInjection.MvcCoreMvcBuilderExtensions +Microsoft.Extensions.DependencyInjection.MvcCoreMvcCoreBuilderExtensions +Microsoft.Extensions.DependencyInjection.MvcCoreServiceCollectionExtensions +abstract Microsoft.AspNetCore.Mvc.Diagnostics.EventData.Count.get -> int +const Microsoft.AspNetCore.Mvc.Infrastructure.FileResultExecutorBase.BufferSize = 65536 -> int +override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.EnterNestedScope() -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.NestedScope +override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.ExitNestedScope() -> void +override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.IsTopLevelObject.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.IsTopLevelObject.set -> void +override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.Result.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult +override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.Result.set -> void +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.ConvertEmptyStringToNull.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.HasNonDefaultEditFormat.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.HasValidators.get -> bool? +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.HideSurroundingHtml.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.HtmlEncode.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.IsBindingAllowed.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.IsBindingRequired.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.IsEnum.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.IsFlagsEnum.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.IsReadOnly.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.IsRequired.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.Order.get -> int +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.ShowForDisplay.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.ShowForEdit.get -> bool +override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.ValidateChildren.get -> bool +static readonly Microsoft.AspNetCore.Mvc.ActionConstraints.HttpMethodActionConstraint.HttpMethodConstraintOrder -> int +static readonly Microsoft.AspNetCore.Mvc.ConsumesAttribute.ConsumesActionConstraintOrder -> int +static readonly Microsoft.AspNetCore.Mvc.Filters.FilterScope.Action -> int +static readonly Microsoft.AspNetCore.Mvc.Filters.FilterScope.Controller -> int +static readonly Microsoft.AspNetCore.Mvc.Filters.FilterScope.First -> int +static readonly Microsoft.AspNetCore.Mvc.Filters.FilterScope.Global -> int +static readonly Microsoft.AspNetCore.Mvc.Filters.FilterScope.Last -> int +virtual Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.ValidateNode() -> bool +virtual Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.VisitSimpleType() -> bool +~Microsoft.AspNetCore.Builder.ControllerActionEndpointConventionBuilder.Add(System.Action convention) -> void +~Microsoft.AspNetCore.Mvc.AcceptVerbsAttribute.AcceptVerbsAttribute(params string[] methods) -> void +~Microsoft.AspNetCore.Mvc.AcceptVerbsAttribute.AcceptVerbsAttribute(string method) -> void +~Microsoft.AspNetCore.Mvc.AcceptVerbsAttribute.HttpMethods.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.AcceptVerbsAttribute.Name.get -> string +~Microsoft.AspNetCore.Mvc.AcceptVerbsAttribute.Name.set -> void +~Microsoft.AspNetCore.Mvc.AcceptVerbsAttribute.Route.get -> string +~Microsoft.AspNetCore.Mvc.AcceptVerbsAttribute.Route.set -> void +~Microsoft.AspNetCore.Mvc.AcceptedAtActionResult.AcceptedAtActionResult(string actionName, string controllerName, object routeValues, object value) -> void +~Microsoft.AspNetCore.Mvc.AcceptedAtActionResult.ActionName.get -> string +~Microsoft.AspNetCore.Mvc.AcceptedAtActionResult.ActionName.set -> void +~Microsoft.AspNetCore.Mvc.AcceptedAtActionResult.ControllerName.get -> string +~Microsoft.AspNetCore.Mvc.AcceptedAtActionResult.ControllerName.set -> void +~Microsoft.AspNetCore.Mvc.AcceptedAtActionResult.RouteValues.get -> Microsoft.AspNetCore.Routing.RouteValueDictionary +~Microsoft.AspNetCore.Mvc.AcceptedAtActionResult.RouteValues.set -> void +~Microsoft.AspNetCore.Mvc.AcceptedAtActionResult.UrlHelper.get -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.AcceptedAtActionResult.UrlHelper.set -> void +~Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult.AcceptedAtRouteResult(object routeValues, object value) -> void +~Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult.AcceptedAtRouteResult(string routeName, object routeValues, object value) -> void +~Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult.RouteName.get -> string +~Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult.RouteName.set -> void +~Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult.RouteValues.get -> Microsoft.AspNetCore.Routing.RouteValueDictionary +~Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult.RouteValues.set -> void +~Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult.UrlHelper.get -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult.UrlHelper.set -> void +~Microsoft.AspNetCore.Mvc.AcceptedResult.AcceptedResult(System.Uri locationUri, object value) -> void +~Microsoft.AspNetCore.Mvc.AcceptedResult.AcceptedResult(string location, object value) -> void +~Microsoft.AspNetCore.Mvc.AcceptedResult.Location.get -> string +~Microsoft.AspNetCore.Mvc.AcceptedResult.Location.set -> void +~Microsoft.AspNetCore.Mvc.ActionConstraints.ActionMethodSelectorAttribute.Accept(Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintContext context) -> bool +~Microsoft.AspNetCore.Mvc.ActionConstraints.HttpMethodActionConstraint.HttpMethodActionConstraint(System.Collections.Generic.IEnumerable httpMethods) -> void +~Microsoft.AspNetCore.Mvc.ActionConstraints.HttpMethodActionConstraint.HttpMethods.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.ActionNameAttribute.ActionNameAttribute(string name) -> void +~Microsoft.AspNetCore.Mvc.ActionNameAttribute.Name.get -> string +~Microsoft.AspNetCore.Mvc.ActionResult.ActionResult(Microsoft.AspNetCore.Mvc.ActionResult result) -> void +~Microsoft.AspNetCore.Mvc.ActionResult.Result.get -> Microsoft.AspNetCore.Mvc.ActionResult +~Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.ClientErrorMapping.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.InvalidModelStateResponseFactory.get -> System.Func +~Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.InvalidModelStateResponseFactory.set -> void +~Microsoft.AspNetCore.Mvc.ApiConventionMethodAttribute.ApiConventionMethodAttribute(System.Type conventionType, string methodName) -> void +~Microsoft.AspNetCore.Mvc.ApiConventionMethodAttribute.ConventionType.get -> System.Type +~Microsoft.AspNetCore.Mvc.ApiConventionTypeAttribute.ApiConventionTypeAttribute(System.Type conventionType) -> void +~Microsoft.AspNetCore.Mvc.ApiConventionTypeAttribute.ConventionType.get -> System.Type +~Microsoft.AspNetCore.Mvc.ApiDescriptionActionData.GroupName.get -> string +~Microsoft.AspNetCore.Mvc.ApiDescriptionActionData.GroupName.set -> void +~Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionResult.ApiConventionResult(System.Collections.Generic.IReadOnlyList responseMetadataProviders) -> void +~Microsoft.AspNetCore.Mvc.ApiExplorer.ApiConventionResult.ResponseMetadataProviders.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionGroupNameProvider.GroupName.get -> string +~Microsoft.AspNetCore.Mvc.ApiExplorer.IApiRequestFormatMetadataProvider.GetSupportedContentTypes(string contentType, System.Type objectType) -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ApiExplorer.IApiRequestMetadataProvider.SetContentTypes(Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection contentTypes) -> void +~Microsoft.AspNetCore.Mvc.ApiExplorer.IApiResponseMetadataProvider.SetContentTypes(Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection contentTypes) -> void +~Microsoft.AspNetCore.Mvc.ApiExplorer.IApiResponseMetadataProvider.Type.get -> System.Type +~Microsoft.AspNetCore.Mvc.ApiExplorer.IApiResponseTypeMetadataProvider.GetSupportedContentTypes(string contentType, System.Type objectType) -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ApiExplorerSettingsAttribute.GroupName.get -> string +~Microsoft.AspNetCore.Mvc.ApiExplorerSettingsAttribute.GroupName.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.ActionMethod.get -> System.Reflection.MethodInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.ActionModel(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel other) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.ActionModel(System.Reflection.MethodInfo actionMethod, System.Collections.Generic.IReadOnlyList attributes) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.ActionName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.ActionName.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.ApiExplorer.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.ApiExplorerModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.ApiExplorer.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.Attributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.Controller.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.Controller.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.DisplayName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.Filters.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.Parameters.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.Properties.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.RouteParameterTransformer.get -> Microsoft.AspNetCore.Routing.IOutboundParameterTransformer +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.RouteParameterTransformer.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.RouteValues.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel.Selectors.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApiConventionApplicationModelConvention.ApiConventionApplicationModelConvention(Microsoft.AspNetCore.Mvc.ProducesErrorResponseTypeAttribute defaultErrorResponseType) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApiConventionApplicationModelConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApiConventionApplicationModelConvention.DefaultErrorResponseType.get -> Microsoft.AspNetCore.Mvc.ProducesErrorResponseTypeAttribute +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApiExplorerModel.ApiExplorerModel(Microsoft.AspNetCore.Mvc.ApplicationModels.ApiExplorerModel other) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApiExplorerModel.GroupName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApiExplorerModel.GroupName.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApiVisibilityConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModel.ApiExplorer.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.ApiExplorerModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModel.ApiExplorer.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModel.Controllers.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModel.Filters.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModel.Properties.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModelProviderContext.ApplicationModelProviderContext(System.Collections.Generic.IEnumerable controllerTypes) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModelProviderContext.ControllerTypes.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModelProviderContext.Result.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.Attribute.get -> Microsoft.AspNetCore.Mvc.Routing.IRouteTemplateProvider +~Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.AttributeRouteModel(Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel other) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.AttributeRouteModel(Microsoft.AspNetCore.Mvc.Routing.IRouteTemplateProvider templateProvider) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.Name.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.Name.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.Template.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.Template.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ClientErrorResultFilterConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ConsumesConstraintForFormFileParameterConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.Actions.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.ApiExplorer.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.ApiExplorerModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.ApiExplorer.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.Application.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.Application.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.Attributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.ControllerModel(Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel other) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.ControllerModel(System.Reflection.TypeInfo controllerType, System.Collections.Generic.IReadOnlyList attributes) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.ControllerName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.ControllerName.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.ControllerProperties.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.ControllerType.get -> System.Reflection.TypeInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.DisplayName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.Filters.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.Properties.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.RouteValues.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel.Selectors.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.IActionModelConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IApiExplorerModel.ApiExplorer.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.ApiExplorerModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.IApiExplorerModel.ApiExplorer.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IApplicationModelConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModel application) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IApplicationModelProvider.OnProvidersExecuted(Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModelProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IApplicationModelProvider.OnProvidersExecuting(Microsoft.AspNetCore.Mvc.ApplicationModels.ApplicationModelProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IBindingModel.BindingInfo.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.IBindingModel.BindingInfo.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ICommonModel.Attributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ApplicationModels.ICommonModel.MemberInfo.get -> System.Reflection.MemberInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.ICommonModel.Name.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.IControllerModelConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel controller) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IFilterModel.Filters.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.IParameterModelBaseConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModelBase parameter) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IParameterModelConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModel parameter) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IPropertyModel.Properties.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApplicationModels.InferParameterBindingInfoConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.InferParameterBindingInfoConvention.InferParameterBindingInfoConvention(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider modelMetadataProvider) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.InvalidModelStateFilterConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModel.Action.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModel.Action.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModel.Attributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModel.DisplayName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModel.ParameterInfo.get -> System.Reflection.ParameterInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModel.ParameterModel(Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModel other) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModel.ParameterModel(System.Reflection.ParameterInfo parameterInfo, System.Collections.Generic.IReadOnlyList attributes) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModel.ParameterName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModel.ParameterName.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModel.Properties.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModelBase.Attributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModelBase.BindingInfo.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModelBase.BindingInfo.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModelBase.Name.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModelBase.Name.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModelBase.ParameterModelBase(Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModelBase other) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModelBase.ParameterModelBase(System.Type parameterType, System.Collections.Generic.IReadOnlyList attributes) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModelBase.ParameterType.get -> System.Type +~Microsoft.AspNetCore.Mvc.ApplicationModels.ParameterModelBase.Properties.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApplicationModels.PropertyModel.Attributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ApplicationModels.PropertyModel.Controller.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.PropertyModel.Controller.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PropertyModel.Properties.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApplicationModels.PropertyModel.PropertyInfo.get -> System.Reflection.PropertyInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.PropertyModel.PropertyModel(Microsoft.AspNetCore.Mvc.ApplicationModels.PropertyModel other) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PropertyModel.PropertyModel(System.Reflection.PropertyInfo propertyInfo, System.Collections.Generic.IReadOnlyList attributes) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PropertyModel.PropertyName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PropertyModel.PropertyName.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.RouteTokenTransformerConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.RouteTokenTransformerConvention.RouteTokenTransformerConvention(Microsoft.AspNetCore.Routing.IOutboundParameterTransformer parameterTransformer) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.SelectorModel.ActionConstraints.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.SelectorModel.AttributeRouteModel.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.SelectorModel.AttributeRouteModel.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.SelectorModel.EndpointMetadata.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.SelectorModel.SelectorModel(Microsoft.AspNetCore.Mvc.ApplicationModels.SelectorModel other) -> void +~Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartAttribute.ApplicationPartAttribute(string assemblyName) -> void +~Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartAttribute.AssemblyName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartManager.ApplicationParts.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartManager.FeatureProviders.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationParts.AssemblyPart.Assembly.get -> System.Reflection.Assembly +~Microsoft.AspNetCore.Mvc.ApplicationParts.AssemblyPart.AssemblyPart(System.Reflection.Assembly assembly) -> void +~Microsoft.AspNetCore.Mvc.ApplicationParts.AssemblyPart.Types.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.ApplicationParts.IApplicationFeatureProvider.PopulateFeature(System.Collections.Generic.IEnumerable parts, TFeature feature) -> void +~Microsoft.AspNetCore.Mvc.ApplicationParts.IApplicationPartTypeProvider.Types.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.ApplicationParts.ICompilationReferencesProvider.GetReferencePaths() -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.ApplicationParts.ProvideApplicationPartFactoryAttribute.GetFactoryType() -> System.Type +~Microsoft.AspNetCore.Mvc.ApplicationParts.ProvideApplicationPartFactoryAttribute.ProvideApplicationPartFactoryAttribute(System.Type factoryType) -> void +~Microsoft.AspNetCore.Mvc.ApplicationParts.ProvideApplicationPartFactoryAttribute.ProvideApplicationPartFactoryAttribute(string factoryTypeName) -> void +~Microsoft.AspNetCore.Mvc.ApplicationParts.RelatedAssemblyAttribute.AssemblyFileName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationParts.RelatedAssemblyAttribute.RelatedAssemblyAttribute(string assemblyFileName) -> void +~Microsoft.AspNetCore.Mvc.AreaAttribute.AreaAttribute(string areaName) -> void +~Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter.AuthorizeData.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter.AuthorizeFilter(Microsoft.AspNetCore.Authorization.AuthorizationPolicy policy) -> void +~Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter.AuthorizeFilter(Microsoft.AspNetCore.Authorization.IAuthorizationPolicyProvider policyProvider, System.Collections.Generic.IEnumerable authorizeData) -> void +~Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter.AuthorizeFilter(System.Collections.Generic.IEnumerable authorizeData) -> void +~Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter.AuthorizeFilter(string policy) -> void +~Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter.Policy.get -> Microsoft.AspNetCore.Authorization.AuthorizationPolicy +~Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter.PolicyProvider.get -> Microsoft.AspNetCore.Authorization.IAuthorizationPolicyProvider +~Microsoft.AspNetCore.Mvc.BadRequestObjectResult.BadRequestObjectResult(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) -> void +~Microsoft.AspNetCore.Mvc.BadRequestObjectResult.BadRequestObjectResult(object error) -> void +~Microsoft.AspNetCore.Mvc.BindAttribute.BindAttribute(params string[] include) -> void +~Microsoft.AspNetCore.Mvc.BindAttribute.Include.get -> string[] +~Microsoft.AspNetCore.Mvc.BindAttribute.Prefix.get -> string +~Microsoft.AspNetCore.Mvc.BindAttribute.Prefix.set -> void +~Microsoft.AspNetCore.Mvc.BindAttribute.PropertyFilter.get -> System.Func +~Microsoft.AspNetCore.Mvc.BindPropertyAttribute.BinderType.get -> System.Type +~Microsoft.AspNetCore.Mvc.BindPropertyAttribute.BinderType.set -> void +~Microsoft.AspNetCore.Mvc.BindPropertyAttribute.Name.get -> string +~Microsoft.AspNetCore.Mvc.BindPropertyAttribute.Name.set -> void +~Microsoft.AspNetCore.Mvc.CacheProfile.VaryByHeader.get -> string +~Microsoft.AspNetCore.Mvc.CacheProfile.VaryByHeader.set -> void +~Microsoft.AspNetCore.Mvc.CacheProfile.VaryByQueryKeys.get -> string[] +~Microsoft.AspNetCore.Mvc.CacheProfile.VaryByQueryKeys.set -> void +~Microsoft.AspNetCore.Mvc.ChallengeResult.AuthenticationSchemes.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ChallengeResult.AuthenticationSchemes.set -> void +~Microsoft.AspNetCore.Mvc.ChallengeResult.ChallengeResult(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> void +~Microsoft.AspNetCore.Mvc.ChallengeResult.ChallengeResult(System.Collections.Generic.IList authenticationSchemes) -> void +~Microsoft.AspNetCore.Mvc.ChallengeResult.ChallengeResult(System.Collections.Generic.IList authenticationSchemes, Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> void +~Microsoft.AspNetCore.Mvc.ChallengeResult.ChallengeResult(string authenticationScheme) -> void +~Microsoft.AspNetCore.Mvc.ChallengeResult.ChallengeResult(string authenticationScheme, Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> void +~Microsoft.AspNetCore.Mvc.ChallengeResult.Properties.get -> Microsoft.AspNetCore.Authentication.AuthenticationProperties +~Microsoft.AspNetCore.Mvc.ChallengeResult.Properties.set -> void +~Microsoft.AspNetCore.Mvc.ClientErrorData.Link.get -> string +~Microsoft.AspNetCore.Mvc.ClientErrorData.Link.set -> void +~Microsoft.AspNetCore.Mvc.ClientErrorData.Title.get -> string +~Microsoft.AspNetCore.Mvc.ClientErrorData.Title.set -> void +~Microsoft.AspNetCore.Mvc.ConflictObjectResult.ConflictObjectResult(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) -> void +~Microsoft.AspNetCore.Mvc.ConflictObjectResult.ConflictObjectResult(object error) -> void +~Microsoft.AspNetCore.Mvc.ConsumesAttribute.Accept(Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintContext context) -> bool +~Microsoft.AspNetCore.Mvc.ConsumesAttribute.ConsumesAttribute(string contentType, params string[] otherContentTypes) -> void +~Microsoft.AspNetCore.Mvc.ConsumesAttribute.ContentTypes.get -> Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection +~Microsoft.AspNetCore.Mvc.ConsumesAttribute.ContentTypes.set -> void +~Microsoft.AspNetCore.Mvc.ConsumesAttribute.OnResourceExecuted(Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext context) -> void +~Microsoft.AspNetCore.Mvc.ConsumesAttribute.OnResourceExecuting(Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext context) -> void +~Microsoft.AspNetCore.Mvc.ConsumesAttribute.SetContentTypes(Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection contentTypes) -> void +~Microsoft.AspNetCore.Mvc.ContentResult.Content.get -> string +~Microsoft.AspNetCore.Mvc.ContentResult.Content.set -> void +~Microsoft.AspNetCore.Mvc.ContentResult.ContentType.get -> string +~Microsoft.AspNetCore.Mvc.ContentResult.ContentType.set -> void +~Microsoft.AspNetCore.Mvc.ControllerBase.ControllerContext.get -> Microsoft.AspNetCore.Mvc.ControllerContext +~Microsoft.AspNetCore.Mvc.ControllerBase.ControllerContext.set -> void +~Microsoft.AspNetCore.Mvc.ControllerBase.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext +~Microsoft.AspNetCore.Mvc.ControllerBase.MetadataProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider +~Microsoft.AspNetCore.Mvc.ControllerBase.MetadataProvider.set -> void +~Microsoft.AspNetCore.Mvc.ControllerBase.ModelBinderFactory.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinderFactory +~Microsoft.AspNetCore.Mvc.ControllerBase.ModelBinderFactory.set -> void +~Microsoft.AspNetCore.Mvc.ControllerBase.ModelState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary +~Microsoft.AspNetCore.Mvc.ControllerBase.ObjectValidator.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IObjectModelValidator +~Microsoft.AspNetCore.Mvc.ControllerBase.ObjectValidator.set -> void +~Microsoft.AspNetCore.Mvc.ControllerBase.ProblemDetailsFactory.get -> Microsoft.AspNetCore.Mvc.Infrastructure.ProblemDetailsFactory +~Microsoft.AspNetCore.Mvc.ControllerBase.ProblemDetailsFactory.set -> void +~Microsoft.AspNetCore.Mvc.ControllerBase.Request.get -> Microsoft.AspNetCore.Http.HttpRequest +~Microsoft.AspNetCore.Mvc.ControllerBase.Response.get -> Microsoft.AspNetCore.Http.HttpResponse +~Microsoft.AspNetCore.Mvc.ControllerBase.RouteData.get -> Microsoft.AspNetCore.Routing.RouteData +~Microsoft.AspNetCore.Mvc.ControllerBase.TryUpdateModelAsync(object model, System.Type modelType, string prefix, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider, System.Func propertyFilter) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ControllerBase.TryUpdateModelAsync(TModel model, string prefix, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider, System.Func propertyFilter) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ControllerBase.TryUpdateModelAsync(TModel model, string prefix, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider, params System.Linq.Expressions.Expression>[] includeExpressions) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ControllerBase.TryUpdateModelAsync(TModel model, string prefix, System.Func propertyFilter) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ControllerBase.TryUpdateModelAsync(TModel model, string prefix, params System.Linq.Expressions.Expression>[] includeExpressions) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ControllerBase.Url.get -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.ControllerBase.Url.set -> void +~Microsoft.AspNetCore.Mvc.ControllerBase.User.get -> System.Security.Claims.ClaimsPrincipal +~Microsoft.AspNetCore.Mvc.ControllerContext.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor +~Microsoft.AspNetCore.Mvc.ControllerContext.ActionDescriptor.set -> void +~Microsoft.AspNetCore.Mvc.ControllerContext.ControllerContext(Microsoft.AspNetCore.Mvc.ActionContext context) -> void +~Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor.ControllerName.get -> string +~Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor.ControllerName.set -> void +~Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor.ControllerTypeInfo.get -> System.Reflection.TypeInfo +~Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor.ControllerTypeInfo.set -> void +~Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor.MethodInfo.get -> System.Reflection.MethodInfo +~Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor.MethodInfo.set -> void +~Microsoft.AspNetCore.Mvc.Controllers.ControllerActivatorProvider.ControllerActivatorProvider(Microsoft.AspNetCore.Mvc.Controllers.IControllerActivator controllerActivator) -> void +~Microsoft.AspNetCore.Mvc.Controllers.ControllerActivatorProvider.CreateActivator(Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor descriptor) -> System.Func +~Microsoft.AspNetCore.Mvc.Controllers.ControllerActivatorProvider.CreateReleaser(Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor descriptor) -> System.Action +~Microsoft.AspNetCore.Mvc.Controllers.ControllerBoundPropertyDescriptor.PropertyInfo.get -> System.Reflection.PropertyInfo +~Microsoft.AspNetCore.Mvc.Controllers.ControllerBoundPropertyDescriptor.PropertyInfo.set -> void +~Microsoft.AspNetCore.Mvc.Controllers.ControllerFeature.Controllers.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Controllers.ControllerFeatureProvider.PopulateFeature(System.Collections.Generic.IEnumerable parts, Microsoft.AspNetCore.Mvc.Controllers.ControllerFeature feature) -> void +~Microsoft.AspNetCore.Mvc.Controllers.ControllerParameterDescriptor.ParameterInfo.get -> System.Reflection.ParameterInfo +~Microsoft.AspNetCore.Mvc.Controllers.ControllerParameterDescriptor.ParameterInfo.set -> void +~Microsoft.AspNetCore.Mvc.Controllers.IControllerActivator.Create(Microsoft.AspNetCore.Mvc.ControllerContext context) -> object +~Microsoft.AspNetCore.Mvc.Controllers.IControllerActivator.Release(Microsoft.AspNetCore.Mvc.ControllerContext context, object controller) -> void +~Microsoft.AspNetCore.Mvc.Controllers.IControllerActivatorProvider.CreateActivator(Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor descriptor) -> System.Func +~Microsoft.AspNetCore.Mvc.Controllers.IControllerActivatorProvider.CreateReleaser(Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor descriptor) -> System.Action +~Microsoft.AspNetCore.Mvc.Controllers.IControllerFactory.CreateController(Microsoft.AspNetCore.Mvc.ControllerContext context) -> object +~Microsoft.AspNetCore.Mvc.Controllers.IControllerFactory.ReleaseController(Microsoft.AspNetCore.Mvc.ControllerContext context, object controller) -> void +~Microsoft.AspNetCore.Mvc.Controllers.IControllerFactoryProvider.CreateControllerFactory(Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor descriptor) -> System.Func +~Microsoft.AspNetCore.Mvc.Controllers.IControllerFactoryProvider.CreateControllerReleaser(Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor descriptor) -> System.Action +~Microsoft.AspNetCore.Mvc.Controllers.ServiceBasedControllerActivator.Create(Microsoft.AspNetCore.Mvc.ControllerContext actionContext) -> object +~Microsoft.AspNetCore.Mvc.CreatedAtActionResult.ActionName.get -> string +~Microsoft.AspNetCore.Mvc.CreatedAtActionResult.ActionName.set -> void +~Microsoft.AspNetCore.Mvc.CreatedAtActionResult.ControllerName.get -> string +~Microsoft.AspNetCore.Mvc.CreatedAtActionResult.ControllerName.set -> void +~Microsoft.AspNetCore.Mvc.CreatedAtActionResult.CreatedAtActionResult(string actionName, string controllerName, object routeValues, object value) -> void +~Microsoft.AspNetCore.Mvc.CreatedAtActionResult.RouteValues.get -> Microsoft.AspNetCore.Routing.RouteValueDictionary +~Microsoft.AspNetCore.Mvc.CreatedAtActionResult.RouteValues.set -> void +~Microsoft.AspNetCore.Mvc.CreatedAtActionResult.UrlHelper.get -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.CreatedAtActionResult.UrlHelper.set -> void +~Microsoft.AspNetCore.Mvc.CreatedAtRouteResult.CreatedAtRouteResult(object routeValues, object value) -> void +~Microsoft.AspNetCore.Mvc.CreatedAtRouteResult.CreatedAtRouteResult(string routeName, object routeValues, object value) -> void +~Microsoft.AspNetCore.Mvc.CreatedAtRouteResult.RouteName.get -> string +~Microsoft.AspNetCore.Mvc.CreatedAtRouteResult.RouteName.set -> void +~Microsoft.AspNetCore.Mvc.CreatedAtRouteResult.RouteValues.get -> Microsoft.AspNetCore.Routing.RouteValueDictionary +~Microsoft.AspNetCore.Mvc.CreatedAtRouteResult.RouteValues.set -> void +~Microsoft.AspNetCore.Mvc.CreatedAtRouteResult.UrlHelper.get -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.CreatedAtRouteResult.UrlHelper.set -> void +~Microsoft.AspNetCore.Mvc.CreatedResult.CreatedResult(System.Uri location, object value) -> void +~Microsoft.AspNetCore.Mvc.CreatedResult.CreatedResult(string location, object value) -> void +~Microsoft.AspNetCore.Mvc.CreatedResult.Location.get -> string +~Microsoft.AspNetCore.Mvc.CreatedResult.Location.set -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionEventData.AfterActionEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Http.HttpContext httpContext, Microsoft.AspNetCore.Routing.RouteData routeData) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionEventData.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionEventData.RouteData.get -> Microsoft.AspNetCore.Routing.RouteData +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutedEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutedEventData.ActionExecutedContext.get -> Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutedEventData.AfterActionFilterOnActionExecutedEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext actionExecutedContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutedEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutingEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutingEventData.ActionExecutingContext.get -> Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutingEventData.AfterActionFilterOnActionExecutingEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext actionExecutingContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutingEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutionEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutionEventData.ActionExecutedContext.get -> Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutionEventData.AfterActionFilterOnActionExecutionEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext actionExecutedContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutionEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionResultEventData.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionResultEventData.AfterActionResultEventData(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.IActionResult result) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionResultEventData.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterAuthorizationFilterOnAuthorizationEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterAuthorizationFilterOnAuthorizationEventData.AfterAuthorizationFilterOnAuthorizationEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext authorizationContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterAuthorizationFilterOnAuthorizationEventData.AuthorizationContext.get -> Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterAuthorizationFilterOnAuthorizationEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterControllerActionMethodEventData.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterControllerActionMethodEventData.AfterControllerActionMethodEventData(Microsoft.AspNetCore.Mvc.ActionContext actionContext, System.Collections.Generic.IReadOnlyDictionary arguments, object controller, Microsoft.AspNetCore.Mvc.IActionResult result) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterControllerActionMethodEventData.Arguments.get -> System.Collections.Generic.IReadOnlyDictionary +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterControllerActionMethodEventData.Controller.get -> object +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterControllerActionMethodEventData.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterExceptionFilterOnExceptionEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterExceptionFilterOnExceptionEventData.AfterExceptionFilterOnExceptionEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ExceptionContext exceptionContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterExceptionFilterOnExceptionEventData.ExceptionContext.get -> Microsoft.AspNetCore.Mvc.Filters.ExceptionContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterExceptionFilterOnExceptionEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutedEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutedEventData.AfterResourceFilterOnResourceExecutedEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext resourceExecutedContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutedEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutedEventData.ResourceExecutedContext.get -> Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutingEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutingEventData.AfterResourceFilterOnResourceExecutingEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext resourceExecutingContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutingEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutingEventData.ResourceExecutingContext.get -> Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutionEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutionEventData.AfterResourceFilterOnResourceExecutionEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext resourceExecutedContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutionEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutionEventData.ResourceExecutedContext.get -> Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutedEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutedEventData.AfterResultFilterOnResultExecutedEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext resultExecutedContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutedEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutedEventData.ResultExecutedContext.get -> Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutingEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutingEventData.AfterResultFilterOnResultExecutingEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext resultExecutingContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutingEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutingEventData.ResultExecutingContext.get -> Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutionEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutionEventData.AfterResultFilterOnResultExecutionEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext resultExecutedContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutionEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutionEventData.ResultExecutedContext.get -> Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionEventData.BeforeActionEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Http.HttpContext httpContext, Microsoft.AspNetCore.Routing.RouteData routeData) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionEventData.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionEventData.RouteData.get -> Microsoft.AspNetCore.Routing.RouteData +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutedEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutedEventData.ActionExecutedContext.get -> Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutedEventData.BeforeActionFilterOnActionExecutedEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext actionExecutedContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutedEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutingEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutingEventData.ActionExecutingContext.get -> Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutingEventData.BeforeActionFilterOnActionExecutingEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext actionExecutingContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutingEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutionEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutionEventData.ActionExecutingContext.get -> Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutionEventData.BeforeActionFilterOnActionExecutionEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext actionExecutingContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutionEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionResultEventData.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionResultEventData.BeforeActionResultEventData(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.IActionResult result) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionResultEventData.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeAuthorizationFilterOnAuthorizationEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeAuthorizationFilterOnAuthorizationEventData.AuthorizationContext.get -> Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeAuthorizationFilterOnAuthorizationEventData.BeforeAuthorizationFilterOnAuthorizationEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext authorizationContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeAuthorizationFilterOnAuthorizationEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeControllerActionMethodEventData.ActionArguments.get -> System.Collections.Generic.IReadOnlyDictionary +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeControllerActionMethodEventData.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeControllerActionMethodEventData.BeforeControllerActionMethodEventData(Microsoft.AspNetCore.Mvc.ActionContext actionContext, System.Collections.Generic.IReadOnlyDictionary actionArguments, object controller) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeControllerActionMethodEventData.Controller.get -> object +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeExceptionFilterOnException.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeExceptionFilterOnException.BeforeExceptionFilterOnException(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ExceptionContext exceptionContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeExceptionFilterOnException.ExceptionContext.get -> Microsoft.AspNetCore.Mvc.Filters.ExceptionContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeExceptionFilterOnException.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutedEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutedEventData.BeforeResourceFilterOnResourceExecutedEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext resourceExecutedContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutedEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutedEventData.ResourceExecutedContext.get -> Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutingEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutingEventData.BeforeResourceFilterOnResourceExecutingEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext resourceExecutingContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutingEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutingEventData.ResourceExecutingContext.get -> Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutionEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutionEventData.BeforeResourceFilterOnResourceExecutionEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext resourceExecutingContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutionEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutionEventData.ResourceExecutingContext.get -> Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutedEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutedEventData.BeforeResultFilterOnResultExecutedEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext resultExecutedContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutedEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutedEventData.ResultExecutedContext.get -> Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutingEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutingEventData.BeforeResultFilterOnResultExecutingEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext resultExecutingContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutingEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutingEventData.ResultExecutingContext.get -> Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutionEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutionEventData.BeforeResultFilterOnResultExecutionEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext resultExecutingContext, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutionEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutionEventData.ResultExecutingContext.get -> Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext +~Microsoft.AspNetCore.Mvc.Diagnostics.EventData.Enumerator.Current.get -> System.Collections.Generic.KeyValuePair +~Microsoft.AspNetCore.Mvc.DisableRequestSizeLimitAttribute.CreateInstance(System.IServiceProvider serviceProvider) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.FileContentResult.FileContentResult(byte[] fileContents, Microsoft.Net.Http.Headers.MediaTypeHeaderValue contentType) -> void +~Microsoft.AspNetCore.Mvc.FileContentResult.FileContentResult(byte[] fileContents, string contentType) -> void +~Microsoft.AspNetCore.Mvc.FileContentResult.FileContents.get -> byte[] +~Microsoft.AspNetCore.Mvc.FileContentResult.FileContents.set -> void +~Microsoft.AspNetCore.Mvc.FileResult.ContentType.get -> string +~Microsoft.AspNetCore.Mvc.FileResult.EntityTag.get -> Microsoft.Net.Http.Headers.EntityTagHeaderValue +~Microsoft.AspNetCore.Mvc.FileResult.EntityTag.set -> void +~Microsoft.AspNetCore.Mvc.FileResult.FileDownloadName.get -> string +~Microsoft.AspNetCore.Mvc.FileResult.FileDownloadName.set -> void +~Microsoft.AspNetCore.Mvc.FileResult.FileResult(string contentType) -> void +~Microsoft.AspNetCore.Mvc.FileStreamResult.FileStream.get -> System.IO.Stream +~Microsoft.AspNetCore.Mvc.FileStreamResult.FileStream.set -> void +~Microsoft.AspNetCore.Mvc.FileStreamResult.FileStreamResult(System.IO.Stream fileStream, Microsoft.Net.Http.Headers.MediaTypeHeaderValue contentType) -> void +~Microsoft.AspNetCore.Mvc.FileStreamResult.FileStreamResult(System.IO.Stream fileStream, string contentType) -> void +~Microsoft.AspNetCore.Mvc.Filters.FilterCollection.Add(System.Type filterType) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Filters.FilterCollection.Add(System.Type filterType, int order) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Filters.FilterCollection.Add() -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Filters.FilterCollection.Add(int order) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Filters.FilterCollection.AddService(System.Type filterType) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Filters.FilterCollection.AddService(System.Type filterType, int order) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Filters.FilterCollection.AddService() -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Filters.FilterCollection.AddService(int order) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.ForbidResult.AuthenticationSchemes.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ForbidResult.AuthenticationSchemes.set -> void +~Microsoft.AspNetCore.Mvc.ForbidResult.ForbidResult(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> void +~Microsoft.AspNetCore.Mvc.ForbidResult.ForbidResult(System.Collections.Generic.IList authenticationSchemes) -> void +~Microsoft.AspNetCore.Mvc.ForbidResult.ForbidResult(System.Collections.Generic.IList authenticationSchemes, Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> void +~Microsoft.AspNetCore.Mvc.ForbidResult.ForbidResult(string authenticationScheme) -> void +~Microsoft.AspNetCore.Mvc.ForbidResult.ForbidResult(string authenticationScheme, Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> void +~Microsoft.AspNetCore.Mvc.ForbidResult.Properties.get -> Microsoft.AspNetCore.Authentication.AuthenticationProperties +~Microsoft.AspNetCore.Mvc.ForbidResult.Properties.set -> void +~Microsoft.AspNetCore.Mvc.FormatFilterAttribute.CreateInstance(System.IServiceProvider serviceProvider) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Formatters.FormatFilter.FormatFilter(Microsoft.Extensions.Options.IOptions options, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.Formatters.FormatFilter.OnResourceExecuted(Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext context) -> void +~Microsoft.AspNetCore.Mvc.Formatters.FormatFilter.OnResourceExecuting(Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext context) -> void +~Microsoft.AspNetCore.Mvc.Formatters.FormatFilter.OnResultExecuted(Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext context) -> void +~Microsoft.AspNetCore.Mvc.Formatters.FormatFilter.OnResultExecuting(Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext context) -> void +~Microsoft.AspNetCore.Mvc.Formatters.FormatterMappings.ClearMediaTypeMappingForFormat(string format) -> bool +~Microsoft.AspNetCore.Mvc.Formatters.FormatterMappings.GetMediaTypeMappingForFormat(string format) -> string +~Microsoft.AspNetCore.Mvc.Formatters.FormatterMappings.SetMediaTypeMappingForFormat(string format, Microsoft.Net.Http.Headers.MediaTypeHeaderValue contentType) -> void +~Microsoft.AspNetCore.Mvc.Formatters.FormatterMappings.SetMediaTypeMappingForFormat(string format, string contentType) -> void +~Microsoft.AspNetCore.Mvc.Formatters.HttpNoContentOutputFormatter.CanWriteResult(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext context) -> bool +~Microsoft.AspNetCore.Mvc.Formatters.HttpNoContentOutputFormatter.WriteAsync(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.Formatters.InputFormatter.SupportedMediaTypes.get -> Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection +~Microsoft.AspNetCore.Mvc.Formatters.MediaType.Encoding.get -> System.Text.Encoding +~Microsoft.AspNetCore.Mvc.Formatters.MediaType.GetParameter(string parameterName) -> Microsoft.Extensions.Primitives.StringSegment +~Microsoft.AspNetCore.Mvc.Formatters.MediaType.MediaType(string mediaType) -> void +~Microsoft.AspNetCore.Mvc.Formatters.MediaType.MediaType(string mediaType, int offset, int? length) -> void +~Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection.Add(Microsoft.Net.Http.Headers.MediaTypeHeaderValue item) -> void +~Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection.Insert(int index, Microsoft.Net.Http.Headers.MediaTypeHeaderValue item) -> void +~Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection.Remove(Microsoft.Net.Http.Headers.MediaTypeHeaderValue item) -> bool +~Microsoft.AspNetCore.Mvc.Formatters.OutputFormatter.SupportedMediaTypes.get -> Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection +~Microsoft.AspNetCore.Mvc.Formatters.StreamOutputFormatter.CanWriteResult(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext context) -> bool +~Microsoft.AspNetCore.Mvc.Formatters.StreamOutputFormatter.WriteAsync(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.Formatters.SystemTextJsonInputFormatter.SerializerOptions.get -> System.Text.Json.JsonSerializerOptions +~Microsoft.AspNetCore.Mvc.Formatters.SystemTextJsonInputFormatter.SystemTextJsonInputFormatter(Microsoft.AspNetCore.Mvc.JsonOptions options, Microsoft.Extensions.Logging.ILogger logger) -> void +~Microsoft.AspNetCore.Mvc.Formatters.SystemTextJsonOutputFormatter.SerializerOptions.get -> System.Text.Json.JsonSerializerOptions +~Microsoft.AspNetCore.Mvc.Formatters.SystemTextJsonOutputFormatter.SystemTextJsonOutputFormatter(System.Text.Json.JsonSerializerOptions jsonSerializerOptions) -> void +~Microsoft.AspNetCore.Mvc.Formatters.TextInputFormatter.SelectCharacterEncoding(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext context) -> System.Text.Encoding +~Microsoft.AspNetCore.Mvc.Formatters.TextInputFormatter.SupportedEncodings.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Formatters.TextOutputFormatter.SupportedEncodings.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.FromBodyAttribute.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +~Microsoft.AspNetCore.Mvc.FromFormAttribute.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +~Microsoft.AspNetCore.Mvc.FromFormAttribute.Name.get -> string +~Microsoft.AspNetCore.Mvc.FromFormAttribute.Name.set -> void +~Microsoft.AspNetCore.Mvc.FromHeaderAttribute.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +~Microsoft.AspNetCore.Mvc.FromHeaderAttribute.Name.get -> string +~Microsoft.AspNetCore.Mvc.FromHeaderAttribute.Name.set -> void +~Microsoft.AspNetCore.Mvc.FromQueryAttribute.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +~Microsoft.AspNetCore.Mvc.FromQueryAttribute.Name.get -> string +~Microsoft.AspNetCore.Mvc.FromQueryAttribute.Name.set -> void +~Microsoft.AspNetCore.Mvc.FromRouteAttribute.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +~Microsoft.AspNetCore.Mvc.FromRouteAttribute.Name.get -> string +~Microsoft.AspNetCore.Mvc.FromRouteAttribute.Name.set -> void +~Microsoft.AspNetCore.Mvc.FromServicesAttribute.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +~Microsoft.AspNetCore.Mvc.HttpDeleteAttribute.HttpDeleteAttribute(string template) -> void +~Microsoft.AspNetCore.Mvc.HttpGetAttribute.HttpGetAttribute(string template) -> void +~Microsoft.AspNetCore.Mvc.HttpHeadAttribute.HttpHeadAttribute(string template) -> void +~Microsoft.AspNetCore.Mvc.HttpOptionsAttribute.HttpOptionsAttribute(string template) -> void +~Microsoft.AspNetCore.Mvc.HttpPatchAttribute.HttpPatchAttribute(string template) -> void +~Microsoft.AspNetCore.Mvc.HttpPostAttribute.HttpPostAttribute(string template) -> void +~Microsoft.AspNetCore.Mvc.HttpPutAttribute.HttpPutAttribute(string template) -> void +~Microsoft.AspNetCore.Mvc.IDesignTimeMvcBuilderConfiguration.ConfigureMvc(Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.ActionContextAccessor.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext +~Microsoft.AspNetCore.Mvc.Infrastructure.ActionContextAccessor.ActionContext.set -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.ActionDescriptorCollection.ActionDescriptorCollection(System.Collections.Generic.IReadOnlyList items, int version) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.ActionDescriptorCollection.Items.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.Infrastructure.AmbiguousActionException.AmbiguousActionException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.AmbiguousActionException.AmbiguousActionException(string message) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.CompatibilitySwitch.CompatibilitySwitch(string name) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.CompatibilitySwitch.CompatibilitySwitch(string name, TValue initialValue) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.CompatibilitySwitch.Name.get -> string +~Microsoft.AspNetCore.Mvc.Infrastructure.ConfigureCompatibilityOptions +~Microsoft.AspNetCore.Mvc.Infrastructure.ConfigureCompatibilityOptions.ConfigureCompatibilityOptions(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.Extensions.Options.IOptions compatibilityOptions) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.ContentResultExecutor.ContentResultExecutor(Microsoft.Extensions.Logging.ILogger logger, Microsoft.AspNetCore.Mvc.Infrastructure.IHttpResponseStreamWriterFactory httpResponseStreamWriterFactory) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.DefaultOutputFormatterSelector.DefaultOutputFormatterSelector(Microsoft.Extensions.Options.IOptions options, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.FileContentResultExecutor.FileContentResultExecutor(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.FileResultExecutorBase.FileResultExecutorBase(Microsoft.Extensions.Logging.ILogger logger) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.FileResultExecutorBase.Logger.get -> Microsoft.Extensions.Logging.ILogger +~Microsoft.AspNetCore.Mvc.Infrastructure.FileStreamResultExecutor.FileStreamResultExecutor(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.IActionContextAccessor.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext +~Microsoft.AspNetCore.Mvc.Infrastructure.IActionContextAccessor.ActionContext.set -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.IActionDescriptorChangeProvider.GetChangeToken() -> Microsoft.Extensions.Primitives.IChangeToken +~Microsoft.AspNetCore.Mvc.Infrastructure.IActionDescriptorCollectionProvider.ActionDescriptors.get -> Microsoft.AspNetCore.Mvc.Infrastructure.ActionDescriptorCollection +~Microsoft.AspNetCore.Mvc.Infrastructure.IActionInvokerFactory.CreateInvoker(Microsoft.AspNetCore.Mvc.ActionContext actionContext) -> Microsoft.AspNetCore.Mvc.Abstractions.IActionInvoker +~Microsoft.AspNetCore.Mvc.Infrastructure.IActionResultExecutor +~Microsoft.AspNetCore.Mvc.Infrastructure.IActionResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, TResult result) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.Infrastructure.IActionResultTypeMapper.Convert(object value, System.Type returnType) -> Microsoft.AspNetCore.Mvc.IActionResult +~Microsoft.AspNetCore.Mvc.Infrastructure.IActionResultTypeMapper.GetResultDataType(System.Type returnType) -> System.Type +~Microsoft.AspNetCore.Mvc.Infrastructure.IActionSelector.SelectBestCandidate(Microsoft.AspNetCore.Routing.RouteContext context, System.Collections.Generic.IReadOnlyList candidates) -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Infrastructure.IActionSelector.SelectCandidates(Microsoft.AspNetCore.Routing.RouteContext context) -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.Infrastructure.IClientErrorFactory.GetClientError(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.Infrastructure.IClientErrorActionResult clientError) -> Microsoft.AspNetCore.Mvc.IActionResult +~Microsoft.AspNetCore.Mvc.Infrastructure.ICompatibilitySwitch.Name.get -> string +~Microsoft.AspNetCore.Mvc.Infrastructure.ICompatibilitySwitch.Value.get -> object +~Microsoft.AspNetCore.Mvc.Infrastructure.ICompatibilitySwitch.Value.set -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.IConvertToActionResult.Convert() -> Microsoft.AspNetCore.Mvc.IActionResult +~Microsoft.AspNetCore.Mvc.Infrastructure.IHttpRequestStreamReaderFactory.CreateReader(System.IO.Stream stream, System.Text.Encoding encoding) -> System.IO.TextReader +~Microsoft.AspNetCore.Mvc.Infrastructure.IHttpResponseStreamWriterFactory.CreateWriter(System.IO.Stream stream, System.Text.Encoding encoding) -> System.IO.TextWriter +~Microsoft.AspNetCore.Mvc.Infrastructure.IParameterInfoParameterDescriptor.ParameterInfo.get -> System.Reflection.ParameterInfo +~Microsoft.AspNetCore.Mvc.Infrastructure.IPropertyInfoParameterDescriptor.PropertyInfo.get -> System.Reflection.PropertyInfo +~Microsoft.AspNetCore.Mvc.Infrastructure.LocalRedirectResultExecutor.LocalRedirectResultExecutor(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory urlHelperFactory) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.ModelStateInvalidFilter.ModelStateInvalidFilter(Microsoft.AspNetCore.Mvc.ApiBehaviorOptions apiBehaviorOptions, Microsoft.Extensions.Logging.ILogger logger) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.ModelStateInvalidFilter.OnActionExecuted(Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext context) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.ModelStateInvalidFilter.OnActionExecuting(Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext context) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor.FormatterSelector.get -> Microsoft.AspNetCore.Mvc.Infrastructure.OutputFormatterSelector +~Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor.Logger.get -> Microsoft.Extensions.Logging.ILogger +~Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor.ObjectResultExecutor(Microsoft.AspNetCore.Mvc.Infrastructure.OutputFormatterSelector formatterSelector, Microsoft.AspNetCore.Mvc.Infrastructure.IHttpResponseStreamWriterFactory writerFactory, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor.ObjectResultExecutor(Microsoft.AspNetCore.Mvc.Infrastructure.OutputFormatterSelector formatterSelector, Microsoft.AspNetCore.Mvc.Infrastructure.IHttpResponseStreamWriterFactory writerFactory, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.Extensions.Options.IOptions mvcOptions) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor.WriterFactory.get -> System.Func +~Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.PhysicalFileResultExecutor(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.RedirectResultExecutor.RedirectResultExecutor(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory urlHelperFactory) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.RedirectToActionResultExecutor.RedirectToActionResultExecutor(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory urlHelperFactory) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.RedirectToPageResultExecutor.RedirectToPageResultExecutor(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory urlHelperFactory) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.RedirectToRouteResultExecutor.RedirectToRouteResultExecutor(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory urlHelperFactory) -> void +~Microsoft.AspNetCore.Mvc.Infrastructure.VirtualFileResultExecutor.VirtualFileResultExecutor(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.AspNetCore.Hosting.IWebHostEnvironment hostingEnvironment) -> void +~Microsoft.AspNetCore.Mvc.JsonOptions.JsonSerializerOptions.get -> System.Text.Json.JsonSerializerOptions +~Microsoft.AspNetCore.Mvc.JsonResult.ContentType.get -> string +~Microsoft.AspNetCore.Mvc.JsonResult.ContentType.set -> void +~Microsoft.AspNetCore.Mvc.JsonResult.JsonResult(object value) -> void +~Microsoft.AspNetCore.Mvc.JsonResult.JsonResult(object value, object serializerSettings) -> void +~Microsoft.AspNetCore.Mvc.JsonResult.SerializerSettings.get -> object +~Microsoft.AspNetCore.Mvc.JsonResult.SerializerSettings.set -> void +~Microsoft.AspNetCore.Mvc.JsonResult.Value.get -> object +~Microsoft.AspNetCore.Mvc.JsonResult.Value.set -> void +~Microsoft.AspNetCore.Mvc.LocalRedirectResult.LocalRedirectResult(string localUrl) -> void +~Microsoft.AspNetCore.Mvc.LocalRedirectResult.LocalRedirectResult(string localUrl, bool permanent) -> void +~Microsoft.AspNetCore.Mvc.LocalRedirectResult.LocalRedirectResult(string localUrl, bool permanent, bool preserveMethod) -> void +~Microsoft.AspNetCore.Mvc.LocalRedirectResult.Url.get -> string +~Microsoft.AspNetCore.Mvc.LocalRedirectResult.Url.set -> void +~Microsoft.AspNetCore.Mvc.LocalRedirectResult.UrlHelper.get -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.LocalRedirectResult.UrlHelper.set -> void +~Microsoft.AspNetCore.Mvc.MiddlewareFilterAttribute.ConfigurationType.get -> System.Type +~Microsoft.AspNetCore.Mvc.MiddlewareFilterAttribute.CreateInstance(System.IServiceProvider serviceProvider) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.MiddlewareFilterAttribute.MiddlewareFilterAttribute(System.Type configurationType) -> void +~Microsoft.AspNetCore.Mvc.ModelBinderAttribute.BinderType.get -> System.Type +~Microsoft.AspNetCore.Mvc.ModelBinderAttribute.BinderType.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinderAttribute.ModelBinderAttribute(System.Type binderType) -> void +~Microsoft.AspNetCore.Mvc.ModelBinderAttribute.Name.get -> string +~Microsoft.AspNetCore.Mvc.ModelBinderAttribute.Name.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ArrayModelBinder.ArrayModelBinder(Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder elementBinder, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ArrayModelBinder.ArrayModelBinder(Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder elementBinder, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, bool allowValidatingTopLevelNodes) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ArrayModelBinder.ArrayModelBinder(Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder elementBinder, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, bool allowValidatingTopLevelNodes, Microsoft.AspNetCore.Mvc.MvcOptions mvcOptions) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ArrayModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BinderTypeModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BinderTypeModelBinder.BinderTypeModelBinder(System.Type binderType) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BinderTypeModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BodyModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BodyModelBinder.BodyModelBinder(System.Collections.Generic.IList formatters, Microsoft.AspNetCore.Mvc.Infrastructure.IHttpRequestStreamReaderFactory readerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BodyModelBinder.BodyModelBinder(System.Collections.Generic.IList formatters, Microsoft.AspNetCore.Mvc.Infrastructure.IHttpRequestStreamReaderFactory readerFactory, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BodyModelBinder.BodyModelBinder(System.Collections.Generic.IList formatters, Microsoft.AspNetCore.Mvc.Infrastructure.IHttpRequestStreamReaderFactory readerFactory, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.AspNetCore.Mvc.MvcOptions options) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BodyModelBinderProvider.BodyModelBinderProvider(System.Collections.Generic.IList formatters, Microsoft.AspNetCore.Mvc.Infrastructure.IHttpRequestStreamReaderFactory readerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BodyModelBinderProvider.BodyModelBinderProvider(System.Collections.Generic.IList formatters, Microsoft.AspNetCore.Mvc.Infrastructure.IHttpRequestStreamReaderFactory readerFactory, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BodyModelBinderProvider.BodyModelBinderProvider(System.Collections.Generic.IList formatters, Microsoft.AspNetCore.Mvc.Infrastructure.IHttpRequestStreamReaderFactory readerFactory, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.AspNetCore.Mvc.MvcOptions options) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BodyModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ByteArrayModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ByteArrayModelBinder.ByteArrayModelBinder(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ByteArrayModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CancellationTokenModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CancellationTokenModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder.AddErrorIfBindingRequired(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder.CollectionModelBinder(Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder elementBinder, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder.CollectionModelBinder(Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder elementBinder, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, bool allowValidatingTopLevelNodes) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder.CollectionModelBinder(Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder elementBinder, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, bool allowValidatingTopLevelNodes, Microsoft.AspNetCore.Mvc.MvcOptions mvcOptions) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder.CreateInstance(System.Type targetType) -> object +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder.ElementBinder.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder.Logger.get -> Microsoft.Extensions.Logging.ILogger +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexObjectModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexObjectModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder.ComplexTypeModelBinder(System.Collections.Generic.IDictionary propertyBinders, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder.ComplexTypeModelBinder(System.Collections.Generic.IDictionary propertyBinders, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, bool allowValidatingTopLevelNodes) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DecimalModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DecimalModelBinder.DecimalModelBinder(System.Globalization.NumberStyles supportedStyles, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DictionaryModelBinder.DictionaryModelBinder(Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder keyBinder, Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder valueBinder, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DictionaryModelBinder.DictionaryModelBinder(Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder keyBinder, Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder valueBinder, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, bool allowValidatingTopLevelNodes) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DictionaryModelBinder.DictionaryModelBinder(Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder keyBinder, Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder valueBinder, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, bool allowValidatingTopLevelNodes, Microsoft.AspNetCore.Mvc.MvcOptions mvcOptions) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DictionaryModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DoubleModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DoubleModelBinder.DoubleModelBinder(System.Globalization.NumberStyles supportedStyles, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.EnumTypeModelBinder.EnumTypeModelBinder(bool suppressBindingUndefinedValueToEnumType, System.Type modelType, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.EnumTypeModelBinderProvider.EnumTypeModelBinderProvider(Microsoft.AspNetCore.Mvc.MvcOptions options) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.EnumTypeModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FloatModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FloatModelBinder.FloatModelBinder(System.Globalization.NumberStyles supportedStyles, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FloatingPointTypeModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormCollectionModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormCollectionModelBinder.FormCollectionModelBinder(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormCollectionModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormFileModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormFileModelBinder.FormFileModelBinder(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormFileModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.HeaderModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.HeaderModelBinder.HeaderModelBinder(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.HeaderModelBinder.HeaderModelBinder(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder innerModelBinder) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.HeaderModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.KeyValuePairModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.KeyValuePairModelBinder.KeyValuePairModelBinder(Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder keyBinder, Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder valueBinder, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.KeyValuePairModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ServicesModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ServicesModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.SimpleTypeModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.SimpleTypeModelBinder.SimpleTypeModelBinder(System.Type type, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Binders.SimpleTypeModelBinderProvider.GetBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.BindingSourceValueProvider.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +~Microsoft.AspNetCore.Mvc.ModelBinding.BindingSourceValueProvider.BindingSourceValueProvider(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource bindingSource) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.CompositeValueProvider(System.Collections.Generic.IList valueProviders) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.Filter() -> Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider +~Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.Filter(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource bindingSource) -> Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider +~Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.OriginalValueProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider +~Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.OriginalValueProvider.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.DefaultPropertyFilterProvider +~Microsoft.AspNetCore.Mvc.ModelBinding.FormFileValueProvider.ContainsPrefix(string prefix) -> bool +~Microsoft.AspNetCore.Mvc.ModelBinding.FormFileValueProvider.FormFileValueProvider(Microsoft.AspNetCore.Http.IFormFileCollection files) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.FormFileValueProvider.GetValue(string key) -> Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult +~Microsoft.AspNetCore.Mvc.ModelBinding.FormFileValueProviderFactory.CreateValueProviderAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.FormValueProvider.Culture.get -> System.Globalization.CultureInfo +~Microsoft.AspNetCore.Mvc.ModelBinding.FormValueProvider.FormValueProvider(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource bindingSource, Microsoft.AspNetCore.Http.IFormCollection values, System.Globalization.CultureInfo culture) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.FormValueProvider.PrefixContainer.get -> Microsoft.AspNetCore.Mvc.ModelBinding.PrefixContainer +~Microsoft.AspNetCore.Mvc.ModelBinding.FormValueProviderFactory.CreateValueProviderAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.IBindingSourceValueProvider.Filter(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource bindingSource) -> Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider +~Microsoft.AspNetCore.Mvc.ModelBinding.ICollectionModelBinder.CanCreateInstance(System.Type targetType) -> bool +~Microsoft.AspNetCore.Mvc.ModelBinding.IEnumerableValueProvider.GetKeysFromPrefix(string prefix) -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ModelBinding.IKeyRewriterValueProvider.Filter() -> Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider +~Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinderFactory.CreateBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactoryContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.JQueryFormValueProvider.JQueryFormValueProvider(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource bindingSource, System.Collections.Generic.IDictionary values, System.Globalization.CultureInfo culture) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.JQueryFormValueProviderFactory.CreateValueProviderAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.JQueryQueryStringValueProvider.JQueryQueryStringValueProvider(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource bindingSource, System.Collections.Generic.IDictionary values, System.Globalization.CultureInfo culture) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.JQueryQueryStringValueProviderFactory.CreateValueProviderAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.JQueryValueProvider.Culture.get -> System.Globalization.CultureInfo +~Microsoft.AspNetCore.Mvc.ModelBinding.JQueryValueProvider.Filter() -> Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider +~Microsoft.AspNetCore.Mvc.ModelBinding.JQueryValueProvider.GetKeysFromPrefix(string prefix) -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ModelBinding.JQueryValueProvider.JQueryValueProvider(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource bindingSource, System.Collections.Generic.IDictionary values, System.Globalization.CultureInfo culture) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.JQueryValueProvider.PrefixContainer.get -> Microsoft.AspNetCore.Mvc.ModelBinding.PrefixContainer +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.BinderModelName.get -> string +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.BinderModelName.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.BinderType.get -> System.Type +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.BinderType.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.BindingSource.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.BoundConstructor.get -> System.Reflection.ConstructorInfo +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.BoundConstructor.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.ModelBindingMessageProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.ModelBindingMessageProvider.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.PropertyFilterProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IPropertyFilterProvider +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata.PropertyFilterProvider.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadataProviderContext.Attributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadataProviderContext.BindingMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadataProviderContext.BindingMetadataProviderContext(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity key, Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes attributes) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadataProviderContext.ParameterAttributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadataProviderContext.PropertyAttributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadataProviderContext.TypeAttributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingSourceMetadataProvider.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingSourceMetadataProvider.BindingSourceMetadataProvider(System.Type type, Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource bindingSource) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingSourceMetadataProvider.CreateBindingMetadata(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadataProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingSourceMetadataProvider.Type.get -> System.Type +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.BindingMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.BindingMetadata.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.BoundConstructorInvoker.get -> System.Func +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.BoundConstructorInvoker.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.BoundConstructorParameters.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata[] +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.BoundConstructorParameters.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.ContainerMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.ContainerMetadata.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.DefaultMetadataDetails(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity key, Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes attributes) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.DisplayMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.DisplayMetadata.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.ModelAttributes.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.Properties.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata[] +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.Properties.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.PropertyGetter.get -> System.Func +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.PropertyGetter.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.PropertySetter.get -> System.Action +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.PropertySetter.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.ValidationMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails.ValidationMetadata.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.DefaultModelBindingMessageProvider(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider originalProvider) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.SetAttemptedValueIsInvalidAccessor(System.Func attemptedValueIsInvalidAccessor) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.SetMissingBindRequiredValueAccessor(System.Func missingBindRequiredValueAccessor) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.SetMissingKeyOrValueAccessor(System.Func missingKeyOrValueAccessor) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.SetMissingRequestBodyRequiredValueAccessor(System.Func missingRequestBodyRequiredValueAccessor) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.SetNonPropertyAttemptedValueIsInvalidAccessor(System.Func nonPropertyAttemptedValueIsInvalidAccessor) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.SetNonPropertyUnknownValueIsInvalidAccessor(System.Func nonPropertyUnknownValueIsInvalidAccessor) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.SetNonPropertyValueMustBeANumberAccessor(System.Func nonPropertyValueMustBeANumberAccessor) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.SetUnknownValueIsInvalidAccessor(System.Func unknownValueIsInvalidAccessor) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.SetValueIsInvalidAccessor(System.Func valueIsInvalidAccessor) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.SetValueMustBeANumberAccessor(System.Func valueMustBeANumberAccessor) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.SetValueMustNotBeNullAccessor(System.Func valueMustNotBeNullAccessor) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.Attributes.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.BindingMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadata +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.DefaultModelMetadata(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider provider, Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ICompositeMetadataDetailsProvider detailsProvider, Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails details) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.DefaultModelMetadata(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider provider, Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ICompositeMetadataDetailsProvider detailsProvider, Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails details, Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider modelBindingMessageProvider) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.DisplayMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.ValidationMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.DefaultModelMetadataProvider(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ICompositeMetadataDetailsProvider detailsProvider) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.DefaultModelMetadataProvider(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ICompositeMetadataDetailsProvider detailsProvider, Microsoft.Extensions.Options.IOptions optionsAccessor) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.DetailsProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ICompositeMetadataDetailsProvider +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.ModelBindingMessageProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.AdditionalValues.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.DataTypeName.get -> string +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.DataTypeName.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.Description.get -> System.Func +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.Description.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.DisplayFormatString.get -> string +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.DisplayFormatString.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.DisplayFormatStringProvider.get -> System.Func +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.DisplayFormatStringProvider.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.DisplayName.get -> System.Func +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.DisplayName.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.EditFormatString.get -> string +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.EditFormatString.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.EditFormatStringProvider.get -> System.Func +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.EditFormatStringProvider.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.EnumGroupedDisplayNamesAndValues.get -> System.Collections.Generic.IEnumerable> +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.EnumGroupedDisplayNamesAndValues.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.EnumNamesAndValues.get -> System.Collections.Generic.IReadOnlyDictionary +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.EnumNamesAndValues.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.NullDisplayText.get -> string +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.NullDisplayText.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.NullDisplayTextProvider.get -> System.Func +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.NullDisplayTextProvider.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.Placeholder.get -> System.Func +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.Placeholder.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.SimpleDisplayProperty.get -> string +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.SimpleDisplayProperty.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.TemplateHint.get -> string +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata.TemplateHint.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadataProviderContext.Attributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadataProviderContext.DisplayMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadata +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadataProviderContext.DisplayMetadataProviderContext(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity key, Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes attributes) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadataProviderContext.PropertyAttributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadataProviderContext.TypeAttributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ExcludeBindingMetadataProvider.CreateBindingMetadata(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadataProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ExcludeBindingMetadataProvider.ExcludeBindingMetadataProvider(System.Type type) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.IBindingMetadataProvider.CreateBindingMetadata(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadataProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.IDisplayMetadataProvider.CreateDisplayMetadata(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DisplayMetadataProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.IValidationMetadataProvider.CreateValidationMetadata(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadataProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata.PropertyValidationFilter.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IPropertyValidationFilter +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata.PropertyValidationFilter.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata.ValidatorMetadata.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadataProviderContext.Attributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadataProviderContext.ParameterAttributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadataProviderContext.PropertyAttributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadataProviderContext.TypeAttributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadataProviderContext.ValidationMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadata +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadataProviderContext.ValidationMetadataProviderContext(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity key, Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes attributes) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes.Attributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes.ParameterAttributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes.PropertyAttributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes.TypeAttributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactory.CreateBinder(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactoryContext context) -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder +~Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactory.ModelBinderFactory(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.Extensions.Options.IOptions options, System.IServiceProvider serviceProvider) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactoryContext.BindingInfo.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo +~Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactoryContext.BindingInfo.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactoryContext.CacheToken.get -> object +~Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactoryContext.CacheToken.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactoryContext.Metadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactoryContext.Metadata.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.ObjectModelValidator.ObjectModelValidator(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider modelMetadataProvider, System.Collections.Generic.IList validatorProviders) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder.Logger.get -> Microsoft.Extensions.Logging.ILogger +~Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder.ParameterBinder(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider modelMetadataProvider, Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinderFactory modelBinderFactory, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IObjectModelValidator validator, Microsoft.Extensions.Options.IOptions mvcOptions, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.PrefixContainer.ContainsPrefix(string prefix) -> bool +~Microsoft.AspNetCore.Mvc.ModelBinding.PrefixContainer.GetKeysFromPrefix(string prefix) -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ModelBinding.PrefixContainer.PrefixContainer(System.Collections.Generic.ICollection values) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.QueryStringValueProvider.Culture.get -> System.Globalization.CultureInfo +~Microsoft.AspNetCore.Mvc.ModelBinding.QueryStringValueProvider.PrefixContainer.get -> Microsoft.AspNetCore.Mvc.ModelBinding.PrefixContainer +~Microsoft.AspNetCore.Mvc.ModelBinding.QueryStringValueProvider.QueryStringValueProvider(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource bindingSource, Microsoft.AspNetCore.Http.IQueryCollection values, System.Globalization.CultureInfo culture) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.QueryStringValueProviderFactory.CreateValueProviderAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.RouteValueProvider.Culture.get -> System.Globalization.CultureInfo +~Microsoft.AspNetCore.Mvc.ModelBinding.RouteValueProvider.PrefixContainer.get -> Microsoft.AspNetCore.Mvc.ModelBinding.PrefixContainer +~Microsoft.AspNetCore.Mvc.ModelBinding.RouteValueProvider.RouteValueProvider(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource bindingSource, Microsoft.AspNetCore.Routing.RouteValueDictionary values) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.RouteValueProvider.RouteValueProvider(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource bindingSource, Microsoft.AspNetCore.Routing.RouteValueDictionary values, System.Globalization.CultureInfo culture) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.RouteValueProviderFactory.CreateValueProviderAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ModelBinding.SuppressChildValidationMetadataProvider.CreateValidationMetadata(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ValidationMetadataProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.SuppressChildValidationMetadataProvider.FullTypeName.get -> string +~Microsoft.AspNetCore.Mvc.ModelBinding.SuppressChildValidationMetadataProvider.SuppressChildValidationMetadataProvider(System.Type type) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.SuppressChildValidationMetadataProvider.SuppressChildValidationMetadataProvider(string fullTypeName) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.SuppressChildValidationMetadataProvider.Type.get -> System.Type +~Microsoft.AspNetCore.Mvc.ModelBinding.UnsupportedContentTypeException.UnsupportedContentTypeException(string message) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.UnsupportedContentTypeFilter.OnActionExecuted(Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext context) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.UnsupportedContentTypeFilter.OnActionExecuting(Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext context) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorCache.GetValidators(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IClientModelValidatorProvider validatorProvider) -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.CompositeClientModelValidatorProvider.CompositeClientModelValidatorProvider(System.Collections.Generic.IEnumerable providers) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.CompositeClientModelValidatorProvider.CreateValidators(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.CompositeClientModelValidatorProvider.ValidatorProviders.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.CompositeModelValidatorProvider.CompositeModelValidatorProvider(System.Collections.Generic.IList providers) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.CompositeModelValidatorProvider.CreateValidators(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidatorProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.CompositeModelValidatorProvider.ValidatorProviders.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IMetadataBasedModelValidatorProvider.HasValidators(System.Type modelType, System.Collections.Generic.IList validatorMetadata) -> bool +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IObjectModelValidator.Validate(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary validationState, string prefix, object model) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Cache.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorCache +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Container.get -> object +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Container.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Context.get -> Microsoft.AspNetCore.Mvc.ActionContext +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Key.get -> string +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Key.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Metadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Metadata.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.MetadataProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Model.get -> object +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Model.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.ModelState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.StateManager.StateManager(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor visitor, object newModel) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Strategy.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IValidationStrategy +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Strategy.set -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Validate(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, string key, object model) -> bool +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.ValidationState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.ValidationVisitor(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IModelValidatorProvider validatorProvider, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorCache validatorCache, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary validationState) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.ValidatorProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IModelValidatorProvider +~Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorCache.GetValidators(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IModelValidatorProvider validatorProvider) -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ModelMetadataTypeAttribute.MetadataType.get -> System.Type +~Microsoft.AspNetCore.Mvc.ModelMetadataTypeAttribute.ModelMetadataTypeAttribute(System.Type type) -> void +~Microsoft.AspNetCore.Mvc.MvcOptions.CacheProfiles.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.MvcOptions.Conventions.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.MvcOptions.Filters.get -> Microsoft.AspNetCore.Mvc.Filters.FilterCollection +~Microsoft.AspNetCore.Mvc.MvcOptions.FormatterMappings.get -> Microsoft.AspNetCore.Mvc.Formatters.FormatterMappings +~Microsoft.AspNetCore.Mvc.MvcOptions.InputFormatters.get -> Microsoft.AspNetCore.Mvc.Formatters.FormatterCollection +~Microsoft.AspNetCore.Mvc.MvcOptions.ModelBinderProviders.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.MvcOptions.ModelBindingMessageProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider +~Microsoft.AspNetCore.Mvc.MvcOptions.ModelMetadataDetailsProviders.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.MvcOptions.ModelValidatorProviders.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.MvcOptions.OutputFormatters.get -> Microsoft.AspNetCore.Mvc.Formatters.FormatterCollection +~Microsoft.AspNetCore.Mvc.MvcOptions.ValueProviderFactories.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.NotFoundObjectResult.NotFoundObjectResult(object value) -> void +~Microsoft.AspNetCore.Mvc.ObjectResult.ContentTypes.get -> Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection +~Microsoft.AspNetCore.Mvc.ObjectResult.ContentTypes.set -> void +~Microsoft.AspNetCore.Mvc.ObjectResult.DeclaredType.get -> System.Type +~Microsoft.AspNetCore.Mvc.ObjectResult.DeclaredType.set -> void +~Microsoft.AspNetCore.Mvc.ObjectResult.Formatters.get -> Microsoft.AspNetCore.Mvc.Formatters.FormatterCollection +~Microsoft.AspNetCore.Mvc.ObjectResult.Formatters.set -> void +~Microsoft.AspNetCore.Mvc.ObjectResult.ObjectResult(object value) -> void +~Microsoft.AspNetCore.Mvc.ObjectResult.Value.get -> object +~Microsoft.AspNetCore.Mvc.ObjectResult.Value.set -> void +~Microsoft.AspNetCore.Mvc.OkObjectResult.OkObjectResult(object value) -> void +~Microsoft.AspNetCore.Mvc.PhysicalFileResult.FileName.get -> string +~Microsoft.AspNetCore.Mvc.PhysicalFileResult.FileName.set -> void +~Microsoft.AspNetCore.Mvc.PhysicalFileResult.PhysicalFileResult(string fileName, Microsoft.Net.Http.Headers.MediaTypeHeaderValue contentType) -> void +~Microsoft.AspNetCore.Mvc.PhysicalFileResult.PhysicalFileResult(string fileName, string contentType) -> void +~Microsoft.AspNetCore.Mvc.ProblemDetails.Detail.get -> string +~Microsoft.AspNetCore.Mvc.ProblemDetails.Detail.set -> void +~Microsoft.AspNetCore.Mvc.ProblemDetails.Extensions.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ProblemDetails.Instance.get -> string +~Microsoft.AspNetCore.Mvc.ProblemDetails.Instance.set -> void +~Microsoft.AspNetCore.Mvc.ProblemDetails.Title.get -> string +~Microsoft.AspNetCore.Mvc.ProblemDetails.Title.set -> void +~Microsoft.AspNetCore.Mvc.ProblemDetails.Type.get -> string +~Microsoft.AspNetCore.Mvc.ProblemDetails.Type.set -> void +~Microsoft.AspNetCore.Mvc.ProducesAttribute.ContentTypes.get -> Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection +~Microsoft.AspNetCore.Mvc.ProducesAttribute.ContentTypes.set -> void +~Microsoft.AspNetCore.Mvc.ProducesAttribute.ProducesAttribute(System.Type type) -> void +~Microsoft.AspNetCore.Mvc.ProducesAttribute.ProducesAttribute(string contentType, params string[] additionalContentTypes) -> void +~Microsoft.AspNetCore.Mvc.ProducesAttribute.SetContentTypes(Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection contentTypes) -> void +~Microsoft.AspNetCore.Mvc.ProducesAttribute.Type.get -> System.Type +~Microsoft.AspNetCore.Mvc.ProducesAttribute.Type.set -> void +~Microsoft.AspNetCore.Mvc.ProducesDefaultResponseTypeAttribute.ProducesDefaultResponseTypeAttribute(System.Type type) -> void +~Microsoft.AspNetCore.Mvc.ProducesDefaultResponseTypeAttribute.Type.get -> System.Type +~Microsoft.AspNetCore.Mvc.ProducesErrorResponseTypeAttribute.ProducesErrorResponseTypeAttribute(System.Type type) -> void +~Microsoft.AspNetCore.Mvc.ProducesErrorResponseTypeAttribute.Type.get -> System.Type +~Microsoft.AspNetCore.Mvc.ProducesResponseTypeAttribute.ProducesResponseTypeAttribute(System.Type type, int statusCode) -> void +~Microsoft.AspNetCore.Mvc.ProducesResponseTypeAttribute.Type.get -> System.Type +~Microsoft.AspNetCore.Mvc.ProducesResponseTypeAttribute.Type.set -> void +~Microsoft.AspNetCore.Mvc.RedirectResult.RedirectResult(string url) -> void +~Microsoft.AspNetCore.Mvc.RedirectResult.RedirectResult(string url, bool permanent) -> void +~Microsoft.AspNetCore.Mvc.RedirectResult.RedirectResult(string url, bool permanent, bool preserveMethod) -> void +~Microsoft.AspNetCore.Mvc.RedirectResult.Url.get -> string +~Microsoft.AspNetCore.Mvc.RedirectResult.Url.set -> void +~Microsoft.AspNetCore.Mvc.RedirectResult.UrlHelper.get -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.RedirectResult.UrlHelper.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.ActionName.get -> string +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.ActionName.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.ControllerName.get -> string +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.ControllerName.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.Fragment.get -> string +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.Fragment.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.RedirectToActionResult(string actionName, string controllerName, object routeValues) -> void +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.RedirectToActionResult(string actionName, string controllerName, object routeValues, bool permanent) -> void +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.RedirectToActionResult(string actionName, string controllerName, object routeValues, bool permanent, bool preserveMethod) -> void +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.RedirectToActionResult(string actionName, string controllerName, object routeValues, bool permanent, bool preserveMethod, string fragment) -> void +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.RedirectToActionResult(string actionName, string controllerName, object routeValues, bool permanent, string fragment) -> void +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.RedirectToActionResult(string actionName, string controllerName, object routeValues, string fragment) -> void +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.RouteValues.get -> Microsoft.AspNetCore.Routing.RouteValueDictionary +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.RouteValues.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.UrlHelper.get -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.RedirectToActionResult.UrlHelper.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.Fragment.get -> string +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.Fragment.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.Host.get -> string +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.Host.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.PageHandler.get -> string +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.PageHandler.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.PageName.get -> string +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.PageName.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.Protocol.get -> string +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.Protocol.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.RedirectToPageResult(string pageName) -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.RedirectToPageResult(string pageName, object routeValues) -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.RedirectToPageResult(string pageName, string pageHandler) -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.RedirectToPageResult(string pageName, string pageHandler, object routeValues) -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.RedirectToPageResult(string pageName, string pageHandler, object routeValues, bool permanent) -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.RedirectToPageResult(string pageName, string pageHandler, object routeValues, bool permanent, bool preserveMethod) -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.RedirectToPageResult(string pageName, string pageHandler, object routeValues, bool permanent, bool preserveMethod, string fragment) -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.RedirectToPageResult(string pageName, string pageHandler, object routeValues, bool permanent, string fragment) -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.RedirectToPageResult(string pageName, string pageHandler, object routeValues, string fragment) -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.RouteValues.get -> Microsoft.AspNetCore.Routing.RouteValueDictionary +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.RouteValues.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.UrlHelper.get -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.RedirectToPageResult.UrlHelper.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.Fragment.get -> string +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.Fragment.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.RedirectToRouteResult(object routeValues) -> void +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.RedirectToRouteResult(string routeName, object routeValues) -> void +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.RedirectToRouteResult(string routeName, object routeValues, bool permanent) -> void +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.RedirectToRouteResult(string routeName, object routeValues, bool permanent, bool preserveMethod) -> void +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.RedirectToRouteResult(string routeName, object routeValues, bool permanent, bool preserveMethod, string fragment) -> void +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.RedirectToRouteResult(string routeName, object routeValues, bool permanent, string fragment) -> void +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.RedirectToRouteResult(string routeName, object routeValues, string fragment) -> void +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.RouteName.get -> string +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.RouteName.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.RouteValues.get -> Microsoft.AspNetCore.Routing.RouteValueDictionary +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.RouteValues.set -> void +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.UrlHelper.get -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.RedirectToRouteResult.UrlHelper.set -> void +~Microsoft.AspNetCore.Mvc.RequestFormLimitsAttribute.CreateInstance(System.IServiceProvider serviceProvider) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.RequestSizeLimitAttribute.CreateInstance(System.IServiceProvider serviceProvider) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.CacheProfileName.get -> string +~Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.CacheProfileName.set -> void +~Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.CreateInstance(System.IServiceProvider serviceProvider) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.GetCacheProfile(Microsoft.AspNetCore.Mvc.MvcOptions options) -> Microsoft.AspNetCore.Mvc.CacheProfile +~Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.VaryByHeader.get -> string +~Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.VaryByHeader.set -> void +~Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.VaryByQueryKeys.get -> string[] +~Microsoft.AspNetCore.Mvc.ResponseCacheAttribute.VaryByQueryKeys.set -> void +~Microsoft.AspNetCore.Mvc.RouteAttribute.Name.get -> string +~Microsoft.AspNetCore.Mvc.RouteAttribute.Name.set -> void +~Microsoft.AspNetCore.Mvc.RouteAttribute.RouteAttribute(string template) -> void +~Microsoft.AspNetCore.Mvc.RouteAttribute.Template.get -> string +~Microsoft.AspNetCore.Mvc.Routing.DynamicRouteValueTransformer.State.get -> object +~Microsoft.AspNetCore.Mvc.Routing.DynamicRouteValueTransformer.State.set -> void +~Microsoft.AspNetCore.Mvc.Routing.HttpMethodAttribute.HttpMethodAttribute(System.Collections.Generic.IEnumerable httpMethods) -> void +~Microsoft.AspNetCore.Mvc.Routing.HttpMethodAttribute.HttpMethodAttribute(System.Collections.Generic.IEnumerable httpMethods, string template) -> void +~Microsoft.AspNetCore.Mvc.Routing.HttpMethodAttribute.HttpMethods.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.Routing.HttpMethodAttribute.Name.get -> string +~Microsoft.AspNetCore.Mvc.Routing.HttpMethodAttribute.Name.set -> void +~Microsoft.AspNetCore.Mvc.Routing.HttpMethodAttribute.Template.get -> string +~Microsoft.AspNetCore.Mvc.Routing.IActionHttpMethodProvider.HttpMethods.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.Routing.IRouteTemplateProvider.Name.get -> string +~Microsoft.AspNetCore.Mvc.Routing.IRouteTemplateProvider.Template.get -> string +~Microsoft.AspNetCore.Mvc.Routing.IRouteValueProvider.RouteKey.get -> string +~Microsoft.AspNetCore.Mvc.Routing.IRouteValueProvider.RouteValue.get -> string +~Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory.GetUrlHelper(Microsoft.AspNetCore.Mvc.ActionContext context) -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.Routing.KnownRouteValueConstraint.KnownRouteValueConstraint(Microsoft.AspNetCore.Mvc.Infrastructure.IActionDescriptorCollectionProvider actionDescriptorCollectionProvider) -> void +~Microsoft.AspNetCore.Mvc.Routing.KnownRouteValueConstraint.Match(Microsoft.AspNetCore.Http.HttpContext httpContext, Microsoft.AspNetCore.Routing.IRouter route, string routeKey, Microsoft.AspNetCore.Routing.RouteValueDictionary values, Microsoft.AspNetCore.Routing.RouteDirection routeDirection) -> bool +~Microsoft.AspNetCore.Mvc.Routing.RouteValueAttribute.RouteKey.get -> string +~Microsoft.AspNetCore.Mvc.Routing.RouteValueAttribute.RouteValue.get -> string +~Microsoft.AspNetCore.Mvc.Routing.RouteValueAttribute.RouteValueAttribute(string routeKey, string routeValue) -> void +~Microsoft.AspNetCore.Mvc.Routing.UrlHelper.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext +~Microsoft.AspNetCore.Mvc.Routing.UrlHelper.Router.get -> Microsoft.AspNetCore.Routing.IRouter +~Microsoft.AspNetCore.Mvc.Routing.UrlHelper.UrlHelper(Microsoft.AspNetCore.Mvc.ActionContext actionContext) -> void +~Microsoft.AspNetCore.Mvc.Routing.UrlHelperBase.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext +~Microsoft.AspNetCore.Mvc.Routing.UrlHelperBase.AmbientValues.get -> Microsoft.AspNetCore.Routing.RouteValueDictionary +~Microsoft.AspNetCore.Mvc.Routing.UrlHelperBase.GenerateUrl(string protocol, string host, string path) -> string +~Microsoft.AspNetCore.Mvc.Routing.UrlHelperBase.GenerateUrl(string protocol, string host, string virtualPath, string fragment) -> string +~Microsoft.AspNetCore.Mvc.Routing.UrlHelperBase.GetValuesDictionary(object values) -> Microsoft.AspNetCore.Routing.RouteValueDictionary +~Microsoft.AspNetCore.Mvc.Routing.UrlHelperBase.UrlHelperBase(Microsoft.AspNetCore.Mvc.ActionContext actionContext) -> void +~Microsoft.AspNetCore.Mvc.Routing.UrlHelperFactory.GetUrlHelper(Microsoft.AspNetCore.Mvc.ActionContext context) -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.SerializableError.SerializableError(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) -> void +~Microsoft.AspNetCore.Mvc.ServiceFilterAttribute.CreateInstance(System.IServiceProvider serviceProvider) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.ServiceFilterAttribute.ServiceFilterAttribute(System.Type type) -> void +~Microsoft.AspNetCore.Mvc.ServiceFilterAttribute.ServiceType.get -> System.Type +~Microsoft.AspNetCore.Mvc.SignInResult.AuthenticationScheme.get -> string +~Microsoft.AspNetCore.Mvc.SignInResult.AuthenticationScheme.set -> void +~Microsoft.AspNetCore.Mvc.SignInResult.Principal.get -> System.Security.Claims.ClaimsPrincipal +~Microsoft.AspNetCore.Mvc.SignInResult.Principal.set -> void +~Microsoft.AspNetCore.Mvc.SignInResult.Properties.get -> Microsoft.AspNetCore.Authentication.AuthenticationProperties +~Microsoft.AspNetCore.Mvc.SignInResult.Properties.set -> void +~Microsoft.AspNetCore.Mvc.SignInResult.SignInResult(System.Security.Claims.ClaimsPrincipal principal) -> void +~Microsoft.AspNetCore.Mvc.SignInResult.SignInResult(System.Security.Claims.ClaimsPrincipal principal, Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> void +~Microsoft.AspNetCore.Mvc.SignInResult.SignInResult(string authenticationScheme, System.Security.Claims.ClaimsPrincipal principal) -> void +~Microsoft.AspNetCore.Mvc.SignInResult.SignInResult(string authenticationScheme, System.Security.Claims.ClaimsPrincipal principal, Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> void +~Microsoft.AspNetCore.Mvc.SignOutResult.AuthenticationSchemes.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.SignOutResult.AuthenticationSchemes.set -> void +~Microsoft.AspNetCore.Mvc.SignOutResult.Properties.get -> Microsoft.AspNetCore.Authentication.AuthenticationProperties +~Microsoft.AspNetCore.Mvc.SignOutResult.Properties.set -> void +~Microsoft.AspNetCore.Mvc.SignOutResult.SignOutResult(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> void +~Microsoft.AspNetCore.Mvc.SignOutResult.SignOutResult(System.Collections.Generic.IList authenticationSchemes) -> void +~Microsoft.AspNetCore.Mvc.SignOutResult.SignOutResult(System.Collections.Generic.IList authenticationSchemes, Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> void +~Microsoft.AspNetCore.Mvc.SignOutResult.SignOutResult(string authenticationScheme) -> void +~Microsoft.AspNetCore.Mvc.SignOutResult.SignOutResult(string authenticationScheme, Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> void +~Microsoft.AspNetCore.Mvc.TypeFilterAttribute.Arguments.get -> object[] +~Microsoft.AspNetCore.Mvc.TypeFilterAttribute.Arguments.set -> void +~Microsoft.AspNetCore.Mvc.TypeFilterAttribute.CreateInstance(System.IServiceProvider serviceProvider) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.TypeFilterAttribute.ImplementationType.get -> System.Type +~Microsoft.AspNetCore.Mvc.TypeFilterAttribute.TypeFilterAttribute(System.Type type) -> void +~Microsoft.AspNetCore.Mvc.UnauthorizedObjectResult.UnauthorizedObjectResult(object value) -> void +~Microsoft.AspNetCore.Mvc.UnprocessableEntityObjectResult.UnprocessableEntityObjectResult(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) -> void +~Microsoft.AspNetCore.Mvc.UnprocessableEntityObjectResult.UnprocessableEntityObjectResult(object error) -> void +~Microsoft.AspNetCore.Mvc.ValidationProblemDetails.Errors.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ValidationProblemDetails.ValidationProblemDetails(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) -> void +~Microsoft.AspNetCore.Mvc.ValidationProblemDetails.ValidationProblemDetails(System.Collections.Generic.IDictionary errors) -> void +~Microsoft.AspNetCore.Mvc.VirtualFileResult.FileName.get -> string +~Microsoft.AspNetCore.Mvc.VirtualFileResult.FileName.set -> void +~Microsoft.AspNetCore.Mvc.VirtualFileResult.FileProvider.get -> Microsoft.Extensions.FileProviders.IFileProvider +~Microsoft.AspNetCore.Mvc.VirtualFileResult.FileProvider.set -> void +~Microsoft.AspNetCore.Mvc.VirtualFileResult.VirtualFileResult(string fileName, Microsoft.Net.Http.Headers.MediaTypeHeaderValue contentType) -> void +~Microsoft.AspNetCore.Mvc.VirtualFileResult.VirtualFileResult(string fileName, string contentType) -> void +~Microsoft.Extensions.DependencyInjection.IMvcBuilder.PartManager.get -> Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartManager +~Microsoft.Extensions.DependencyInjection.IMvcBuilder.Services.get -> Microsoft.Extensions.DependencyInjection.IServiceCollection +~Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder.PartManager.get -> Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartManager +~Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder.Services.get -> Microsoft.Extensions.DependencyInjection.IServiceCollection +~abstract Microsoft.AspNetCore.Mvc.ActionConstraints.ActionMethodSelectorAttribute.IsValidForRequest(Microsoft.AspNetCore.Routing.RouteContext routeContext, Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor action) -> bool +~abstract Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPart.Name.get -> string +~abstract Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartFactory.GetApplicationParts(System.Reflection.Assembly assembly) -> System.Collections.Generic.IEnumerable +~abstract Microsoft.AspNetCore.Mvc.Diagnostics.EventData.this[int index].get -> System.Collections.Generic.KeyValuePair +~abstract Microsoft.AspNetCore.Mvc.Formatters.InputFormatter.ReadRequestBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext context) -> System.Threading.Tasks.Task +~abstract Microsoft.AspNetCore.Mvc.Formatters.OutputFormatter.WriteResponseBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context) -> System.Threading.Tasks.Task +~abstract Microsoft.AspNetCore.Mvc.Formatters.TextInputFormatter.ReadRequestBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext context, System.Text.Encoding encoding) -> System.Threading.Tasks.Task +~abstract Microsoft.AspNetCore.Mvc.Formatters.TextOutputFormatter.WriteResponseBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context, System.Text.Encoding selectedEncoding) -> System.Threading.Tasks.Task +~abstract Microsoft.AspNetCore.Mvc.Infrastructure.ActionDescriptorCollectionProvider.ActionDescriptors.get -> Microsoft.AspNetCore.Mvc.Infrastructure.ActionDescriptorCollection +~abstract Microsoft.AspNetCore.Mvc.Infrastructure.ActionDescriptorCollectionProvider.GetChangeToken() -> Microsoft.Extensions.Primitives.IChangeToken +~abstract Microsoft.AspNetCore.Mvc.Infrastructure.ConfigureCompatibilityOptions.DefaultValues.get -> System.Collections.Generic.IReadOnlyDictionary +~abstract Microsoft.AspNetCore.Mvc.Infrastructure.OutputFormatterSelector.SelectFormatter(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext context, System.Collections.Generic.IList formatters, Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection mediaTypes) -> Microsoft.AspNetCore.Mvc.Formatters.IOutputFormatter +~abstract Microsoft.AspNetCore.Mvc.Infrastructure.ProblemDetailsFactory.CreateProblemDetails(Microsoft.AspNetCore.Http.HttpContext httpContext, int? statusCode = null, string title = null, string type = null, string detail = null, string instance = null) -> Microsoft.AspNetCore.Mvc.ProblemDetails +~abstract Microsoft.AspNetCore.Mvc.Infrastructure.ProblemDetailsFactory.CreateValidationProblemDetails(Microsoft.AspNetCore.Http.HttpContext httpContext, Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelStateDictionary, int? statusCode = null, string title = null, string type = null, string detail = null, string instance = null) -> Microsoft.AspNetCore.Mvc.ValidationProblemDetails +~abstract Microsoft.AspNetCore.Mvc.ModelBinding.BindingSourceValueProvider.ContainsPrefix(string prefix) -> bool +~abstract Microsoft.AspNetCore.Mvc.ModelBinding.BindingSourceValueProvider.GetValue(string key) -> Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult +~abstract Microsoft.AspNetCore.Mvc.ModelBinding.ObjectModelValidator.GetValidationVisitor(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IModelValidatorProvider validatorProvider, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidatorCache validatorCache, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary validationState) -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor +~abstract Microsoft.AspNetCore.Mvc.Routing.DynamicRouteValueTransformer.TransformAsync(Microsoft.AspNetCore.Http.HttpContext httpContext, Microsoft.AspNetCore.Routing.RouteValueDictionary values) -> System.Threading.Tasks.ValueTask +~abstract Microsoft.AspNetCore.Mvc.Routing.UrlHelperBase.Action(Microsoft.AspNetCore.Mvc.Routing.UrlActionContext actionContext) -> string +~abstract Microsoft.AspNetCore.Mvc.Routing.UrlHelperBase.RouteUrl(Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext routeContext) -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterAction" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutedEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnActionExecuted" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutingEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnActionExecuting" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionFilterOnActionExecutionEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnActionExecution" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterActionResultEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterActionResult" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterAuthorizationFilterOnAuthorizationEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnAuthorization" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterControllerActionMethodEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterControllerActionMethod" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterExceptionFilterOnExceptionEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnException" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutedEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnResourceExecuted" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutingEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnResourceExecuting" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterResourceFilterOnResourceExecutionEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnResourceExecution" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutedEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnResultExecuted" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutingEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnResultExecuting" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterResultFilterOnResultExecutionEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnResultExecution" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeAction" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutedEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnActionExecuted" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutingEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnActionExecuting" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionFilterOnActionExecutionEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnActionExecution" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeActionResultEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeActionResult" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeAuthorizationFilterOnAuthorizationEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnAuthorization" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeControllerActionMethodEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeControllerActionMethod" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeExceptionFilterOnException.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnException" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutedEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnResourceExecuted" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutingEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnResourceExecuting" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResourceFilterOnResourceExecutionEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnResourceExecution" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutedEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnResultExecuted" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutingEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnResultExecuting" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeResultFilterOnResultExecutionEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnResultExecution" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.EventData.EventNamespace = "Microsoft.AspNetCore.Mvc." -> string +~override Microsoft.AspNetCore.Mvc.AcceptedAtActionResult.OnFormatting(Microsoft.AspNetCore.Mvc.ActionContext context) -> void +~override Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult.OnFormatting(Microsoft.AspNetCore.Mvc.ActionContext context) -> void +~override Microsoft.AspNetCore.Mvc.AcceptedResult.OnFormatting(Microsoft.AspNetCore.Mvc.ActionContext context) -> void +~override Microsoft.AspNetCore.Mvc.ApplicationParts.AssemblyPart.Name.get -> string +~override Microsoft.AspNetCore.Mvc.ApplicationParts.DefaultApplicationPartFactory.GetApplicationParts(System.Reflection.Assembly assembly) -> System.Collections.Generic.IEnumerable +~override Microsoft.AspNetCore.Mvc.ApplicationParts.NullApplicationPartFactory.GetApplicationParts(System.Reflection.Assembly assembly) -> System.Collections.Generic.IEnumerable +~override Microsoft.AspNetCore.Mvc.ChallengeResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.ContentResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor.DisplayName.get -> string +~override Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor.DisplayName.set -> void +~override Microsoft.AspNetCore.Mvc.CreatedAtActionResult.OnFormatting(Microsoft.AspNetCore.Mvc.ActionContext context) -> void +~override Microsoft.AspNetCore.Mvc.CreatedAtRouteResult.OnFormatting(Microsoft.AspNetCore.Mvc.ActionContext context) -> void +~override Microsoft.AspNetCore.Mvc.CreatedResult.OnFormatting(Microsoft.AspNetCore.Mvc.ActionContext context) -> void +~override Microsoft.AspNetCore.Mvc.EmptyResult.ExecuteResult(Microsoft.AspNetCore.Mvc.ActionContext context) -> void +~override Microsoft.AspNetCore.Mvc.FileContentResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.FileStreamResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.ForbidResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.Formatters.MediaTypeSegmentWithQuality.ToString() -> string +~override Microsoft.AspNetCore.Mvc.Formatters.StringOutputFormatter.CanWriteResult(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext context) -> bool +~override Microsoft.AspNetCore.Mvc.Formatters.StringOutputFormatter.WriteResponseBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context, System.Text.Encoding encoding) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.Formatters.TextInputFormatter.ReadRequestBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.Formatters.TextOutputFormatter.WriteAsync(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.Infrastructure.DefaultOutputFormatterSelector.SelectFormatter(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext context, System.Collections.Generic.IList formatters, Microsoft.AspNetCore.Mvc.Formatters.MediaTypeCollection contentTypes) -> Microsoft.AspNetCore.Mvc.Formatters.IOutputFormatter +~override Microsoft.AspNetCore.Mvc.JsonResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.LocalRedirectResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ArrayModelBinder.CanCreateInstance(System.Type targetType) -> bool +~override Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ArrayModelBinder.ConvertToCollectionType(System.Type targetType, System.Collections.Generic.IEnumerable collection) -> object +~override Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ArrayModelBinder.CopyToModel(object target, System.Collections.Generic.IEnumerable sourceCollection) -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ArrayModelBinder.CreateEmptyCollection(System.Type targetType) -> object +~override Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DictionaryModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DictionaryModelBinder.CanCreateInstance(System.Type targetType) -> bool +~override Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DictionaryModelBinder.ConvertToCollectionType(System.Type targetType, System.Collections.Generic.IEnumerable> collection) -> object +~override Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DictionaryModelBinder.CreateEmptyCollection(System.Type targetType) -> object +~override Microsoft.AspNetCore.Mvc.ModelBinding.Binders.EnumTypeModelBinder.CheckModel(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext, Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult valueProviderResult, object model) -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.InsertItem(int index, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider item) -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.SetItem(int index, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider item) -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.ActionContext.set -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.BinderModelName.get -> string +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.BinderModelName.set -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.BindingSource.set -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.EnterNestedScope(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata modelMetadata, string fieldName, string modelName, object model) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext.NestedScope +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.FieldName.get -> string +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.FieldName.set -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.Model.get -> object +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.Model.set -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.ModelMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.ModelMetadata.set -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.ModelName.get -> string +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.ModelName.set -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.ModelState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.ModelState.set -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.PropertyFilter.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.PropertyFilter.set -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.ValidationState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.ValidationState.set -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.ValueProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider +~override Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.ValueProvider.set -> void +~override Microsoft.AspNetCore.Mvc.ModelBinding.FormValueProvider.ContainsPrefix(string prefix) -> bool +~override Microsoft.AspNetCore.Mvc.ModelBinding.FormValueProvider.GetValue(string key) -> Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult +~override Microsoft.AspNetCore.Mvc.ModelBinding.JQueryValueProvider.ContainsPrefix(string prefix) -> bool +~override Microsoft.AspNetCore.Mvc.ModelBinding.JQueryValueProvider.GetValue(string key) -> Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.AttemptedValueIsInvalidAccessor.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.MissingBindRequiredValueAccessor.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.MissingKeyOrValueAccessor.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.MissingRequestBodyRequiredValueAccessor.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.NonPropertyAttemptedValueIsInvalidAccessor.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.NonPropertyUnknownValueIsInvalidAccessor.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.NonPropertyValueMustBeANumberAccessor.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.UnknownValueIsInvalidAccessor.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.ValueIsInvalidAccessor.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.ValueMustBeANumberAccessor.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelBindingMessageProvider.ValueMustNotBeNullAccessor.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.AdditionalValues.get -> System.Collections.Generic.IReadOnlyDictionary +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.BinderModelName.get -> string +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.BinderType.get -> System.Type +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.BoundConstructor.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.BoundConstructorInvoker.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.BoundConstructorParameters.get -> System.Collections.Generic.IReadOnlyList +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.ContainerMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.DataTypeName.get -> string +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.Description.get -> string +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.DisplayFormatString.get -> string +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.DisplayName.get -> string +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.EditFormatString.get -> string +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.ElementMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.EnumGroupedDisplayNamesAndValues.get -> System.Collections.Generic.IEnumerable> +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.EnumNamesAndValues.get -> System.Collections.Generic.IReadOnlyDictionary +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.GetMetadataForProperties(System.Type modelType) -> System.Collections.Generic.IEnumerable +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.GetMetadataForType(System.Type modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.ModelBindingMessageProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelBindingMessageProvider +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.NullDisplayText.get -> string +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.Placeholder.get -> string +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.Properties.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelPropertyCollection +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.PropertyFilterProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IPropertyFilterProvider +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.PropertyGetter.get -> System.Func +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.PropertySetter.get -> System.Action +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.PropertyValidationFilter.get -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IPropertyValidationFilter +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.SimpleDisplayProperty.get -> string +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.TemplateHint.get -> string +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata.ValidatorMetadata.get -> System.Collections.Generic.IReadOnlyList +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.GetMetadataForConstructor(System.Reflection.ConstructorInfo constructorInfo, System.Type modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.GetMetadataForParameter(System.Reflection.ParameterInfo parameter) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.GetMetadataForParameter(System.Reflection.ParameterInfo parameter, System.Type modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.GetMetadataForProperties(System.Type modelType) -> System.Collections.Generic.IEnumerable +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.GetMetadataForProperty(System.Reflection.PropertyInfo propertyInfo, System.Type modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~override Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.GetMetadataForType(System.Type modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~override Microsoft.AspNetCore.Mvc.ModelBinding.QueryStringValueProvider.ContainsPrefix(string prefix) -> bool +~override Microsoft.AspNetCore.Mvc.ModelBinding.QueryStringValueProvider.GetValue(string key) -> Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult +~override Microsoft.AspNetCore.Mvc.ModelBinding.RouteValueProvider.ContainsPrefix(string key) -> bool +~override Microsoft.AspNetCore.Mvc.ModelBinding.RouteValueProvider.GetValue(string key) -> Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult +~override Microsoft.AspNetCore.Mvc.ObjectResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.PhysicalFileResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.RedirectResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.RedirectToActionResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.RedirectToPageResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.RedirectToRouteResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.Routing.UrlHelper.Action(Microsoft.AspNetCore.Mvc.Routing.UrlActionContext actionContext) -> string +~override Microsoft.AspNetCore.Mvc.Routing.UrlHelper.RouteUrl(Microsoft.AspNetCore.Mvc.Routing.UrlRouteContext routeContext) -> string +~override Microsoft.AspNetCore.Mvc.SignInResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.SignOutResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.StatusCodeResult.ExecuteResult(Microsoft.AspNetCore.Mvc.ActionContext context) -> void +~override Microsoft.AspNetCore.Mvc.VirtualFileResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override sealed Microsoft.AspNetCore.Mvc.Formatters.SystemTextJsonInputFormatter.ReadRequestBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext context, System.Text.Encoding encoding) -> System.Threading.Tasks.Task +~override sealed Microsoft.AspNetCore.Mvc.Formatters.SystemTextJsonOutputFormatter.WriteResponseBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context, System.Text.Encoding selectedEncoding) -> System.Threading.Tasks.Task +~override sealed Microsoft.AspNetCore.Mvc.Formatters.TextOutputFormatter.WriteResponseBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Builder.ControllerEndpointRouteBuilderExtensions.MapAreaControllerRoute(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string name, string areaName, string pattern, object defaults = null, object constraints = null, object dataTokens = null) -> Microsoft.AspNetCore.Builder.ControllerActionEndpointConventionBuilder +~static Microsoft.AspNetCore.Builder.ControllerEndpointRouteBuilderExtensions.MapControllerRoute(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string name, string pattern, object defaults = null, object constraints = null, object dataTokens = null) -> Microsoft.AspNetCore.Builder.ControllerActionEndpointConventionBuilder +~static Microsoft.AspNetCore.Builder.ControllerEndpointRouteBuilderExtensions.MapControllers(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints) -> Microsoft.AspNetCore.Builder.ControllerActionEndpointConventionBuilder +~static Microsoft.AspNetCore.Builder.ControllerEndpointRouteBuilderExtensions.MapDefaultControllerRoute(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints) -> Microsoft.AspNetCore.Builder.ControllerActionEndpointConventionBuilder +~static Microsoft.AspNetCore.Builder.ControllerEndpointRouteBuilderExtensions.MapDynamicControllerRoute(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string pattern) -> void +~static Microsoft.AspNetCore.Builder.ControllerEndpointRouteBuilderExtensions.MapDynamicControllerRoute(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string pattern, object state) -> void +~static Microsoft.AspNetCore.Builder.ControllerEndpointRouteBuilderExtensions.MapFallbackToAreaController(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string action, string controller, string area) -> Microsoft.AspNetCore.Builder.IEndpointConventionBuilder +~static Microsoft.AspNetCore.Builder.ControllerEndpointRouteBuilderExtensions.MapFallbackToAreaController(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string pattern, string action, string controller, string area) -> Microsoft.AspNetCore.Builder.IEndpointConventionBuilder +~static Microsoft.AspNetCore.Builder.ControllerEndpointRouteBuilderExtensions.MapFallbackToController(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string action, string controller) -> Microsoft.AspNetCore.Builder.IEndpointConventionBuilder +~static Microsoft.AspNetCore.Builder.ControllerEndpointRouteBuilderExtensions.MapFallbackToController(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string pattern, string action, string controller) -> Microsoft.AspNetCore.Builder.IEndpointConventionBuilder +~static Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvc(this Microsoft.AspNetCore.Builder.IApplicationBuilder app) -> Microsoft.AspNetCore.Builder.IApplicationBuilder +~static Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvc(this Microsoft.AspNetCore.Builder.IApplicationBuilder app, System.Action configureRoutes) -> Microsoft.AspNetCore.Builder.IApplicationBuilder +~static Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvcWithDefaultRoute(this Microsoft.AspNetCore.Builder.IApplicationBuilder app) -> Microsoft.AspNetCore.Builder.IApplicationBuilder +~static Microsoft.AspNetCore.Builder.MvcAreaRouteBuilderExtensions.MapAreaRoute(this Microsoft.AspNetCore.Routing.IRouteBuilder routeBuilder, string name, string areaName, string template) -> Microsoft.AspNetCore.Routing.IRouteBuilder +~static Microsoft.AspNetCore.Builder.MvcAreaRouteBuilderExtensions.MapAreaRoute(this Microsoft.AspNetCore.Routing.IRouteBuilder routeBuilder, string name, string areaName, string template, object defaults) -> Microsoft.AspNetCore.Routing.IRouteBuilder +~static Microsoft.AspNetCore.Builder.MvcAreaRouteBuilderExtensions.MapAreaRoute(this Microsoft.AspNetCore.Routing.IRouteBuilder routeBuilder, string name, string areaName, string template, object defaults, object constraints) -> Microsoft.AspNetCore.Routing.IRouteBuilder +~static Microsoft.AspNetCore.Builder.MvcAreaRouteBuilderExtensions.MapAreaRoute(this Microsoft.AspNetCore.Routing.IRouteBuilder routeBuilder, string name, string areaName, string template, object defaults, object constraints, object dataTokens) -> Microsoft.AspNetCore.Routing.IRouteBuilder +~static Microsoft.AspNetCore.Mvc.ActionResult.implicit operator Microsoft.AspNetCore.Mvc.ActionResult(Microsoft.AspNetCore.Mvc.ActionResult result) -> Microsoft.AspNetCore.Mvc.ActionResult +~static Microsoft.AspNetCore.Mvc.ActionResult.implicit operator Microsoft.AspNetCore.Mvc.ActionResult(TValue value) -> Microsoft.AspNetCore.Mvc.ActionResult +~static Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.CombineAttributeRouteModel(Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel left, Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel right) -> Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel +~static Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.CombineTemplates(string prefix, string template) -> string +~static Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.IsOverridePattern(string template) -> bool +~static Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.ReplaceTokens(string template, System.Collections.Generic.IDictionary values) -> string +~static Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel.ReplaceTokens(string template, System.Collections.Generic.IDictionary values, Microsoft.AspNetCore.Routing.IOutboundParameterTransformer routeTokenTransformer) -> string +~static Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartFactory.GetApplicationPartFactory(System.Reflection.Assembly assembly) -> Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartFactory +~static Microsoft.AspNetCore.Mvc.ApplicationParts.DefaultApplicationPartFactory.GetDefaultApplicationParts(System.Reflection.Assembly assembly) -> System.Collections.Generic.IEnumerable +~static Microsoft.AspNetCore.Mvc.ApplicationParts.DefaultApplicationPartFactory.Instance.get -> Microsoft.AspNetCore.Mvc.ApplicationParts.DefaultApplicationPartFactory +~static Microsoft.AspNetCore.Mvc.ApplicationParts.RelatedAssemblyAttribute.GetRelatedAssemblies(System.Reflection.Assembly assembly, bool throwOnError) -> System.Collections.Generic.IReadOnlyList +~static Microsoft.AspNetCore.Mvc.DefaultApiConventions.Create(object model) -> void +~static Microsoft.AspNetCore.Mvc.DefaultApiConventions.Delete(object id) -> void +~static Microsoft.AspNetCore.Mvc.DefaultApiConventions.Edit(object id, object model) -> void +~static Microsoft.AspNetCore.Mvc.DefaultApiConventions.Find(object id) -> void +~static Microsoft.AspNetCore.Mvc.DefaultApiConventions.Get(object id) -> void +~static Microsoft.AspNetCore.Mvc.DefaultApiConventions.Post(object model) -> void +~static Microsoft.AspNetCore.Mvc.DefaultApiConventions.Put(object id, object model) -> void +~static Microsoft.AspNetCore.Mvc.DefaultApiConventions.Update(object id, object model) -> void +~static Microsoft.AspNetCore.Mvc.Formatters.MediaType.CreateMediaTypeSegmentWithQuality(string mediaType, int start) -> Microsoft.AspNetCore.Mvc.Formatters.MediaTypeSegmentWithQuality +~static Microsoft.AspNetCore.Mvc.Formatters.MediaType.GetEncoding(Microsoft.Extensions.Primitives.StringSegment mediaType) -> System.Text.Encoding +~static Microsoft.AspNetCore.Mvc.Formatters.MediaType.GetEncoding(string mediaType) -> System.Text.Encoding +~static Microsoft.AspNetCore.Mvc.Formatters.MediaType.ReplaceEncoding(Microsoft.Extensions.Primitives.StringSegment mediaType, System.Text.Encoding encoding) -> string +~static Microsoft.AspNetCore.Mvc.Formatters.MediaType.ReplaceEncoding(string mediaType, System.Text.Encoding encoding) -> string +~static Microsoft.AspNetCore.Mvc.Infrastructure.FileResultExecutorBase.CreateLogger(Microsoft.Extensions.Logging.ILoggerFactory factory) -> Microsoft.Extensions.Logging.ILogger +~static Microsoft.AspNetCore.Mvc.Infrastructure.FileResultExecutorBase.WriteFileAsync(Microsoft.AspNetCore.Http.HttpContext context, System.IO.Stream fileStream, Microsoft.Net.Http.Headers.RangeItemHeaderValue range, long rangeLength) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.CreateAsync(Microsoft.AspNetCore.Mvc.ActionContext actionContext, System.Collections.Generic.IList factories) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.CreateAsync(Microsoft.AspNetCore.Mvc.ControllerContext controllerContext) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.ModelBinding.DefaultModelBindingContext.CreateBindingContext(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo bindingInfo, string modelName) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext +~static Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.MetadataDetailsProviderExtensions.RemoveType(this System.Collections.Generic.IList list, System.Type type) -> void +~static Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.MetadataDetailsProviderExtensions.RemoveType(this System.Collections.Generic.IList list) -> void +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes.GetAttributesForParameter(System.Reflection.ParameterInfo parameterInfo) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes.GetAttributesForParameter(System.Reflection.ParameterInfo parameterInfo, System.Type modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes.GetAttributesForProperty(System.Type containerType, System.Reflection.PropertyInfo property, System.Type modelType) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes.GetAttributesForProperty(System.Type type, System.Reflection.PropertyInfo property) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes.GetAttributesForType(System.Type type) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderExtensions.RemoveType(this System.Collections.Generic.IList list, System.Type type) -> void +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderExtensions.RemoveType(this System.Collections.Generic.IList list) -> void +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadataProviderExtensions.GetMetadataForProperty(this Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider provider, System.Type containerType, string propertyName) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelNames.CreateIndexModelName(string parentName, int index) -> string +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelNames.CreateIndexModelName(string parentName, string index) -> string +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelNames.CreatePropertyModelName(string prefix, string propertyName) -> string +~static Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidatorProviderExtensions.RemoveType(this System.Collections.Generic.IList list, System.Type type) -> void +~static Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidatorProviderExtensions.RemoveType(this System.Collections.Generic.IList list) -> void +~static Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.StateManager.Recurse(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor visitor, string key, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, object model, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IValidationStrategy strategy) -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.StateManager +~static Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryExtensions.RemoveType(this System.Collections.Generic.IList list, System.Type type) -> void +~static Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderFactoryExtensions.RemoveType(this System.Collections.Generic.IList list) -> void +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Action(this Microsoft.AspNetCore.Mvc.IUrlHelper helper) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Action(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, string action) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Action(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, string action, object values) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Action(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, string action, string controller) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Action(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, string action, string controller, object values) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Action(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, string action, string controller, object values, string protocol) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Action(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, string action, string controller, object values, string protocol, string host) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Action(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, string action, string controller, object values, string protocol, string host, string fragment) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.ActionLink(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, string action = null, string controller = null, object values = null, string protocol = null, string host = null, string fragment = null) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Page(this Microsoft.AspNetCore.Mvc.IUrlHelper urlHelper, string pageName) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Page(this Microsoft.AspNetCore.Mvc.IUrlHelper urlHelper, string pageName, object values) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Page(this Microsoft.AspNetCore.Mvc.IUrlHelper urlHelper, string pageName, string pageHandler) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Page(this Microsoft.AspNetCore.Mvc.IUrlHelper urlHelper, string pageName, string pageHandler, object values) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Page(this Microsoft.AspNetCore.Mvc.IUrlHelper urlHelper, string pageName, string pageHandler, object values, string protocol) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Page(this Microsoft.AspNetCore.Mvc.IUrlHelper urlHelper, string pageName, string pageHandler, object values, string protocol, string host) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Page(this Microsoft.AspNetCore.Mvc.IUrlHelper urlHelper, string pageName, string pageHandler, object values, string protocol, string host, string fragment) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.PageLink(this Microsoft.AspNetCore.Mvc.IUrlHelper urlHelper, string pageName = null, string pageHandler = null, object values = null, string protocol = null, string host = null, string fragment = null) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.RouteUrl(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, object values) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.RouteUrl(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, string routeName) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.RouteUrl(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, string routeName, object values) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.RouteUrl(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, string routeName, object values, string protocol) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.RouteUrl(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, string routeName, object values, string protocol, string host) -> string +~static Microsoft.AspNetCore.Mvc.UrlHelperExtensions.RouteUrl(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, string routeName, object values, string protocol, string host, string fragment) -> string +~static Microsoft.AspNetCore.Routing.ControllerLinkGeneratorExtensions.GetPathByAction(this Microsoft.AspNetCore.Routing.LinkGenerator generator, Microsoft.AspNetCore.Http.HttpContext httpContext, string action = null, string controller = null, object values = null, Microsoft.AspNetCore.Http.PathString? pathBase = null, Microsoft.AspNetCore.Http.FragmentString fragment = default(Microsoft.AspNetCore.Http.FragmentString), Microsoft.AspNetCore.Routing.LinkOptions options = null) -> string +~static Microsoft.AspNetCore.Routing.ControllerLinkGeneratorExtensions.GetPathByAction(this Microsoft.AspNetCore.Routing.LinkGenerator generator, string action, string controller, object values = null, Microsoft.AspNetCore.Http.PathString pathBase = default(Microsoft.AspNetCore.Http.PathString), Microsoft.AspNetCore.Http.FragmentString fragment = default(Microsoft.AspNetCore.Http.FragmentString), Microsoft.AspNetCore.Routing.LinkOptions options = null) -> string +~static Microsoft.AspNetCore.Routing.ControllerLinkGeneratorExtensions.GetUriByAction(this Microsoft.AspNetCore.Routing.LinkGenerator generator, Microsoft.AspNetCore.Http.HttpContext httpContext, string action = null, string controller = null, object values = null, string scheme = null, Microsoft.AspNetCore.Http.HostString? host = null, Microsoft.AspNetCore.Http.PathString? pathBase = null, Microsoft.AspNetCore.Http.FragmentString fragment = default(Microsoft.AspNetCore.Http.FragmentString), Microsoft.AspNetCore.Routing.LinkOptions options = null) -> string +~static Microsoft.AspNetCore.Routing.ControllerLinkGeneratorExtensions.GetUriByAction(this Microsoft.AspNetCore.Routing.LinkGenerator generator, string action, string controller, object values, string scheme, Microsoft.AspNetCore.Http.HostString host, Microsoft.AspNetCore.Http.PathString pathBase = default(Microsoft.AspNetCore.Http.PathString), Microsoft.AspNetCore.Http.FragmentString fragment = default(Microsoft.AspNetCore.Http.FragmentString), Microsoft.AspNetCore.Routing.LinkOptions options = null) -> string +~static Microsoft.AspNetCore.Routing.PageLinkGeneratorExtensions.GetPathByPage(this Microsoft.AspNetCore.Routing.LinkGenerator generator, Microsoft.AspNetCore.Http.HttpContext httpContext, string page = null, string handler = null, object values = null, Microsoft.AspNetCore.Http.PathString? pathBase = null, Microsoft.AspNetCore.Http.FragmentString fragment = default(Microsoft.AspNetCore.Http.FragmentString), Microsoft.AspNetCore.Routing.LinkOptions options = null) -> string +~static Microsoft.AspNetCore.Routing.PageLinkGeneratorExtensions.GetPathByPage(this Microsoft.AspNetCore.Routing.LinkGenerator generator, string page, string handler = null, object values = null, Microsoft.AspNetCore.Http.PathString pathBase = default(Microsoft.AspNetCore.Http.PathString), Microsoft.AspNetCore.Http.FragmentString fragment = default(Microsoft.AspNetCore.Http.FragmentString), Microsoft.AspNetCore.Routing.LinkOptions options = null) -> string +~static Microsoft.AspNetCore.Routing.PageLinkGeneratorExtensions.GetUriByPage(this Microsoft.AspNetCore.Routing.LinkGenerator generator, Microsoft.AspNetCore.Http.HttpContext httpContext, string page = null, string handler = null, object values = null, string scheme = null, Microsoft.AspNetCore.Http.HostString? host = null, Microsoft.AspNetCore.Http.PathString? pathBase = null, Microsoft.AspNetCore.Http.FragmentString fragment = default(Microsoft.AspNetCore.Http.FragmentString), Microsoft.AspNetCore.Routing.LinkOptions options = null) -> string +~static Microsoft.AspNetCore.Routing.PageLinkGeneratorExtensions.GetUriByPage(this Microsoft.AspNetCore.Routing.LinkGenerator generator, string page, string handler, object values, string scheme, Microsoft.AspNetCore.Http.HostString host, Microsoft.AspNetCore.Http.PathString pathBase = default(Microsoft.AspNetCore.Http.PathString), Microsoft.AspNetCore.Http.FragmentString fragment = default(Microsoft.AspNetCore.Http.FragmentString), Microsoft.AspNetCore.Routing.LinkOptions options = null) -> string +~static Microsoft.Extensions.DependencyInjection.ApplicationModelConventionExtensions.Add(this System.Collections.Generic.IList conventions, Microsoft.AspNetCore.Mvc.ApplicationModels.IActionModelConvention actionModelConvention) -> void +~static Microsoft.Extensions.DependencyInjection.ApplicationModelConventionExtensions.Add(this System.Collections.Generic.IList conventions, Microsoft.AspNetCore.Mvc.ApplicationModels.IControllerModelConvention controllerModelConvention) -> void +~static Microsoft.Extensions.DependencyInjection.ApplicationModelConventionExtensions.Add(this System.Collections.Generic.IList conventions, Microsoft.AspNetCore.Mvc.ApplicationModels.IParameterModelBaseConvention parameterModelConvention) -> void +~static Microsoft.Extensions.DependencyInjection.ApplicationModelConventionExtensions.Add(this System.Collections.Generic.IList conventions, Microsoft.AspNetCore.Mvc.ApplicationModels.IParameterModelConvention parameterModelConvention) -> void +~static Microsoft.Extensions.DependencyInjection.ApplicationModelConventionExtensions.RemoveType(this System.Collections.Generic.IList list, System.Type type) -> void +~static Microsoft.Extensions.DependencyInjection.ApplicationModelConventionExtensions.RemoveType(this System.Collections.Generic.IList list) -> void +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcBuilderExtensions.AddApplicationPart(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Reflection.Assembly assembly) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcBuilderExtensions.AddControllersAsServices(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcBuilderExtensions.AddFormatterMappings(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcBuilderExtensions.AddJsonOptions(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action configure) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcBuilderExtensions.AddMvcOptions(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcBuilderExtensions.ConfigureApiBehaviorOptions(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcBuilderExtensions.ConfigureApplicationPartManager(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcBuilderExtensions.SetCompatibilityVersion(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, Microsoft.AspNetCore.Mvc.CompatibilityVersion version) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcCoreBuilderExtensions.AddApplicationPart(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Reflection.Assembly assembly) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcCoreBuilderExtensions.AddAuthorization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcCoreBuilderExtensions.AddAuthorization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcCoreBuilderExtensions.AddControllersAsServices(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcCoreBuilderExtensions.AddFormatterMappings(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcCoreBuilderExtensions.AddFormatterMappings(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcCoreBuilderExtensions.AddJsonOptions(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action configure) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcCoreBuilderExtensions.AddMvcOptions(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcCoreBuilderExtensions.ConfigureApiBehaviorOptions(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcCoreBuilderExtensions.ConfigureApplicationPartManager(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreMvcCoreBuilderExtensions.SetCompatibilityVersion(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, Microsoft.AspNetCore.Mvc.CompatibilityVersion version) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreServiceCollectionExtensions.AddMvcCore(this Microsoft.Extensions.DependencyInjection.IServiceCollection services) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCoreServiceCollectionExtensions.AddMvcCore(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static readonly Microsoft.AspNetCore.Mvc.Formatters.TextInputFormatter.UTF16EncodingLittleEndian -> System.Text.Encoding +~static readonly Microsoft.AspNetCore.Mvc.Formatters.TextInputFormatter.UTF8EncodingWithoutBOM -> System.Text.Encoding +~virtual Microsoft.AspNetCore.Mvc.ActionConstraints.HttpMethodActionConstraint.Accept(Microsoft.AspNetCore.Mvc.ActionConstraints.ActionConstraintContext context) -> bool +~virtual Microsoft.AspNetCore.Mvc.ActionResult.ExecuteResult(Microsoft.AspNetCore.Mvc.ActionContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.ActionResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ApplicationModels.ApiConventionApplicationModelConvention.ShouldApply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> bool +~virtual Microsoft.AspNetCore.Mvc.ApplicationModels.ApiVisibilityConvention.ShouldApply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> bool +~virtual Microsoft.AspNetCore.Mvc.ApplicationModels.ClientErrorResultFilterConvention.ShouldApply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> bool +~virtual Microsoft.AspNetCore.Mvc.ApplicationModels.ConsumesConstraintForFormFileParameterConvention.ShouldApply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> bool +~virtual Microsoft.AspNetCore.Mvc.ApplicationModels.InferParameterBindingInfoConvention.ShouldApply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> bool +~virtual Microsoft.AspNetCore.Mvc.ApplicationModels.InvalidModelStateFilterConvention.ShouldApply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> bool +~virtual Microsoft.AspNetCore.Mvc.ApplicationModels.RouteTokenTransformerConvention.ShouldApply(Microsoft.AspNetCore.Mvc.ApplicationModels.ActionModel action) -> bool +~virtual Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter.OnAuthorizationAsync(Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext context) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.BindPropertyAttribute.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +~virtual Microsoft.AspNetCore.Mvc.BindPropertyAttribute.BindingSource.set -> void +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Accepted() -> Microsoft.AspNetCore.Mvc.AcceptedResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Accepted(System.Uri uri) -> Microsoft.AspNetCore.Mvc.AcceptedResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Accepted(System.Uri uri, object value) -> Microsoft.AspNetCore.Mvc.AcceptedResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Accepted(object value) -> Microsoft.AspNetCore.Mvc.AcceptedResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Accepted(string uri) -> Microsoft.AspNetCore.Mvc.AcceptedResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Accepted(string uri, object value) -> Microsoft.AspNetCore.Mvc.AcceptedResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.AcceptedAtAction(string actionName) -> Microsoft.AspNetCore.Mvc.AcceptedAtActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.AcceptedAtAction(string actionName, object routeValues, object value) -> Microsoft.AspNetCore.Mvc.AcceptedAtActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.AcceptedAtAction(string actionName, object value) -> Microsoft.AspNetCore.Mvc.AcceptedAtActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.AcceptedAtAction(string actionName, string controllerName) -> Microsoft.AspNetCore.Mvc.AcceptedAtActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.AcceptedAtAction(string actionName, string controllerName, object routeValues) -> Microsoft.AspNetCore.Mvc.AcceptedAtActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.AcceptedAtAction(string actionName, string controllerName, object routeValues, object value) -> Microsoft.AspNetCore.Mvc.AcceptedAtActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.AcceptedAtRoute(object routeValues) -> Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.AcceptedAtRoute(object routeValues, object value) -> Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.AcceptedAtRoute(string routeName) -> Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.AcceptedAtRoute(string routeName, object routeValues) -> Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.AcceptedAtRoute(string routeName, object routeValues, object value) -> Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.BadRequest() -> Microsoft.AspNetCore.Mvc.BadRequestResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.BadRequest(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) -> Microsoft.AspNetCore.Mvc.BadRequestObjectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.BadRequest(object error) -> Microsoft.AspNetCore.Mvc.BadRequestObjectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Challenge() -> Microsoft.AspNetCore.Mvc.ChallengeResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Challenge(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> Microsoft.AspNetCore.Mvc.ChallengeResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Challenge(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties, params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.ChallengeResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Challenge(params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.ChallengeResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Conflict() -> Microsoft.AspNetCore.Mvc.ConflictResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Conflict(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) -> Microsoft.AspNetCore.Mvc.ConflictObjectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Conflict(object error) -> Microsoft.AspNetCore.Mvc.ConflictObjectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Content(string content) -> Microsoft.AspNetCore.Mvc.ContentResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Content(string content, Microsoft.Net.Http.Headers.MediaTypeHeaderValue contentType) -> Microsoft.AspNetCore.Mvc.ContentResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Content(string content, string contentType) -> Microsoft.AspNetCore.Mvc.ContentResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Content(string content, string contentType, System.Text.Encoding contentEncoding) -> Microsoft.AspNetCore.Mvc.ContentResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Created(System.Uri uri, object value) -> Microsoft.AspNetCore.Mvc.CreatedResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Created(string uri, object value) -> Microsoft.AspNetCore.Mvc.CreatedResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.CreatedAtAction(string actionName, object routeValues, object value) -> Microsoft.AspNetCore.Mvc.CreatedAtActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.CreatedAtAction(string actionName, object value) -> Microsoft.AspNetCore.Mvc.CreatedAtActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.CreatedAtAction(string actionName, string controllerName, object routeValues, object value) -> Microsoft.AspNetCore.Mvc.CreatedAtActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.CreatedAtRoute(object routeValues, object value) -> Microsoft.AspNetCore.Mvc.CreatedAtRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.CreatedAtRoute(string routeName, object routeValues, object value) -> Microsoft.AspNetCore.Mvc.CreatedAtRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.CreatedAtRoute(string routeName, object value) -> Microsoft.AspNetCore.Mvc.CreatedAtRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(System.IO.Stream fileStream, string contentType) -> Microsoft.AspNetCore.Mvc.FileStreamResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(System.IO.Stream fileStream, string contentType, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag) -> Microsoft.AspNetCore.Mvc.FileStreamResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(System.IO.Stream fileStream, string contentType, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.FileStreamResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(System.IO.Stream fileStream, string contentType, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.FileStreamResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(System.IO.Stream fileStream, string contentType, string fileDownloadName) -> Microsoft.AspNetCore.Mvc.FileStreamResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(System.IO.Stream fileStream, string contentType, string fileDownloadName, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag) -> Microsoft.AspNetCore.Mvc.FileStreamResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(System.IO.Stream fileStream, string contentType, string fileDownloadName, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.FileStreamResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(System.IO.Stream fileStream, string contentType, string fileDownloadName, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.FileStreamResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(byte[] fileContents, string contentType) -> Microsoft.AspNetCore.Mvc.FileContentResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(byte[] fileContents, string contentType, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag) -> Microsoft.AspNetCore.Mvc.FileContentResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(byte[] fileContents, string contentType, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.FileContentResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(byte[] fileContents, string contentType, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.FileContentResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(byte[] fileContents, string contentType, string fileDownloadName) -> Microsoft.AspNetCore.Mvc.FileContentResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(byte[] fileContents, string contentType, string fileDownloadName, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag) -> Microsoft.AspNetCore.Mvc.FileContentResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(byte[] fileContents, string contentType, string fileDownloadName, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.FileContentResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(byte[] fileContents, string contentType, string fileDownloadName, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.FileContentResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(string virtualPath, string contentType) -> Microsoft.AspNetCore.Mvc.VirtualFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(string virtualPath, string contentType, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag) -> Microsoft.AspNetCore.Mvc.VirtualFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(string virtualPath, string contentType, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.VirtualFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(string virtualPath, string contentType, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.VirtualFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(string virtualPath, string contentType, string fileDownloadName) -> Microsoft.AspNetCore.Mvc.VirtualFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(string virtualPath, string contentType, string fileDownloadName, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag) -> Microsoft.AspNetCore.Mvc.VirtualFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(string virtualPath, string contentType, string fileDownloadName, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.VirtualFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.File(string virtualPath, string contentType, string fileDownloadName, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.VirtualFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Forbid() -> Microsoft.AspNetCore.Mvc.ForbidResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Forbid(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> Microsoft.AspNetCore.Mvc.ForbidResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Forbid(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties, params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.ForbidResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Forbid(params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.ForbidResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.LocalRedirect(string localUrl) -> Microsoft.AspNetCore.Mvc.LocalRedirectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.LocalRedirectPermanent(string localUrl) -> Microsoft.AspNetCore.Mvc.LocalRedirectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.LocalRedirectPermanentPreserveMethod(string localUrl) -> Microsoft.AspNetCore.Mvc.LocalRedirectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.LocalRedirectPreserveMethod(string localUrl) -> Microsoft.AspNetCore.Mvc.LocalRedirectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.NoContent() -> Microsoft.AspNetCore.Mvc.NoContentResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.NotFound() -> Microsoft.AspNetCore.Mvc.NotFoundResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.NotFound(object value) -> Microsoft.AspNetCore.Mvc.NotFoundObjectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Ok() -> Microsoft.AspNetCore.Mvc.OkResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Ok(object value) -> Microsoft.AspNetCore.Mvc.OkObjectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.PhysicalFile(string physicalPath, string contentType) -> Microsoft.AspNetCore.Mvc.PhysicalFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.PhysicalFile(string physicalPath, string contentType, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag) -> Microsoft.AspNetCore.Mvc.PhysicalFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.PhysicalFile(string physicalPath, string contentType, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.PhysicalFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.PhysicalFile(string physicalPath, string contentType, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.PhysicalFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.PhysicalFile(string physicalPath, string contentType, string fileDownloadName) -> Microsoft.AspNetCore.Mvc.PhysicalFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.PhysicalFile(string physicalPath, string contentType, string fileDownloadName, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag) -> Microsoft.AspNetCore.Mvc.PhysicalFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.PhysicalFile(string physicalPath, string contentType, string fileDownloadName, System.DateTimeOffset? lastModified, Microsoft.Net.Http.Headers.EntityTagHeaderValue entityTag, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.PhysicalFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.PhysicalFile(string physicalPath, string contentType, string fileDownloadName, bool enableRangeProcessing) -> Microsoft.AspNetCore.Mvc.PhysicalFileResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Problem(string detail = null, string instance = null, int? statusCode = null, string title = null, string type = null) -> Microsoft.AspNetCore.Mvc.ObjectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Redirect(string url) -> Microsoft.AspNetCore.Mvc.RedirectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectPermanent(string url) -> Microsoft.AspNetCore.Mvc.RedirectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectPermanentPreserveMethod(string url) -> Microsoft.AspNetCore.Mvc.RedirectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectPreserveMethod(string url) -> Microsoft.AspNetCore.Mvc.RedirectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToAction() -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToAction(string actionName) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToAction(string actionName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToAction(string actionName, string controllerName) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToAction(string actionName, string controllerName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToAction(string actionName, string controllerName, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToAction(string actionName, string controllerName, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToActionPermanent(string actionName) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToActionPermanent(string actionName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToActionPermanent(string actionName, string controllerName) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToActionPermanent(string actionName, string controllerName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToActionPermanent(string actionName, string controllerName, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToActionPermanent(string actionName, string controllerName, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToActionPermanentPreserveMethod(string actionName = null, string controllerName = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToActionPreserveMethod(string actionName = null, string controllerName = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToPage(string pageName) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToPage(string pageName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToPage(string pageName, string pageHandler) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToPage(string pageName, string pageHandler, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToPage(string pageName, string pageHandler, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToPage(string pageName, string pageHandler, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToPagePermanent(string pageName) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToPagePermanent(string pageName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToPagePermanent(string pageName, string pageHandler) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToPagePermanent(string pageName, string pageHandler, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToPagePermanent(string pageName, string pageHandler, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToPagePermanentPreserveMethod(string pageName, string pageHandler = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToPagePreserveMethod(string pageName, string pageHandler = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToRoute(object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToRoute(string routeName) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToRoute(string routeName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToRoute(string routeName, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToRoute(string routeName, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToRoutePermanent(object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToRoutePermanent(string routeName) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToRoutePermanent(string routeName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToRoutePermanent(string routeName, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToRoutePermanent(string routeName, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToRoutePermanentPreserveMethod(string routeName = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.RedirectToRoutePreserveMethod(string routeName = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.SignIn(System.Security.Claims.ClaimsPrincipal principal) -> Microsoft.AspNetCore.Mvc.SignInResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.SignIn(System.Security.Claims.ClaimsPrincipal principal, Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> Microsoft.AspNetCore.Mvc.SignInResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.SignIn(System.Security.Claims.ClaimsPrincipal principal, Microsoft.AspNetCore.Authentication.AuthenticationProperties properties, string authenticationScheme) -> Microsoft.AspNetCore.Mvc.SignInResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.SignIn(System.Security.Claims.ClaimsPrincipal principal, string authenticationScheme) -> Microsoft.AspNetCore.Mvc.SignInResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.SignOut() -> Microsoft.AspNetCore.Mvc.SignOutResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.SignOut(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> Microsoft.AspNetCore.Mvc.SignOutResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.SignOut(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties, params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.SignOutResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.SignOut(params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.SignOutResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.StatusCode(int statusCode) -> Microsoft.AspNetCore.Mvc.StatusCodeResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.StatusCode(int statusCode, object value) -> Microsoft.AspNetCore.Mvc.ObjectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.TryUpdateModelAsync(object model, System.Type modelType, string prefix) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.TryUpdateModelAsync(TModel model) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.TryUpdateModelAsync(TModel model, string prefix) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.TryUpdateModelAsync(TModel model, string prefix, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.TryValidateModel(object model) -> bool +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.TryValidateModel(object model, string prefix) -> bool +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Unauthorized() -> Microsoft.AspNetCore.Mvc.UnauthorizedResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.Unauthorized(object value) -> Microsoft.AspNetCore.Mvc.UnauthorizedObjectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.UnprocessableEntity() -> Microsoft.AspNetCore.Mvc.UnprocessableEntityResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.UnprocessableEntity(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) -> Microsoft.AspNetCore.Mvc.UnprocessableEntityObjectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.UnprocessableEntity(object error) -> Microsoft.AspNetCore.Mvc.UnprocessableEntityObjectResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.ValidationProblem() -> Microsoft.AspNetCore.Mvc.ActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.ValidationProblem(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelStateDictionary) -> Microsoft.AspNetCore.Mvc.ActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.ValidationProblem(Microsoft.AspNetCore.Mvc.ValidationProblemDetails descriptor) -> Microsoft.AspNetCore.Mvc.ActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerBase.ValidationProblem(string detail = null, string instance = null, int? statusCode = null, string title = null, string type = null, Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelStateDictionary = null) -> Microsoft.AspNetCore.Mvc.ActionResult +~virtual Microsoft.AspNetCore.Mvc.ControllerContext.ValueProviderFactories.get -> System.Collections.Generic.IList +~virtual Microsoft.AspNetCore.Mvc.ControllerContext.ValueProviderFactories.set -> void +~virtual Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor.ActionName.get -> string +~virtual Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor.ActionName.set -> void +~virtual Microsoft.AspNetCore.Mvc.Controllers.ControllerFeatureProvider.IsController(System.Reflection.TypeInfo typeInfo) -> bool +~virtual Microsoft.AspNetCore.Mvc.Controllers.ServiceBasedControllerActivator.Release(Microsoft.AspNetCore.Mvc.ControllerContext context, object controller) -> void +~virtual Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute.OnActionExecuted(Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute.OnActionExecuting(Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute.OnActionExecutionAsync(Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext context, Microsoft.AspNetCore.Mvc.Filters.ActionExecutionDelegate next) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute.OnResultExecuted(Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute.OnResultExecuting(Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute.OnResultExecutionAsync(Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext context, Microsoft.AspNetCore.Mvc.Filters.ResultExecutionDelegate next) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Filters.ExceptionFilterAttribute.OnException(Microsoft.AspNetCore.Mvc.Filters.ExceptionContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.Filters.ExceptionFilterAttribute.OnExceptionAsync(Microsoft.AspNetCore.Mvc.Filters.ExceptionContext context) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Filters.ResultFilterAttribute.OnResultExecuted(Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.Filters.ResultFilterAttribute.OnResultExecuting(Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.Filters.ResultFilterAttribute.OnResultExecutionAsync(Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext context, Microsoft.AspNetCore.Mvc.Filters.ResultExecutionDelegate next) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Formatters.FormatFilter.GetFormat(Microsoft.AspNetCore.Mvc.ActionContext context) -> string +~virtual Microsoft.AspNetCore.Mvc.Formatters.InputFormatter.CanRead(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext context) -> bool +~virtual Microsoft.AspNetCore.Mvc.Formatters.InputFormatter.CanReadType(System.Type type) -> bool +~virtual Microsoft.AspNetCore.Mvc.Formatters.InputFormatter.GetDefaultValueForType(System.Type modelType) -> object +~virtual Microsoft.AspNetCore.Mvc.Formatters.InputFormatter.GetSupportedContentTypes(string contentType, System.Type objectType) -> System.Collections.Generic.IReadOnlyList +~virtual Microsoft.AspNetCore.Mvc.Formatters.InputFormatter.ReadAsync(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext context) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatter.CanWriteResult(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContext context) -> bool +~virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatter.CanWriteType(System.Type type) -> bool +~virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatter.GetSupportedContentTypes(string contentType, System.Type objectType) -> System.Collections.Generic.IReadOnlyList +~virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatter.WriteAsync(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Formatters.OutputFormatter.WriteResponseHeaders(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.Formatters.TextOutputFormatter.SelectCharacterEncoding(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context) -> System.Text.Encoding +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.ConfigureCompatibilityOptions.PostConfigure(string name, TOptions options) -> void +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.ContentResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.ContentResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.FileContentResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.FileContentResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.FileContentResultExecutor.WriteFileAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.FileContentResult result, Microsoft.Net.Http.Headers.RangeItemHeaderValue range, long rangeLength) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.FileResultExecutorBase.SetHeadersAndLog(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.FileResult result, long? fileLength, bool enableRangeProcessing, System.DateTimeOffset? lastModified = null, Microsoft.Net.Http.Headers.EntityTagHeaderValue etag = null) -> (Microsoft.Net.Http.Headers.RangeItemHeaderValue range, long rangeLength, bool serveBody) +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.FileStreamResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.FileStreamResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.FileStreamResultExecutor.WriteFileAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.FileStreamResult result, Microsoft.Net.Http.Headers.RangeItemHeaderValue range, long rangeLength) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.LocalRedirectResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.LocalRedirectResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.ObjectResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.PhysicalFileResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.GetFileInfo(string path) -> Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.FileMetadata +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.GetFileStream(string path) -> System.IO.Stream +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.WriteFileAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.PhysicalFileResult result, Microsoft.Net.Http.Headers.RangeItemHeaderValue range, long rangeLength) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.RedirectResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.RedirectResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.RedirectToActionResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.RedirectToActionResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.RedirectToPageResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.RedirectToPageResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.RedirectToRouteResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.RedirectToRouteResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.VirtualFileResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.VirtualFileResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.VirtualFileResultExecutor.GetFileStream(Microsoft.Extensions.FileProviders.IFileInfo fileInfo) -> System.IO.Stream +~virtual Microsoft.AspNetCore.Mvc.Infrastructure.VirtualFileResultExecutor.WriteFileAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.VirtualFileResult result, Microsoft.Extensions.FileProviders.IFileInfo fileInfo, Microsoft.Net.Http.Headers.RangeItemHeaderValue range, long rangeLength) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ModelBinderAttribute.BindingSource.get -> Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource +~virtual Microsoft.AspNetCore.Mvc.ModelBinderAttribute.BindingSource.set -> void +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder.CanCreateInstance(System.Type targetType) -> bool +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder.ConvertToCollectionType(System.Type targetType, System.Collections.Generic.IEnumerable collection) -> object +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder.CopyToModel(object target, System.Collections.Generic.IEnumerable sourceCollection) -> void +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder.CreateEmptyCollection(System.Type targetType) -> object +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder.BindProperty(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder.CanBindProperty(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata propertyMetadata) -> bool +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder.CreateModel(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext) -> object +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder.SetProperty(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext, string modelName, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata propertyMetadata, Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingResult result) -> void +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Binders.SimpleTypeModelBinder.CheckModel(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext, Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult valueProviderResult, object model) -> void +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.BindingSourceValueProvider.Filter(Microsoft.AspNetCore.Mvc.ModelBinding.BindingSource bindingSource) -> Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.ContainsPrefix(string prefix) -> bool +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.GetKeysFromPrefix(string prefix) -> System.Collections.Generic.IDictionary +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.GetValue(string key) -> Microsoft.AspNetCore.Mvc.ModelBinding.ValueProviderResult +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.DefaultPropertyFilterProvider.Prefix.get -> string +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.DefaultPropertyFilterProvider.PropertyFilter.get -> System.Func +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.DefaultPropertyFilterProvider.PropertyIncludeExpressions.get -> System.Collections.Generic.IEnumerable>> +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.FormValueProvider.GetKeysFromPrefix(string prefix) -> System.Collections.Generic.IDictionary +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.CreateModelMetadata(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails entry) -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.CreateParameterDetails(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity key) -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.CreatePropertyDetails(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity key) -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails[] +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadataProvider.CreateTypeDetails(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.ModelMetadataIdentity key) -> Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultMetadataDetails +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.ObjectModelValidator.Validate(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary validationState, string prefix, object model) -> void +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.ObjectModelValidator.Validate(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary validationState, string prefix, object model, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata) -> void +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.ObjectModelValidator.Validate(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateDictionary validationState, string prefix, object model, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, object container) -> void +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder modelBinder, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider, Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor parameter, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, object value) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder.BindModelAsync(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder modelBinder, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider, Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor parameter, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, object value, object container) -> System.Threading.Tasks.ValueTask +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.QueryStringValueProvider.GetKeysFromPrefix(string prefix) -> System.Collections.Generic.IDictionary +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.GetValidationEntry(object model) -> Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.SuppressValidation(string key) -> void +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Validate(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel) -> bool +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Validate(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel, object container) -> bool +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Visit(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, string key, object model) -> bool +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.VisitChildren(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IValidationStrategy strategy) -> bool +~virtual Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.VisitComplexType(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.IValidationStrategy defaultStrategy) -> bool +~virtual Microsoft.AspNetCore.Mvc.ObjectResult.OnFormatting(Microsoft.AspNetCore.Mvc.ActionContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.ProducesAttribute.OnResultExecuted(Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.ProducesAttribute.OnResultExecuting(Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.RequireHttpsAttribute.HandleNonHttpsRequest(Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext filterContext) -> void +~virtual Microsoft.AspNetCore.Mvc.RequireHttpsAttribute.OnAuthorization(Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext filterContext) -> void +~virtual Microsoft.AspNetCore.Mvc.Routing.DynamicRouteValueTransformer.FilterAsync(Microsoft.AspNetCore.Http.HttpContext httpContext, Microsoft.AspNetCore.Routing.RouteValueDictionary values, System.Collections.Generic.IReadOnlyList endpoints) -> System.Threading.Tasks.ValueTask> +~virtual Microsoft.AspNetCore.Mvc.Routing.UrlHelper.GenerateUrl(string protocol, string host, Microsoft.AspNetCore.Routing.VirtualPathData pathData, string fragment) -> string +~virtual Microsoft.AspNetCore.Mvc.Routing.UrlHelper.GetVirtualPathData(string routeName, Microsoft.AspNetCore.Routing.RouteValueDictionary values) -> Microsoft.AspNetCore.Routing.VirtualPathData +~virtual Microsoft.AspNetCore.Mvc.Routing.UrlHelperBase.Content(string contentPath) -> string +~virtual Microsoft.AspNetCore.Mvc.Routing.UrlHelperBase.IsLocalUrl(string url) -> bool +~virtual Microsoft.AspNetCore.Mvc.Routing.UrlHelperBase.Link(string routeName, object values) -> string diff --git a/src/Mvc/Mvc.Core/src/Routing/ControllerLinkGeneratorExtensions.cs b/src/Mvc/Mvc.Core/src/Routing/ControllerLinkGeneratorExtensions.cs index d15eaef020..f0b83af2e6 100644 --- a/src/Mvc/Mvc.Core/src/Routing/ControllerLinkGeneratorExtensions.cs +++ b/src/Mvc/Mvc.Core/src/Routing/ControllerLinkGeneratorExtensions.cs @@ -1,10 +1,11 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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.Diagnostics.CodeAnalysis; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Mvc.Routing; -using System; namespace Microsoft.AspNetCore.Routing { @@ -36,6 +37,7 @@ namespace Microsoft.AspNetCore.Routing /// names from RouteOptions. /// /// A URI with an absolute path, or null if a URI cannot be created. + [SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")] public static string GetPathByAction( this LinkGenerator generator, HttpContext httpContext, @@ -81,6 +83,7 @@ namespace Microsoft.AspNetCore.Routing /// names from RouteOptions. /// /// A URI with an absolute path, or null if a URI cannot be created. + [SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")] public static string GetPathByAction( this LinkGenerator generator, string action, @@ -146,6 +149,7 @@ namespace Microsoft.AspNetCore.Routing /// your deployment environment. /// /// + [SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")] public static string GetUriByAction( this LinkGenerator generator, HttpContext httpContext, @@ -205,6 +209,7 @@ namespace Microsoft.AspNetCore.Routing /// your deployment environment. /// /// + [SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")] public static string GetUriByAction( this LinkGenerator generator, string action, @@ -254,4 +259,4 @@ namespace Microsoft.AspNetCore.Routing return httpContext?.Features.Get()?.RouteValues; } } -} \ No newline at end of file +} diff --git a/src/Mvc/Mvc.Core/src/Routing/PageLinkGeneratorExtensions.cs b/src/Mvc/Mvc.Core/src/Routing/PageLinkGeneratorExtensions.cs index f1725f2fe0..3d74e2b07a 100644 --- a/src/Mvc/Mvc.Core/src/Routing/PageLinkGeneratorExtensions.cs +++ b/src/Mvc/Mvc.Core/src/Routing/PageLinkGeneratorExtensions.cs @@ -1,7 +1,8 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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.Diagnostics.CodeAnalysis; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Mvc.Routing; @@ -35,6 +36,7 @@ namespace Microsoft.AspNetCore.Routing /// names from RouteOptions. /// /// A URI with an absolute path, or null if a URI cannot be created. + [SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")] public static string GetPathByPage( this LinkGenerator generator, HttpContext httpContext, @@ -84,6 +86,7 @@ namespace Microsoft.AspNetCore.Routing /// names from RouteOptions. /// /// A URI with an absolute path, or null if a URI cannot be created. + [SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")] public static string GetPathByPage( this LinkGenerator generator, string page, @@ -143,6 +146,7 @@ namespace Microsoft.AspNetCore.Routing /// your deployment environment. /// /// + [SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")] public static string GetUriByPage( this LinkGenerator generator, HttpContext httpContext, @@ -202,6 +206,7 @@ namespace Microsoft.AspNetCore.Routing /// your deployment environment. /// /// + [SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")] public static string GetUriByPage( this LinkGenerator generator, string page, diff --git a/src/Mvc/Mvc.Core/test/Controllers/DefaultControllerFactoryTest.cs b/src/Mvc/Mvc.Core/test/Controllers/DefaultControllerFactoryTest.cs index ec2770bb93..759cf3ff7e 100644 --- a/src/Mvc/Mvc.Core/test/Controllers/DefaultControllerFactoryTest.cs +++ b/src/Mvc/Mvc.Core/test/Controllers/DefaultControllerFactoryTest.cs @@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.Infrastructure; using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; +using Microsoft.AspNetCore.Testing; using Moq; using Xunit; @@ -186,6 +187,7 @@ namespace Microsoft.AspNetCore.Mvc.Controllers } [Fact] + [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/24414")] public void DefaultControllerFactory_DelegatesDisposalToControllerActivator() { // Arrange diff --git a/src/Mvc/Mvc.Core/test/Formatters/JsonInputFormatterTestBase.cs b/src/Mvc/Mvc.Core/test/Formatters/JsonInputFormatterTestBase.cs index 83380231e5..1333f95fcb 100644 --- a/src/Mvc/Mvc.Core/test/Formatters/JsonInputFormatterTestBase.cs +++ b/src/Mvc/Mvc.Core/test/Formatters/JsonInputFormatterTestBase.cs @@ -497,8 +497,8 @@ namespace Microsoft.AspNetCore.Mvc.Formatters var content = "{\"name\": \"Test\"}"; var contentBytes = Encoding.UTF8.GetBytes(content); var httpContext = GetHttpContext(contentBytes); - var testBufferedReadStream = new Mock(httpContext.Request.Body, 1024) { CallBase = true }; - httpContext.Request.Body = testBufferedReadStream.Object; + var testBufferedReadStream = new VerifyDisposeFileBufferingReadStream(httpContext.Request.Body, 1024); + httpContext.Request.Body = testBufferedReadStream; var formatterContext = CreateInputFormatterContext(typeof(ComplexModel), httpContext); @@ -508,8 +508,7 @@ namespace Microsoft.AspNetCore.Mvc.Formatters // Assert var userModel = Assert.IsType(result.Model); Assert.Equal("Test", userModel.Name); - - testBufferedReadStream.Verify(v => v.DisposeAsync(), Times.Never()); + Assert.False(testBufferedReadStream.Disposed); } [Fact] @@ -635,5 +634,25 @@ namespace Microsoft.AspNetCore.Mvc.Formatters public byte Small { get; set; } } + + private class VerifyDisposeFileBufferingReadStream : FileBufferingReadStream + { + public bool Disposed { get; private set; } + public VerifyDisposeFileBufferingReadStream(Stream inner, int memoryThreshold) : base(inner, memoryThreshold) + { + } + + protected override void Dispose(bool disposing) + { + Disposed = true; + base.Dispose(disposing); + } + + public override ValueTask DisposeAsync() + { + Disposed = true; + return base.DisposeAsync(); + } + } } } diff --git a/src/Mvc/Mvc.Cors/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.Cors/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.Cors/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.Cors/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.Cors/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..4abbb445f6 --- /dev/null +++ b/src/Mvc/Mvc.Cors/src/PublicAPI.Unshipped.txt @@ -0,0 +1,12 @@ +#nullable enable +Microsoft.AspNetCore.Mvc.Cors.CorsAuthorizationFilter +Microsoft.AspNetCore.Mvc.Cors.CorsAuthorizationFilter.Order.get -> int +Microsoft.Extensions.DependencyInjection.MvcCorsMvcCoreBuilderExtensions +~Microsoft.AspNetCore.Mvc.Cors.CorsAuthorizationFilter.CorsAuthorizationFilter(Microsoft.AspNetCore.Cors.Infrastructure.ICorsService corsService, Microsoft.AspNetCore.Cors.Infrastructure.ICorsPolicyProvider policyProvider) -> void +~Microsoft.AspNetCore.Mvc.Cors.CorsAuthorizationFilter.CorsAuthorizationFilter(Microsoft.AspNetCore.Cors.Infrastructure.ICorsService corsService, Microsoft.AspNetCore.Cors.Infrastructure.ICorsPolicyProvider policyProvider, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.Cors.CorsAuthorizationFilter.OnAuthorizationAsync(Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.Cors.CorsAuthorizationFilter.PolicyName.get -> string +~Microsoft.AspNetCore.Mvc.Cors.CorsAuthorizationFilter.PolicyName.set -> void +~static Microsoft.Extensions.DependencyInjection.MvcCorsMvcCoreBuilderExtensions.AddCors(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCorsMvcCoreBuilderExtensions.AddCors(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcCorsMvcCoreBuilderExtensions.ConfigureCors(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder diff --git a/src/Mvc/Mvc.DataAnnotations/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.DataAnnotations/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.DataAnnotations/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.DataAnnotations/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.DataAnnotations/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..bc07acf903 --- /dev/null +++ b/src/Mvc/Mvc.DataAnnotations/src/PublicAPI.Unshipped.txt @@ -0,0 +1,38 @@ +#nullable enable +Microsoft.AspNetCore.Mvc.DataAnnotations.IAttributeAdapter +Microsoft.AspNetCore.Mvc.DataAnnotations.IValidationAttributeAdapterProvider +Microsoft.AspNetCore.Mvc.DataAnnotations.MvcDataAnnotationsLocalizationOptions +Microsoft.AspNetCore.Mvc.DataAnnotations.MvcDataAnnotationsLocalizationOptions.MvcDataAnnotationsLocalizationOptions() -> void +Microsoft.AspNetCore.Mvc.DataAnnotations.RequiredAttributeAdapter +Microsoft.AspNetCore.Mvc.DataAnnotations.ValidationAttributeAdapterProvider +Microsoft.AspNetCore.Mvc.DataAnnotations.ValidationAttributeAdapterProvider.ValidationAttributeAdapterProvider() -> void +Microsoft.AspNetCore.Mvc.DataAnnotations.ValidationProviderAttribute +Microsoft.AspNetCore.Mvc.DataAnnotations.ValidationProviderAttribute.ValidationProviderAttribute() -> void +Microsoft.AspNetCore.Mvc.HiddenInputAttribute +Microsoft.AspNetCore.Mvc.HiddenInputAttribute.DisplayValue.get -> bool +Microsoft.AspNetCore.Mvc.HiddenInputAttribute.DisplayValue.set -> void +Microsoft.AspNetCore.Mvc.HiddenInputAttribute.HiddenInputAttribute() -> void +Microsoft.Extensions.DependencyInjection.MvcDataAnnotationsMvcBuilderExtensions +Microsoft.Extensions.DependencyInjection.MvcDataAnnotationsMvcCoreBuilderExtensions +~Microsoft.AspNetCore.Mvc.DataAnnotations.AttributeAdapterBase +~Microsoft.AspNetCore.Mvc.DataAnnotations.AttributeAdapterBase.AttributeAdapterBase(TAttribute attribute, Microsoft.Extensions.Localization.IStringLocalizer stringLocalizer) -> void +~Microsoft.AspNetCore.Mvc.DataAnnotations.IAttributeAdapter.GetErrorMessage(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationContextBase validationContext) -> string +~Microsoft.AspNetCore.Mvc.DataAnnotations.IValidationAttributeAdapterProvider.GetAttributeAdapter(System.ComponentModel.DataAnnotations.ValidationAttribute attribute, Microsoft.Extensions.Localization.IStringLocalizer stringLocalizer) -> Microsoft.AspNetCore.Mvc.DataAnnotations.IAttributeAdapter +~Microsoft.AspNetCore.Mvc.DataAnnotations.MvcDataAnnotationsLocalizationOptions.DataAnnotationLocalizerProvider -> System.Func +~Microsoft.AspNetCore.Mvc.DataAnnotations.RequiredAttributeAdapter.RequiredAttributeAdapter(System.ComponentModel.DataAnnotations.RequiredAttribute attribute, Microsoft.Extensions.Localization.IStringLocalizer stringLocalizer) -> void +~Microsoft.AspNetCore.Mvc.DataAnnotations.ValidationAttributeAdapter +~Microsoft.AspNetCore.Mvc.DataAnnotations.ValidationAttributeAdapter.Attribute.get -> TAttribute +~Microsoft.AspNetCore.Mvc.DataAnnotations.ValidationAttributeAdapter.ValidationAttributeAdapter(TAttribute attribute, Microsoft.Extensions.Localization.IStringLocalizer stringLocalizer) -> void +~Microsoft.AspNetCore.Mvc.DataAnnotations.ValidationAttributeAdapterProvider.GetAttributeAdapter(System.ComponentModel.DataAnnotations.ValidationAttribute attribute, Microsoft.Extensions.Localization.IStringLocalizer stringLocalizer) -> Microsoft.AspNetCore.Mvc.DataAnnotations.IAttributeAdapter +~abstract Microsoft.AspNetCore.Mvc.DataAnnotations.AttributeAdapterBase.GetErrorMessage(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationContextBase validationContext) -> string +~abstract Microsoft.AspNetCore.Mvc.DataAnnotations.ValidationAttributeAdapter.AddValidation(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientModelValidationContext context) -> void +~abstract Microsoft.AspNetCore.Mvc.DataAnnotations.ValidationProviderAttribute.GetValidationAttributes() -> System.Collections.Generic.IEnumerable +~override Microsoft.AspNetCore.Mvc.DataAnnotations.RequiredAttributeAdapter.AddValidation(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientModelValidationContext context) -> void +~override Microsoft.AspNetCore.Mvc.DataAnnotations.RequiredAttributeAdapter.GetErrorMessage(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ModelValidationContextBase validationContext) -> string +~static Microsoft.AspNetCore.Mvc.DataAnnotations.ValidationAttributeAdapter.MergeAttribute(System.Collections.Generic.IDictionary attributes, string key, string value) -> bool +~static Microsoft.Extensions.DependencyInjection.MvcDataAnnotationsMvcBuilderExtensions.AddDataAnnotationsLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcDataAnnotationsMvcBuilderExtensions.AddDataAnnotationsLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcDataAnnotationsMvcCoreBuilderExtensions.AddDataAnnotations(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcDataAnnotationsMvcCoreBuilderExtensions.AddDataAnnotationsLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcDataAnnotationsMvcCoreBuilderExtensions.AddDataAnnotationsLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~virtual Microsoft.AspNetCore.Mvc.DataAnnotations.ValidationAttributeAdapter.GetErrorMessage(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata modelMetadata, params object[] arguments) -> string diff --git a/src/Mvc/Mvc.Formatters.Json/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.Formatters.Json/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.Formatters.Json/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.Formatters.Json/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.Formatters.Json/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..e03057efc8 --- /dev/null +++ b/src/Mvc/Mvc.Formatters.Json/src/PublicAPI.Unshipped.txt @@ -0,0 +1,13 @@ +#nullable enable +Microsoft.AspNetCore.Mvc.JsonResult (forwarded, contained in Microsoft.AspNetCore.Mvc.Core) +Microsoft.AspNetCore.Mvc.JsonResult.StatusCode.get -> int? (forwarded, contained in Microsoft.AspNetCore.Mvc.Core) +Microsoft.AspNetCore.Mvc.JsonResult.StatusCode.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Core) +~Microsoft.AspNetCore.Mvc.JsonResult.ContentType.get -> string (forwarded, contained in Microsoft.AspNetCore.Mvc.Core) +~Microsoft.AspNetCore.Mvc.JsonResult.ContentType.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Core) +~Microsoft.AspNetCore.Mvc.JsonResult.JsonResult(object value) -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Core) +~Microsoft.AspNetCore.Mvc.JsonResult.JsonResult(object value, object serializerSettings) -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Core) +~Microsoft.AspNetCore.Mvc.JsonResult.SerializerSettings.get -> object (forwarded, contained in Microsoft.AspNetCore.Mvc.Core) +~Microsoft.AspNetCore.Mvc.JsonResult.SerializerSettings.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Core) +~Microsoft.AspNetCore.Mvc.JsonResult.Value.get -> object (forwarded, contained in Microsoft.AspNetCore.Mvc.Core) +~Microsoft.AspNetCore.Mvc.JsonResult.Value.set -> void (forwarded, contained in Microsoft.AspNetCore.Mvc.Core) +~override Microsoft.AspNetCore.Mvc.JsonResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task (forwarded, contained in Microsoft.AspNetCore.Mvc.Core) diff --git a/src/Mvc/Mvc.Formatters.Xml/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.Formatters.Xml/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.Formatters.Xml/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.Formatters.Xml/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.Formatters.Xml/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..39ee932575 --- /dev/null +++ b/src/Mvc/Mvc.Formatters.Xml/src/PublicAPI.Unshipped.txt @@ -0,0 +1,137 @@ +#nullable enable +Microsoft.AspNetCore.Mvc.Formatters.Xml.DelegatingEnumerable +Microsoft.AspNetCore.Mvc.Formatters.Xml.DelegatingEnumerable.DelegatingEnumerable() -> void +Microsoft.AspNetCore.Mvc.Formatters.Xml.DelegatingEnumerator +Microsoft.AspNetCore.Mvc.Formatters.Xml.DelegatingEnumerator.Current.get -> TWrapped +Microsoft.AspNetCore.Mvc.Formatters.Xml.DelegatingEnumerator.Dispose() -> void +Microsoft.AspNetCore.Mvc.Formatters.Xml.DelegatingEnumerator.MoveNext() -> bool +Microsoft.AspNetCore.Mvc.Formatters.Xml.DelegatingEnumerator.Reset() -> void +Microsoft.AspNetCore.Mvc.Formatters.Xml.EnumerableWrapperProvider +Microsoft.AspNetCore.Mvc.Formatters.Xml.EnumerableWrapperProviderFactory +Microsoft.AspNetCore.Mvc.Formatters.Xml.IUnwrappable +Microsoft.AspNetCore.Mvc.Formatters.Xml.IWrapperProvider +Microsoft.AspNetCore.Mvc.Formatters.Xml.IWrapperProviderFactory +Microsoft.AspNetCore.Mvc.Formatters.Xml.MvcXmlOptions +Microsoft.AspNetCore.Mvc.Formatters.Xml.MvcXmlOptions.MvcXmlOptions() -> void +Microsoft.AspNetCore.Mvc.Formatters.Xml.ProblemDetailsWrapper +Microsoft.AspNetCore.Mvc.Formatters.Xml.ProblemDetailsWrapper.ProblemDetailsWrapper() -> void +Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapper +Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapper.SerializableErrorWrapper() -> void +Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapperProvider +Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapperProvider.SerializableErrorWrapperProvider() -> void +Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapperProviderFactory +Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapperProviderFactory.SerializableErrorWrapperProviderFactory() -> void +Microsoft.AspNetCore.Mvc.Formatters.Xml.ValidationProblemDetailsWrapper +Microsoft.AspNetCore.Mvc.Formatters.Xml.ValidationProblemDetailsWrapper.ValidationProblemDetailsWrapper() -> void +Microsoft.AspNetCore.Mvc.Formatters.Xml.WrapperProviderContext +Microsoft.AspNetCore.Mvc.Formatters.Xml.WrapperProviderContext.IsSerialization.get -> bool +Microsoft.AspNetCore.Mvc.Formatters.Xml.WrapperProviderFactoriesExtensions +Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter +Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.MaxDepth.get -> int +Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.MaxDepth.set -> void +Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter +Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.XmlDataContractSerializerOutputFormatter() -> void +Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter +Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter.MaxDepth.get -> int +Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter.MaxDepth.set -> void +Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter +Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.XmlSerializerOutputFormatter() -> void +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DataMemberRequiredBindingMetadataProvider +Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DataMemberRequiredBindingMetadataProvider.DataMemberRequiredBindingMetadataProvider() -> void +Microsoft.Extensions.DependencyInjection.MvcXmlMvcBuilderExtensions +Microsoft.Extensions.DependencyInjection.MvcXmlMvcCoreBuilderExtensions +virtual Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.ExceptionPolicy.get -> Microsoft.AspNetCore.Mvc.Formatters.InputFormatterExceptionPolicy +virtual Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter.ExceptionPolicy.get -> Microsoft.AspNetCore.Mvc.Formatters.InputFormatterExceptionPolicy +~Microsoft.AspNetCore.Mvc.Formatters.Xml.DelegatingEnumerable.Add(object item) -> void +~Microsoft.AspNetCore.Mvc.Formatters.Xml.DelegatingEnumerable.DelegatingEnumerable(System.Collections.Generic.IEnumerable source, Microsoft.AspNetCore.Mvc.Formatters.Xml.IWrapperProvider elementWrapperProvider) -> void +~Microsoft.AspNetCore.Mvc.Formatters.Xml.DelegatingEnumerable.GetEnumerator() -> System.Collections.Generic.IEnumerator +~Microsoft.AspNetCore.Mvc.Formatters.Xml.DelegatingEnumerator.DelegatingEnumerator(System.Collections.Generic.IEnumerator inner, Microsoft.AspNetCore.Mvc.Formatters.Xml.IWrapperProvider wrapperProvider) -> void +~Microsoft.AspNetCore.Mvc.Formatters.Xml.EnumerableWrapperProvider.EnumerableWrapperProvider(System.Type sourceEnumerableOfT, Microsoft.AspNetCore.Mvc.Formatters.Xml.IWrapperProvider elementWrapperProvider) -> void +~Microsoft.AspNetCore.Mvc.Formatters.Xml.EnumerableWrapperProvider.Wrap(object original) -> object +~Microsoft.AspNetCore.Mvc.Formatters.Xml.EnumerableWrapperProvider.WrappingType.get -> System.Type +~Microsoft.AspNetCore.Mvc.Formatters.Xml.EnumerableWrapperProviderFactory.EnumerableWrapperProviderFactory(System.Collections.Generic.IEnumerable wrapperProviderFactories) -> void +~Microsoft.AspNetCore.Mvc.Formatters.Xml.EnumerableWrapperProviderFactory.GetProvider(Microsoft.AspNetCore.Mvc.Formatters.Xml.WrapperProviderContext context) -> Microsoft.AspNetCore.Mvc.Formatters.Xml.IWrapperProvider +~Microsoft.AspNetCore.Mvc.Formatters.Xml.IUnwrappable.Unwrap(System.Type declaredType) -> object +~Microsoft.AspNetCore.Mvc.Formatters.Xml.IWrapperProvider.Wrap(object original) -> object +~Microsoft.AspNetCore.Mvc.Formatters.Xml.IWrapperProvider.WrappingType.get -> System.Type +~Microsoft.AspNetCore.Mvc.Formatters.Xml.IWrapperProviderFactory.GetProvider(Microsoft.AspNetCore.Mvc.Formatters.Xml.WrapperProviderContext context) -> Microsoft.AspNetCore.Mvc.Formatters.Xml.IWrapperProvider +~Microsoft.AspNetCore.Mvc.Formatters.Xml.ProblemDetailsWrapper.GetSchema() -> System.Xml.Schema.XmlSchema +~Microsoft.AspNetCore.Mvc.Formatters.Xml.ProblemDetailsWrapper.ProblemDetailsWrapper(Microsoft.AspNetCore.Mvc.ProblemDetails problemDetails) -> void +~Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapper.GetSchema() -> System.Xml.Schema.XmlSchema +~Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapper.ReadXml(System.Xml.XmlReader reader) -> void +~Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapper.SerializableError.get -> Microsoft.AspNetCore.Mvc.SerializableError +~Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapper.SerializableErrorWrapper(Microsoft.AspNetCore.Mvc.SerializableError error) -> void +~Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapper.Unwrap(System.Type declaredType) -> object +~Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapper.WriteXml(System.Xml.XmlWriter writer) -> void +~Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapperProvider.Wrap(object original) -> object +~Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapperProvider.WrappingType.get -> System.Type +~Microsoft.AspNetCore.Mvc.Formatters.Xml.SerializableErrorWrapperProviderFactory.GetProvider(Microsoft.AspNetCore.Mvc.Formatters.Xml.WrapperProviderContext context) -> Microsoft.AspNetCore.Mvc.Formatters.Xml.IWrapperProvider +~Microsoft.AspNetCore.Mvc.Formatters.Xml.ValidationProblemDetailsWrapper.ValidationProblemDetailsWrapper(Microsoft.AspNetCore.Mvc.ValidationProblemDetails problemDetails) -> void +~Microsoft.AspNetCore.Mvc.Formatters.Xml.WrapperProviderContext.DeclaredType.get -> System.Type +~Microsoft.AspNetCore.Mvc.Formatters.Xml.WrapperProviderContext.WrapperProviderContext(System.Type declaredType, bool isSerialization) -> void +~Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.SerializerSettings.get -> System.Runtime.Serialization.DataContractSerializerSettings +~Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.SerializerSettings.set -> void +~Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.WrapperProviderFactories.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.XmlDataContractSerializerInputFormatter(Microsoft.AspNetCore.Mvc.MvcOptions options) -> void +~Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.XmlDictionaryReaderQuotas.get -> System.Xml.XmlDictionaryReaderQuotas +~Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.SerializerSettings.get -> System.Runtime.Serialization.DataContractSerializerSettings +~Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.SerializerSettings.set -> void +~Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.WrapperProviderFactories.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.WriterSettings.get -> System.Xml.XmlWriterSettings +~Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.XmlDataContractSerializerOutputFormatter(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.XmlDataContractSerializerOutputFormatter(System.Xml.XmlWriterSettings writerSettings) -> void +~Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.XmlDataContractSerializerOutputFormatter(System.Xml.XmlWriterSettings writerSettings, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter.WrapperProviderFactories.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter.XmlDictionaryReaderQuotas.get -> System.Xml.XmlDictionaryReaderQuotas +~Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter.XmlSerializerInputFormatter(Microsoft.AspNetCore.Mvc.MvcOptions options) -> void +~Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.WrapperProviderFactories.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.WriterSettings.get -> System.Xml.XmlWriterSettings +~Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.XmlSerializerOutputFormatter(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.XmlSerializerOutputFormatter(System.Xml.XmlWriterSettings writerSettings) -> void +~Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.XmlSerializerOutputFormatter(System.Xml.XmlWriterSettings writerSettings, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DataMemberRequiredBindingMetadataProvider.CreateBindingMetadata(Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.BindingMetadataProviderContext context) -> void +~override Microsoft.AspNetCore.Mvc.Formatters.Xml.ValidationProblemDetailsWrapper.ReadValue(System.Xml.XmlReader reader, string name) -> void +~override Microsoft.AspNetCore.Mvc.Formatters.Xml.ValidationProblemDetailsWrapper.WriteXml(System.Xml.XmlWriter writer) -> void +~override Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.CanReadType(System.Type type) -> bool +~override Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.ReadRequestBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext context, System.Text.Encoding encoding) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.CanWriteType(System.Type type) -> bool +~override Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.WriteResponseBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context, System.Text.Encoding selectedEncoding) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter.CanReadType(System.Type type) -> bool +~override Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter.ReadRequestBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext context, System.Text.Encoding encoding) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.CanWriteType(System.Type type) -> bool +~override Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.WriteResponseBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context, System.Text.Encoding selectedEncoding) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.Formatters.Xml.WrapperProviderFactoriesExtensions.GetWrapperProvider(this System.Collections.Generic.IEnumerable wrapperProviderFactories, Microsoft.AspNetCore.Mvc.Formatters.Xml.WrapperProviderContext wrapperProviderContext) -> Microsoft.AspNetCore.Mvc.Formatters.Xml.IWrapperProvider +~static Microsoft.Extensions.DependencyInjection.MvcXmlMvcBuilderExtensions.AddXmlDataContractSerializerFormatters(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcXmlMvcBuilderExtensions.AddXmlDataContractSerializerFormatters(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcXmlMvcBuilderExtensions.AddXmlOptions(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcXmlMvcBuilderExtensions.AddXmlSerializerFormatters(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcXmlMvcBuilderExtensions.AddXmlSerializerFormatters(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcXmlMvcCoreBuilderExtensions.AddXmlDataContractSerializerFormatters(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcXmlMvcCoreBuilderExtensions.AddXmlDataContractSerializerFormatters(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcXmlMvcCoreBuilderExtensions.AddXmlOptions(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcXmlMvcCoreBuilderExtensions.AddXmlSerializerFormatters(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcXmlMvcCoreBuilderExtensions.AddXmlSerializerFormatters(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static readonly Microsoft.AspNetCore.Mvc.Formatters.Xml.ProblemDetailsWrapper.EmptyKey -> string +~virtual Microsoft.AspNetCore.Mvc.Formatters.Xml.ProblemDetailsWrapper.ReadValue(System.Xml.XmlReader reader, string name) -> void +~virtual Microsoft.AspNetCore.Mvc.Formatters.Xml.ProblemDetailsWrapper.ReadXml(System.Xml.XmlReader reader) -> void +~virtual Microsoft.AspNetCore.Mvc.Formatters.Xml.ProblemDetailsWrapper.WriteXml(System.Xml.XmlWriter writer) -> void +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.CreateSerializer(System.Type type) -> System.Runtime.Serialization.DataContractSerializer +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.CreateXmlReader(System.IO.Stream readStream, System.Text.Encoding encoding) -> System.Xml.XmlReader +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.GetCachedSerializer(System.Type type) -> System.Runtime.Serialization.DataContractSerializer +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter.GetSerializableType(System.Type declaredType) -> System.Type +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.CreateSerializer(System.Type type) -> System.Runtime.Serialization.DataContractSerializer +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.CreateXmlWriter(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context, System.IO.TextWriter writer, System.Xml.XmlWriterSettings xmlWriterSettings) -> System.Xml.XmlWriter +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.CreateXmlWriter(System.IO.TextWriter writer, System.Xml.XmlWriterSettings xmlWriterSettings) -> System.Xml.XmlWriter +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.GetCachedSerializer(System.Type type) -> System.Runtime.Serialization.DataContractSerializer +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerOutputFormatter.GetSerializableType(System.Type type) -> System.Type +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter.CreateSerializer(System.Type type) -> System.Xml.Serialization.XmlSerializer +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter.CreateXmlReader(System.IO.Stream readStream, System.Text.Encoding encoding) -> System.Xml.XmlReader +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter.CreateXmlReader(System.IO.Stream readStream, System.Text.Encoding encoding, System.Type type) -> System.Xml.XmlReader +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter.GetCachedSerializer(System.Type type) -> System.Xml.Serialization.XmlSerializer +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter.GetSerializableType(System.Type declaredType) -> System.Type +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.CreateSerializer(System.Type type) -> System.Xml.Serialization.XmlSerializer +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.CreateXmlWriter(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context, System.IO.TextWriter writer, System.Xml.XmlWriterSettings xmlWriterSettings) -> System.Xml.XmlWriter +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.CreateXmlWriter(System.IO.TextWriter writer, System.Xml.XmlWriterSettings xmlWriterSettings) -> System.Xml.XmlWriter +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.GetCachedSerializer(System.Type type) -> System.Xml.Serialization.XmlSerializer +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.GetSerializableType(System.Type type) -> System.Type +~virtual Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerOutputFormatter.Serialize(System.Xml.Serialization.XmlSerializer xmlSerializer, System.Xml.XmlWriter xmlWriter, object value) -> void diff --git a/src/Mvc/Mvc.Formatters.Xml/test/XmlDataContractSerializerInputFormatterTest.cs b/src/Mvc/Mvc.Formatters.Xml/test/XmlDataContractSerializerInputFormatterTest.cs index aff89dfc78..539d755837 100644 --- a/src/Mvc/Mvc.Formatters.Xml/test/XmlDataContractSerializerInputFormatterTest.cs +++ b/src/Mvc/Mvc.Formatters.Xml/test/XmlDataContractSerializerInputFormatterTest.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Buffers; using System.IO; using System.Linq; using System.Runtime.Serialization; @@ -182,8 +183,8 @@ namespace Microsoft.AspNetCore.Mvc.Formatters.Xml var contentBytes = Encoding.UTF8.GetBytes(input); var httpContext = new DefaultHttpContext(); - var testBufferedReadStream = new Mock(new MemoryStream(contentBytes), 1024) { CallBase = true }; - httpContext.Request.Body = testBufferedReadStream.Object; + var testBufferedReadStream = new VerifyDisposeFileBufferingReadStream(new MemoryStream(contentBytes), 1024); + httpContext.Request.Body = testBufferedReadStream; var context = GetInputFormatterContext(httpContext, typeof(TestLevelOne)); // Act @@ -196,8 +197,7 @@ namespace Microsoft.AspNetCore.Mvc.Formatters.Xml Assert.Equal(expectedInt, model.SampleInt); Assert.Equal(expectedString, model.sampleString); - - testBufferedReadStream.Verify(v => v.DisposeAsync(), Times.Never()); + Assert.False(testBufferedReadStream.Disposed); } [Fact] @@ -773,5 +773,25 @@ namespace Microsoft.AspNetCore.Mvc.Formatters.Xml // do not do anything } } + + private class VerifyDisposeFileBufferingReadStream : FileBufferingReadStream + { + public bool Disposed { get; private set; } + public VerifyDisposeFileBufferingReadStream(Stream inner, int memoryThreshold) : base(inner, memoryThreshold) + { + } + + protected override void Dispose(bool disposing) + { + Disposed = true; + base.Dispose(disposing); + } + + public override ValueTask DisposeAsync() + { + Disposed = true; + return base.DisposeAsync(); + } + } } } \ No newline at end of file diff --git a/src/Mvc/Mvc.Formatters.Xml/test/XmlSerializerInputFormatterTest.cs b/src/Mvc/Mvc.Formatters.Xml/test/XmlSerializerInputFormatterTest.cs index 366e1a8dbc..9b35c9f970 100644 --- a/src/Mvc/Mvc.Formatters.Xml/test/XmlSerializerInputFormatterTest.cs +++ b/src/Mvc/Mvc.Formatters.Xml/test/XmlSerializerInputFormatterTest.cs @@ -638,8 +638,8 @@ namespace Microsoft.AspNetCore.Mvc.Formatters.Xml var contentBytes = Encoding.UTF8.GetBytes(input); var httpContext = new DefaultHttpContext(); - var testBufferedReadStream = new Mock(new MemoryStream(contentBytes), 1024) { CallBase = true }; - httpContext.Request.Body = testBufferedReadStream.Object; + var testBufferedReadStream = new VerifyDisposeFileBufferingReadStream(new MemoryStream(contentBytes), 1024); + httpContext.Request.Body = testBufferedReadStream; var context = GetInputFormatterContext(httpContext, typeof(TestLevelOne)); // Act @@ -652,8 +652,7 @@ namespace Microsoft.AspNetCore.Mvc.Formatters.Xml Assert.Equal(expectedInt, model.SampleInt); Assert.Equal(expectedString, model.sampleString); - - testBufferedReadStream.Verify(v => v.DisposeAsync(), Times.Never()); + Assert.False(testBufferedReadStream.Disposed); } private InputFormatterContext GetInputFormatterContext(byte[] contentBytes, Type modelType) @@ -713,5 +712,25 @@ namespace Microsoft.AspNetCore.Mvc.Formatters.Xml // do not do anything } } + + private class VerifyDisposeFileBufferingReadStream : FileBufferingReadStream + { + public bool Disposed { get; private set; } + public VerifyDisposeFileBufferingReadStream(Stream inner, int memoryThreshold) : base(inner, memoryThreshold) + { + } + + protected override void Dispose(bool disposing) + { + Disposed = true; + base.Dispose(disposing); + } + + public override ValueTask DisposeAsync() + { + Disposed = true; + return base.DisposeAsync(); + } + } } } diff --git a/src/Mvc/Mvc.Localization/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.Localization/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.Localization/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.Localization/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.Localization/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..a6865a8160 --- /dev/null +++ b/src/Mvc/Mvc.Localization/src/PublicAPI.Unshipped.txt @@ -0,0 +1,78 @@ +#nullable enable +Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer +Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer +Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizerExtensions +Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizerFactory +Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer +Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer +Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizerFactory +Microsoft.AspNetCore.Mvc.Localization.IViewLocalizer +Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString +Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString.IsResourceNotFound.get -> bool +Microsoft.AspNetCore.Mvc.Localization.ViewLocalizer +Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcBuilderExtensions +Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcCoreBuilderExtensions +~Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.HtmlLocalizer(Microsoft.Extensions.Localization.IStringLocalizer localizer) -> void +~Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.HtmlLocalizer(Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizerFactory factory) -> void +~Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizerFactory.HtmlLocalizerFactory(Microsoft.Extensions.Localization.IStringLocalizerFactory localizerFactory) -> void +~Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer.GetAllStrings(bool includeParentCultures) -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer.GetString(string name) -> Microsoft.Extensions.Localization.LocalizedString +~Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer.GetString(string name, params object[] arguments) -> Microsoft.Extensions.Localization.LocalizedString +~Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer.this[string name, params object[] arguments].get -> Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString +~Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer.this[string name].get -> Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString +~Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizerFactory.Create(System.Type resourceSource) -> Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer +~Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizerFactory.Create(string baseName, string location) -> Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer +~Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString.LocalizedHtmlString(string name, string value) -> void +~Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString.LocalizedHtmlString(string name, string value, bool isResourceNotFound) -> void +~Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString.LocalizedHtmlString(string name, string value, bool isResourceNotFound, params object[] arguments) -> void +~Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString.Name.get -> string +~Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString.Value.get -> string +~Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString.WriteTo(System.IO.TextWriter writer, System.Text.Encodings.Web.HtmlEncoder encoder) -> void +~Microsoft.AspNetCore.Mvc.Localization.ViewLocalizer.Contextualize(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext) -> void +~Microsoft.AspNetCore.Mvc.Localization.ViewLocalizer.GetAllStrings(bool includeParentCultures) -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.Localization.ViewLocalizer.GetString(string name) -> Microsoft.Extensions.Localization.LocalizedString +~Microsoft.AspNetCore.Mvc.Localization.ViewLocalizer.GetString(string name, params object[] values) -> Microsoft.Extensions.Localization.LocalizedString +~Microsoft.AspNetCore.Mvc.Localization.ViewLocalizer.ViewLocalizer(Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizerFactory localizerFactory, Microsoft.AspNetCore.Hosting.IWebHostEnvironment hostingEnvironment) -> void +~static Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizerExtensions.GetAllStrings(this Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer htmlLocalizer) -> System.Collections.Generic.IEnumerable +~static Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizerExtensions.GetHtml(this Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer htmlLocalizer, string name) -> Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString +~static Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizerExtensions.GetHtml(this Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer htmlLocalizer, string name, params object[] arguments) -> Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat format) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat format, System.Action dataAnnotationsLocalizationOptionsSetupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action dataAnnotationsLocalizationOptionsSetupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action localizationOptionsSetupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action localizationOptionsSetupAction, Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat format) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action localizationOptionsSetupAction, Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat format, System.Action dataAnnotationsLocalizationOptionsSetupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action localizationOptionsSetupAction, System.Action dataAnnotationsLocalizationOptionsSetupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcBuilderExtensions.AddViewLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcBuilderExtensions.AddViewLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat format) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcBuilderExtensions.AddViewLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat format, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcBuilderExtensions.AddViewLocalization(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcCoreBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcCoreBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat format) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcCoreBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat format, System.Action dataAnnotationsLocalizationOptionsSetupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcCoreBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action dataAnnotationsLocalizationOptionsSetupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcCoreBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action localizationOptionsSetupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcCoreBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action localizationOptionsSetupAction, Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat format) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcCoreBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action localizationOptionsSetupAction, Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat format, System.Action dataAnnotationsLocalizationOptionsSetupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcCoreBuilderExtensions.AddMvcLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action localizationOptionsSetupAction, System.Action dataAnnotationsLocalizationOptionsSetupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcCoreBuilderExtensions.AddViewLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcCoreBuilderExtensions.AddViewLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat format) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcCoreBuilderExtensions.AddViewLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat format, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcLocalizationMvcCoreBuilderExtensions.AddViewLocalization(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.GetAllStrings(bool includeParentCultures) -> System.Collections.Generic.IEnumerable +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.GetString(string name) -> Microsoft.Extensions.Localization.LocalizedString +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.GetString(string name, params object[] arguments) -> Microsoft.Extensions.Localization.LocalizedString +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.ToHtmlString(Microsoft.Extensions.Localization.LocalizedString result) -> Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.ToHtmlString(Microsoft.Extensions.Localization.LocalizedString result, object[] arguments) -> Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.this[string name, params object[] arguments].get -> Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.this[string name].get -> Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.GetAllStrings(bool includeParentCultures) -> System.Collections.Generic.IEnumerable +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.GetString(string name) -> Microsoft.Extensions.Localization.LocalizedString +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.GetString(string name, params object[] arguments) -> Microsoft.Extensions.Localization.LocalizedString +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.this[string name, params object[] arguments].get -> Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizer.this[string name].get -> Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizerFactory.Create(System.Type resourceSource) -> Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer +~virtual Microsoft.AspNetCore.Mvc.Localization.HtmlLocalizerFactory.Create(string baseName, string location) -> Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer +~virtual Microsoft.AspNetCore.Mvc.Localization.ViewLocalizer.this[string key, params object[] arguments].get -> Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString +~virtual Microsoft.AspNetCore.Mvc.Localization.ViewLocalizer.this[string key].get -> Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString diff --git a/src/Mvc/Mvc.NewtonsoftJson/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.NewtonsoftJson/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.NewtonsoftJson/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.NewtonsoftJson/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.NewtonsoftJson/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..3b907d641b --- /dev/null +++ b/src/Mvc/Mvc.NewtonsoftJson/src/PublicAPI.Unshipped.txt @@ -0,0 +1,54 @@ +#nullable enable +Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonInputFormatter +Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonOutputFormatter +Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonPatchInputFormatter +Microsoft.AspNetCore.Mvc.JsonPatchExtensions +Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions +Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions.AllowInputFormatterExceptionMessages.get -> bool +Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions.AllowInputFormatterExceptionMessages.set -> void +Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions.InputFormatterMemoryBufferThreshold.get -> int +Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions.InputFormatterMemoryBufferThreshold.set -> void +Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions.MvcNewtonsoftJsonOptions() -> void +Microsoft.AspNetCore.Mvc.NewtonsoftJson.JsonSerializerSettingsProvider +Microsoft.AspNetCore.Mvc.NewtonsoftJson.ProblemDetailsConverter +Microsoft.AspNetCore.Mvc.NewtonsoftJson.ProblemDetailsConverter.ProblemDetailsConverter() -> void +Microsoft.AspNetCore.Mvc.NewtonsoftJson.ValidationProblemDetailsConverter +Microsoft.AspNetCore.Mvc.NewtonsoftJson.ValidationProblemDetailsConverter.ValidationProblemDetailsConverter() -> void +Microsoft.AspNetCore.Mvc.Rendering.JsonHelperExtensions +Microsoft.Extensions.DependencyInjection.MvcNewtonsoftJsonOptionsExtensions +Microsoft.Extensions.DependencyInjection.NewtonsoftJsonMvcBuilderExtensions +Microsoft.Extensions.DependencyInjection.NewtonsoftJsonMvcCoreBuilderExtensions +override Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonPatchInputFormatter.ExceptionPolicy.get -> Microsoft.AspNetCore.Mvc.Formatters.InputFormatterExceptionPolicy +virtual Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonInputFormatter.ExceptionPolicy.get -> Microsoft.AspNetCore.Mvc.Formatters.InputFormatterExceptionPolicy +~Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonInputFormatter.NewtonsoftJsonInputFormatter(Microsoft.Extensions.Logging.ILogger logger, Newtonsoft.Json.JsonSerializerSettings serializerSettings, System.Buffers.ArrayPool charPool, Microsoft.Extensions.ObjectPool.ObjectPoolProvider objectPoolProvider, Microsoft.AspNetCore.Mvc.MvcOptions options, Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions jsonOptions) -> void +~Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonInputFormatter.SerializerSettings.get -> Newtonsoft.Json.JsonSerializerSettings +~Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonOutputFormatter.NewtonsoftJsonOutputFormatter(Newtonsoft.Json.JsonSerializerSettings serializerSettings, System.Buffers.ArrayPool charPool, Microsoft.AspNetCore.Mvc.MvcOptions mvcOptions) -> void +~Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonOutputFormatter.SerializerSettings.get -> Newtonsoft.Json.JsonSerializerSettings +~Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonPatchInputFormatter.NewtonsoftJsonPatchInputFormatter(Microsoft.Extensions.Logging.ILogger logger, Newtonsoft.Json.JsonSerializerSettings serializerSettings, System.Buffers.ArrayPool charPool, Microsoft.Extensions.ObjectPool.ObjectPoolProvider objectPoolProvider, Microsoft.AspNetCore.Mvc.MvcOptions options, Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions jsonOptions) -> void +~Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions.SerializerSettings.get -> Newtonsoft.Json.JsonSerializerSettings +~override Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonInputFormatter.ReadRequestBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext context, System.Text.Encoding encoding) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonOutputFormatter.WriteResponseBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context, System.Text.Encoding selectedEncoding) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonPatchInputFormatter.CanRead(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext context) -> bool +~override Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonPatchInputFormatter.ReadRequestBodyAsync(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext context, System.Text.Encoding encoding) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.NewtonsoftJson.ProblemDetailsConverter.CanConvert(System.Type objectType) -> bool +~override Microsoft.AspNetCore.Mvc.NewtonsoftJson.ProblemDetailsConverter.ReadJson(Newtonsoft.Json.JsonReader reader, System.Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer) -> object +~override Microsoft.AspNetCore.Mvc.NewtonsoftJson.ProblemDetailsConverter.WriteJson(Newtonsoft.Json.JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer) -> void +~override Microsoft.AspNetCore.Mvc.NewtonsoftJson.ValidationProblemDetailsConverter.CanConvert(System.Type objectType) -> bool +~override Microsoft.AspNetCore.Mvc.NewtonsoftJson.ValidationProblemDetailsConverter.ReadJson(Newtonsoft.Json.JsonReader reader, System.Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer) -> object +~override Microsoft.AspNetCore.Mvc.NewtonsoftJson.ValidationProblemDetailsConverter.WriteJson(Newtonsoft.Json.JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer) -> void +~static Microsoft.AspNetCore.Mvc.JsonPatchExtensions.ApplyTo(this Microsoft.AspNetCore.JsonPatch.JsonPatchDocument patchDoc, T objectToApplyTo, Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) -> void +~static Microsoft.AspNetCore.Mvc.JsonPatchExtensions.ApplyTo(this Microsoft.AspNetCore.JsonPatch.JsonPatchDocument patchDoc, T objectToApplyTo, Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState, string prefix) -> void +~static Microsoft.AspNetCore.Mvc.NewtonsoftJson.JsonSerializerSettingsProvider.CreateSerializerSettings() -> Newtonsoft.Json.JsonSerializerSettings +~static Microsoft.AspNetCore.Mvc.Rendering.JsonHelperExtensions.Serialize(this Microsoft.AspNetCore.Mvc.Rendering.IJsonHelper jsonHelper, object value, Newtonsoft.Json.JsonSerializerSettings serializerSettings) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.Extensions.DependencyInjection.MvcNewtonsoftJsonOptionsExtensions.UseCamelCasing(this Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions options, bool processDictionaryKeys) -> Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions +~static Microsoft.Extensions.DependencyInjection.MvcNewtonsoftJsonOptionsExtensions.UseMemberCasing(this Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions options) -> Microsoft.AspNetCore.Mvc.MvcNewtonsoftJsonOptions +~static Microsoft.Extensions.DependencyInjection.NewtonsoftJsonMvcBuilderExtensions.AddNewtonsoftJson(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.NewtonsoftJsonMvcBuilderExtensions.AddNewtonsoftJson(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.NewtonsoftJsonMvcCoreBuilderExtensions.AddNewtonsoftJson(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.NewtonsoftJsonMvcCoreBuilderExtensions.AddNewtonsoftJson(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~virtual Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonInputFormatter.CreateJsonSerializer() -> Newtonsoft.Json.JsonSerializer +~virtual Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonInputFormatter.CreateJsonSerializer(Microsoft.AspNetCore.Mvc.Formatters.InputFormatterContext context) -> Newtonsoft.Json.JsonSerializer +~virtual Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonInputFormatter.ReleaseJsonSerializer(Newtonsoft.Json.JsonSerializer serializer) -> void +~virtual Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonOutputFormatter.CreateJsonSerializer() -> Newtonsoft.Json.JsonSerializer +~virtual Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonOutputFormatter.CreateJsonSerializer(Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterWriteContext context) -> Newtonsoft.Json.JsonSerializer +~virtual Microsoft.AspNetCore.Mvc.Formatters.NewtonsoftJsonOutputFormatter.CreateJsonWriter(System.IO.TextWriter writer) -> Newtonsoft.Json.JsonWriter diff --git a/src/Mvc/Mvc.Razor.RuntimeCompilation/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.Razor.RuntimeCompilation/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.Razor.RuntimeCompilation/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.Razor.RuntimeCompilation/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.Razor.RuntimeCompilation/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..8fa91b1af0 --- /dev/null +++ b/src/Mvc/Mvc.Razor.RuntimeCompilation/src/PublicAPI.Unshipped.txt @@ -0,0 +1,24 @@ +#nullable enable +Microsoft.AspNetCore.Mvc.ApplicationParts.AssemblyPartExtensions +Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.FileProviderRazorProjectItem +Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.MvcRazorRuntimeCompilationOptions +Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.MvcRazorRuntimeCompilationOptions.MvcRazorRuntimeCompilationOptions() -> void +Microsoft.Extensions.DependencyInjection.RazorRuntimeCompilationMvcBuilderExtensions +Microsoft.Extensions.DependencyInjection.RazorRuntimeCompilationMvcCoreBuilderExtensions +override Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.FileProviderRazorProjectItem.Exists.get -> bool +~Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.FileProviderRazorProjectItem.FileInfo.get -> Microsoft.Extensions.FileProviders.IFileInfo +~Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.FileProviderRazorProjectItem.FileProviderRazorProjectItem(Microsoft.Extensions.FileProviders.IFileInfo fileInfo, string basePath, string filePath, string root) -> void +~Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.FileProviderRazorProjectItem.FileProviderRazorProjectItem(Microsoft.Extensions.FileProviders.IFileInfo fileInfo, string basePath, string filePath, string root, string fileKind) -> void +~Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.MvcRazorRuntimeCompilationOptions.AdditionalReferencePaths.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.MvcRazorRuntimeCompilationOptions.FileProviders.get -> System.Collections.Generic.IList +~override Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.FileProviderRazorProjectItem.BasePath.get -> string +~override Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.FileProviderRazorProjectItem.FileKind.get -> string +~override Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.FileProviderRazorProjectItem.FilePath.get -> string +~override Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.FileProviderRazorProjectItem.PhysicalPath.get -> string +~override Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.FileProviderRazorProjectItem.Read() -> System.IO.Stream +~override Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.FileProviderRazorProjectItem.RelativePhysicalPath.get -> string +~static Microsoft.AspNetCore.Mvc.ApplicationParts.AssemblyPartExtensions.GetReferencePaths(this Microsoft.AspNetCore.Mvc.ApplicationParts.AssemblyPart assemblyPart) -> System.Collections.Generic.IEnumerable +~static Microsoft.Extensions.DependencyInjection.RazorRuntimeCompilationMvcBuilderExtensions.AddRazorRuntimeCompilation(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.RazorRuntimeCompilationMvcBuilderExtensions.AddRazorRuntimeCompilation(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.RazorRuntimeCompilationMvcCoreBuilderExtensions.AddRazorRuntimeCompilation(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.RazorRuntimeCompilationMvcCoreBuilderExtensions.AddRazorRuntimeCompilation(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder diff --git a/src/Mvc/Mvc.Razor/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.Razor/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.Razor/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.Razor/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.Razor/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..a4f908eacd --- /dev/null +++ b/src/Mvc/Mvc.Razor/src/PublicAPI.Unshipped.txt @@ -0,0 +1,264 @@ +#nullable enable +Microsoft.AspNetCore.Mvc.ApplicationParts.CompiledRazorAssemblyApplicationPartFactory +Microsoft.AspNetCore.Mvc.ApplicationParts.CompiledRazorAssemblyApplicationPartFactory.CompiledRazorAssemblyApplicationPartFactory() -> void +Microsoft.AspNetCore.Mvc.ApplicationParts.CompiledRazorAssemblyPart +Microsoft.AspNetCore.Mvc.ApplicationParts.IRazorCompiledItemProvider +Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewPageEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewPageEventData +Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor +Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor.CompiledViewDescriptor() -> void +Microsoft.AspNetCore.Mvc.Razor.Compilation.IViewCompiler +Microsoft.AspNetCore.Mvc.Razor.Compilation.IViewCompilerProvider +Microsoft.AspNetCore.Mvc.Razor.Compilation.RazorViewAttribute +Microsoft.AspNetCore.Mvc.Razor.Compilation.ViewsFeature +Microsoft.AspNetCore.Mvc.Razor.Compilation.ViewsFeature.ViewsFeature() -> void +Microsoft.AspNetCore.Mvc.Razor.HelperResult +Microsoft.AspNetCore.Mvc.Razor.IRazorPage +Microsoft.AspNetCore.Mvc.Razor.IRazorPage.EnsureRenderedBodyOrSections() -> void +Microsoft.AspNetCore.Mvc.Razor.IRazorPage.IsLayoutBeingRendered.get -> bool +Microsoft.AspNetCore.Mvc.Razor.IRazorPage.IsLayoutBeingRendered.set -> void +Microsoft.AspNetCore.Mvc.Razor.IRazorPageActivator +Microsoft.AspNetCore.Mvc.Razor.IRazorPageFactoryProvider +Microsoft.AspNetCore.Mvc.Razor.IRazorViewEngine +Microsoft.AspNetCore.Mvc.Razor.ITagHelperActivator +Microsoft.AspNetCore.Mvc.Razor.ITagHelperFactory +Microsoft.AspNetCore.Mvc.Razor.IViewLocationExpander +Microsoft.AspNetCore.Mvc.Razor.Infrastructure.TagHelperMemoryCacheProvider +Microsoft.AspNetCore.Mvc.Razor.Infrastructure.TagHelperMemoryCacheProvider.TagHelperMemoryCacheProvider() -> void +Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute +Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute.RazorInjectAttribute() -> void +Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpander +Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpander.LanguageViewLocationExpander() -> void +Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpander.LanguageViewLocationExpander(Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat format) -> void +Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat +Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat.SubFolder = 0 -> Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat +Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat.Suffix = 1 -> Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat +Microsoft.AspNetCore.Mvc.Razor.RazorPage +Microsoft.AspNetCore.Mvc.Razor.RazorPage.IgnoreBody() -> void +Microsoft.AspNetCore.Mvc.Razor.RazorPage.RazorPage() -> void +Microsoft.AspNetCore.Mvc.Razor.RazorPage +Microsoft.AspNetCore.Mvc.Razor.RazorPage.Model.get -> TModel +Microsoft.AspNetCore.Mvc.Razor.RazorPage.RazorPage() -> void +Microsoft.AspNetCore.Mvc.Razor.RazorPageActivator +Microsoft.AspNetCore.Mvc.Razor.RazorPageBase +Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.BeginWriteTagHelperAttribute() -> void +Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.IsLayoutBeingRendered.get -> bool +Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.IsLayoutBeingRendered.set -> void +Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.RazorPageBase() -> void +Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.ViewBag.get -> dynamic +Microsoft.AspNetCore.Mvc.Razor.RazorPageFactoryResult +Microsoft.AspNetCore.Mvc.Razor.RazorPageFactoryResult.Success.get -> bool +Microsoft.AspNetCore.Mvc.Razor.RazorPageResult +Microsoft.AspNetCore.Mvc.Razor.RazorView +Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine +Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions +Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions.RazorViewEngineOptions() -> void +Microsoft.AspNetCore.Mvc.Razor.RenderAsyncDelegate +Microsoft.AspNetCore.Mvc.Razor.TagHelpers.BodyTagHelper +Microsoft.AspNetCore.Mvc.Razor.TagHelpers.HeadTagHelper +Microsoft.AspNetCore.Mvc.Razor.TagHelpers.ITagHelperComponentManager +Microsoft.AspNetCore.Mvc.Razor.TagHelpers.ITagHelperComponentPropertyActivator +Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperComponentTagHelper +Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperFeature +Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperFeature.TagHelperFeature() -> void +Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperFeatureProvider +Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperFeatureProvider.TagHelperFeatureProvider() -> void +Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper +Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext +Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext.IsMainPage.get -> bool +Microsoft.Extensions.DependencyInjection.MvcRazorMvcBuilderExtensions +Microsoft.Extensions.DependencyInjection.MvcRazorMvcCoreBuilderExtensions +abstract Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.BeginContext(int position, int length, bool isLiteral) -> void +abstract Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.EndContext() -> void +abstract Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.EnsureRenderedBodyOrSections() -> void +override Microsoft.AspNetCore.Mvc.Razor.RazorPage.BeginContext(int position, int length, bool isLiteral) -> void +override Microsoft.AspNetCore.Mvc.Razor.RazorPage.EndContext() -> void +override Microsoft.AspNetCore.Mvc.Razor.RazorPage.EnsureRenderedBodyOrSections() -> void +override Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper.Order.get -> int +virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.EndWriteAttribute() -> void +~Microsoft.AspNetCore.Mvc.ApplicationParts.CompiledRazorAssemblyPart.Assembly.get -> System.Reflection.Assembly +~Microsoft.AspNetCore.Mvc.ApplicationParts.CompiledRazorAssemblyPart.CompiledRazorAssemblyPart(System.Reflection.Assembly assembly) -> void +~Microsoft.AspNetCore.Mvc.ApplicationParts.IRazorCompiledItemProvider.CompiledItems.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewPageEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewPageEventData.AfterViewPageEventData(Microsoft.AspNetCore.Mvc.Razor.IRazorPage page, Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Http.HttpContext httpContext) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewPageEventData.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewPageEventData.Page.get -> Microsoft.AspNetCore.Mvc.Razor.IRazorPage +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewPageEventData.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewPageEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewPageEventData.BeforeViewPageEventData(Microsoft.AspNetCore.Mvc.Razor.IRazorPage page, Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Http.HttpContext httpContext) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewPageEventData.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewPageEventData.Page.get -> Microsoft.AspNetCore.Mvc.Razor.IRazorPage +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewPageEventData.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor.CompiledViewDescriptor(Microsoft.AspNetCore.Razor.Hosting.RazorCompiledItem item) -> void +~Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor.CompiledViewDescriptor(Microsoft.AspNetCore.Razor.Hosting.RazorCompiledItem item, Microsoft.AspNetCore.Mvc.Razor.Compilation.RazorViewAttribute attribute) -> void +~Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor.ExpirationTokens.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor.ExpirationTokens.set -> void +~Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor.Item.get -> Microsoft.AspNetCore.Razor.Hosting.RazorCompiledItem +~Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor.Item.set -> void +~Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor.RelativePath.get -> string +~Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor.RelativePath.set -> void +~Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor.Type.get -> System.Type +~Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor.ViewAttribute.get -> Microsoft.AspNetCore.Mvc.Razor.Compilation.RazorViewAttribute +~Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor.ViewAttribute.set -> void +~Microsoft.AspNetCore.Mvc.Razor.Compilation.IViewCompiler.CompileAsync(string relativePath) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.Razor.Compilation.IViewCompilerProvider.GetCompiler() -> Microsoft.AspNetCore.Mvc.Razor.Compilation.IViewCompiler +~Microsoft.AspNetCore.Mvc.Razor.Compilation.RazorViewAttribute.Path.get -> string +~Microsoft.AspNetCore.Mvc.Razor.Compilation.RazorViewAttribute.RazorViewAttribute(string path, System.Type viewType) -> void +~Microsoft.AspNetCore.Mvc.Razor.Compilation.RazorViewAttribute.ViewType.get -> System.Type +~Microsoft.AspNetCore.Mvc.Razor.Compilation.ViewsFeature.ViewDescriptors.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Razor.HelperResult.HelperResult(System.Func asyncAction) -> void +~Microsoft.AspNetCore.Mvc.Razor.HelperResult.WriteAction.get -> System.Func +~Microsoft.AspNetCore.Mvc.Razor.IRazorPage.BodyContent.get -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Razor.IRazorPage.BodyContent.set -> void +~Microsoft.AspNetCore.Mvc.Razor.IRazorPage.ExecuteAsync() -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.Razor.IRazorPage.Layout.get -> string +~Microsoft.AspNetCore.Mvc.Razor.IRazorPage.Layout.set -> void +~Microsoft.AspNetCore.Mvc.Razor.IRazorPage.Path.get -> string +~Microsoft.AspNetCore.Mvc.Razor.IRazorPage.Path.set -> void +~Microsoft.AspNetCore.Mvc.Razor.IRazorPage.PreviousSectionWriters.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.Razor.IRazorPage.PreviousSectionWriters.set -> void +~Microsoft.AspNetCore.Mvc.Razor.IRazorPage.SectionWriters.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.Razor.IRazorPage.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.Razor.IRazorPage.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.Razor.IRazorPageActivator.Activate(Microsoft.AspNetCore.Mvc.Razor.IRazorPage page, Microsoft.AspNetCore.Mvc.Rendering.ViewContext context) -> void +~Microsoft.AspNetCore.Mvc.Razor.IRazorPageFactoryProvider.CreateFactory(string relativePath) -> Microsoft.AspNetCore.Mvc.Razor.RazorPageFactoryResult +~Microsoft.AspNetCore.Mvc.Razor.IRazorViewEngine.FindPage(Microsoft.AspNetCore.Mvc.ActionContext context, string pageName) -> Microsoft.AspNetCore.Mvc.Razor.RazorPageResult +~Microsoft.AspNetCore.Mvc.Razor.IRazorViewEngine.GetAbsolutePath(string executingFilePath, string pagePath) -> string +~Microsoft.AspNetCore.Mvc.Razor.IRazorViewEngine.GetPage(string executingFilePath, string pagePath) -> Microsoft.AspNetCore.Mvc.Razor.RazorPageResult +~Microsoft.AspNetCore.Mvc.Razor.ITagHelperActivator.Create(Microsoft.AspNetCore.Mvc.Rendering.ViewContext context) -> TTagHelper +~Microsoft.AspNetCore.Mvc.Razor.ITagHelperFactory.CreateTagHelper(Microsoft.AspNetCore.Mvc.Rendering.ViewContext context) -> TTagHelper +~Microsoft.AspNetCore.Mvc.Razor.ITagHelperInitializer +~Microsoft.AspNetCore.Mvc.Razor.ITagHelperInitializer.Initialize(TTagHelper helper, Microsoft.AspNetCore.Mvc.Rendering.ViewContext context) -> void +~Microsoft.AspNetCore.Mvc.Razor.IViewLocationExpander.ExpandViewLocations(Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext context, System.Collections.Generic.IEnumerable viewLocations) -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.Razor.IViewLocationExpander.PopulateValues(Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext context) -> void +~Microsoft.AspNetCore.Mvc.Razor.Infrastructure.TagHelperMemoryCacheProvider.Cache.get -> Microsoft.Extensions.Caching.Memory.IMemoryCache +~Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpander.PopulateValues(Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext context) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPage.Context.get -> Microsoft.AspNetCore.Http.HttpContext +~Microsoft.AspNetCore.Mvc.Razor.RazorPage.IgnoreSection(string sectionName) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPage.IsSectionDefined(string name) -> bool +~Microsoft.AspNetCore.Mvc.Razor.RazorPage.RenderSection(string name) -> Microsoft.AspNetCore.Html.HtmlString +~Microsoft.AspNetCore.Mvc.Razor.RazorPage.RenderSection(string name, bool required) -> Microsoft.AspNetCore.Html.HtmlString +~Microsoft.AspNetCore.Mvc.Razor.RazorPage.RenderSectionAsync(string name) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.Razor.RazorPage.RenderSectionAsync(string name, bool required) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.Razor.RazorPage.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.Razor.RazorPage.ViewData.set -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageActivator.Activate(Microsoft.AspNetCore.Mvc.Razor.IRazorPage page, Microsoft.AspNetCore.Mvc.Rendering.ViewContext context) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageActivator.RazorPageActivator(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory urlHelperFactory, Microsoft.AspNetCore.Mvc.Rendering.IJsonHelper jsonHelper, System.Diagnostics.DiagnosticSource diagnosticSource, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, Microsoft.AspNetCore.Mvc.ViewFeatures.IModelExpressionProvider modelExpressionProvider) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.AddHtmlAttributeValue(string prefix, int prefixOffset, object value, int valueOffset, int valueLength, bool isLiteral) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.BeginAddHtmlAttributeValues(Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperExecutionContext executionContext, string attributeName, int attributeValuesCount, Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle attributeValueStyle) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.BodyContent.get -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.BodyContent.set -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.CreateTagHelper() -> TTagHelper +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.DefineSection(string name, System.Func section) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.DiagnosticSource.get -> System.Diagnostics.DiagnosticSource +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.DiagnosticSource.set -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.EndAddHtmlAttributeValues(Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperExecutionContext executionContext) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.EndTagHelperWritingScope() -> Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContent +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.EndWriteTagHelperAttribute() -> string +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.HtmlEncoder.get -> System.Text.Encodings.Web.HtmlEncoder +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.HtmlEncoder.set -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.InvalidTagHelperIndexerAssignment(string attributeName, string tagHelperTypeName, string propertyName) -> string +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.Layout.get -> string +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.Layout.set -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.Path.get -> string +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.Path.set -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.PreviousSectionWriters.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.PreviousSectionWriters.set -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.SectionWriters.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.StartTagHelperWritingScope(System.Text.Encodings.Web.HtmlEncoder encoder) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.TempData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.WriteAttributeValue(string prefix, int prefixOffset, object value, int valueOffset, int valueLength, bool isLiteral) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageFactoryResult.RazorPageFactory.get -> System.Func +~Microsoft.AspNetCore.Mvc.Razor.RazorPageFactoryResult.RazorPageFactoryResult(Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor viewDescriptor, System.Func razorPageFactory) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageFactoryResult.ViewDescriptor.get -> Microsoft.AspNetCore.Mvc.Razor.Compilation.CompiledViewDescriptor +~Microsoft.AspNetCore.Mvc.Razor.RazorPageResult.Name.get -> string +~Microsoft.AspNetCore.Mvc.Razor.RazorPageResult.Page.get -> Microsoft.AspNetCore.Mvc.Razor.IRazorPage +~Microsoft.AspNetCore.Mvc.Razor.RazorPageResult.RazorPageResult(string name, Microsoft.AspNetCore.Mvc.Razor.IRazorPage page) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageResult.RazorPageResult(string name, System.Collections.Generic.IEnumerable searchedLocations) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorPageResult.SearchedLocations.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.Razor.RazorView.Path.get -> string +~Microsoft.AspNetCore.Mvc.Razor.RazorView.RazorPage.get -> Microsoft.AspNetCore.Mvc.Razor.IRazorPage +~Microsoft.AspNetCore.Mvc.Razor.RazorView.RazorView(Microsoft.AspNetCore.Mvc.Razor.IRazorViewEngine viewEngine, Microsoft.AspNetCore.Mvc.Razor.IRazorPageActivator pageActivator, System.Collections.Generic.IReadOnlyList viewStartPages, Microsoft.AspNetCore.Mvc.Razor.IRazorPage razorPage, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, System.Diagnostics.DiagnosticListener diagnosticListener) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorView.ViewStartPages.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.FindPage(Microsoft.AspNetCore.Mvc.ActionContext context, string pageName) -> Microsoft.AspNetCore.Mvc.Razor.RazorPageResult +~Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.FindView(Microsoft.AspNetCore.Mvc.ActionContext context, string viewName, bool isMainPage) -> Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult +~Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.GetAbsolutePath(string executingFilePath, string pagePath) -> string +~Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.GetPage(string executingFilePath, string pagePath) -> Microsoft.AspNetCore.Mvc.Razor.RazorPageResult +~Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.GetView(string executingFilePath, string viewPath, bool isMainPage) -> Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult +~Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.RazorViewEngine(Microsoft.AspNetCore.Mvc.Razor.IRazorPageFactoryProvider pageFactory, Microsoft.AspNetCore.Mvc.Razor.IRazorPageActivator pageActivator, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, Microsoft.Extensions.Options.IOptions optionsAccessor, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, System.Diagnostics.DiagnosticListener diagnosticListener) -> void +~Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.ViewLookupCache.get -> Microsoft.Extensions.Caching.Memory.IMemoryCache +~Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions.AreaPageViewLocationFormats.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions.AreaViewLocationFormats.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions.PageViewLocationFormats.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions.ViewLocationExpanders.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions.ViewLocationFormats.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Razor.TagHelperInitializer +~Microsoft.AspNetCore.Mvc.Razor.TagHelperInitializer.Initialize(TTagHelper helper, Microsoft.AspNetCore.Mvc.Rendering.ViewContext context) -> void +~Microsoft.AspNetCore.Mvc.Razor.TagHelperInitializer.TagHelperInitializer(System.Action action) -> void +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.BodyTagHelper.BodyTagHelper(Microsoft.AspNetCore.Mvc.Razor.TagHelpers.ITagHelperComponentManager manager, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.HeadTagHelper.HeadTagHelper(Microsoft.AspNetCore.Mvc.Razor.TagHelpers.ITagHelperComponentManager manager, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.ITagHelperComponentManager.Components.get -> System.Collections.Generic.ICollection +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.ITagHelperComponentPropertyActivator.Activate(Microsoft.AspNetCore.Mvc.Rendering.ViewContext context, Microsoft.AspNetCore.Razor.TagHelpers.ITagHelperComponent tagHelperComponent) -> void +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperComponentTagHelper.PropertyActivator.get -> Microsoft.AspNetCore.Mvc.Razor.TagHelpers.ITagHelperComponentPropertyActivator +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperComponentTagHelper.PropertyActivator.set -> void +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperComponentTagHelper.TagHelperComponentTagHelper(Microsoft.AspNetCore.Mvc.Razor.TagHelpers.ITagHelperComponentManager manager, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperComponentTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperComponentTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperFeature.TagHelpers.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperFeatureProvider.PopulateFeature(System.Collections.Generic.IEnumerable parts, Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperFeature feature) -> void +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper.HtmlEncoder.get -> System.Text.Encodings.Web.HtmlEncoder +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper.ProcessUrlAttribute(string attributeName, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> void +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper.TryResolveUrl(string url, out Microsoft.AspNetCore.Html.IHtmlContent resolvedUrl) -> bool +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper.TryResolveUrl(string url, out string resolvedUrl) -> bool +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper.UrlHelperFactory.get -> Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper.UrlResolutionTagHelper(Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory urlHelperFactory, System.Text.Encodings.Web.HtmlEncoder htmlEncoder) -> void +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext +~Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext.AreaName.get -> string +~Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext.ControllerName.get -> string +~Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext.PageName.get -> string +~Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext.Values.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext.Values.set -> void +~Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext.ViewLocationExpanderContext(Microsoft.AspNetCore.Mvc.ActionContext actionContext, string viewName, string controllerName, string areaName, string pageName, bool isMainPage) -> void +~Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext.ViewName.get -> string +~abstract Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.ExecuteAsync() -> System.Threading.Tasks.Task +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewPageEventData.EventName = "Microsoft.AspNetCore.Mvc.Razor.AfterViewPage" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewPageEventData.EventName = "Microsoft.AspNetCore.Mvc.Razor.BeforeViewPage" -> string +~override Microsoft.AspNetCore.Mvc.ApplicationParts.CompiledRazorAssemblyApplicationPartFactory.GetApplicationParts(System.Reflection.Assembly assembly) -> System.Collections.Generic.IEnumerable +~override Microsoft.AspNetCore.Mvc.ApplicationParts.CompiledRazorAssemblyPart.Name.get -> string +~override Microsoft.AspNetCore.Mvc.Razor.RazorPage.DefineSection(string name, Microsoft.AspNetCore.Mvc.Razor.RenderAsyncDelegate section) -> void +~override Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperComponentTagHelper.Init(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context) -> void +~override Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperComponentTagHelper.ProcessAsync(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper.Process(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> void +~static Microsoft.AspNetCore.Mvc.ApplicationParts.CompiledRazorAssemblyApplicationPartFactory.GetDefaultApplicationParts(System.Reflection.Assembly assembly) -> System.Collections.Generic.IEnumerable +~static Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.GetNormalizedRouteValue(Microsoft.AspNetCore.Mvc.ActionContext context, string key) -> string +~static Microsoft.Extensions.DependencyInjection.MvcRazorMvcBuilderExtensions.AddRazorOptions(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcRazorMvcBuilderExtensions.AddTagHelpersAsServices(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcRazorMvcBuilderExtensions.InitializeTagHelper(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action initialize) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcRazorMvcCoreBuilderExtensions.AddRazorViewEngine(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcRazorMvcCoreBuilderExtensions.AddRazorViewEngine(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcRazorMvcCoreBuilderExtensions.AddTagHelpersAsServices(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcRazorMvcCoreBuilderExtensions.InitializeTagHelper(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action initialize) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static readonly Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.ViewExtension -> string +~virtual Microsoft.AspNetCore.Mvc.Razor.HelperResult.WriteTo(System.IO.TextWriter writer, System.Text.Encodings.Web.HtmlEncoder encoder) -> void +~virtual Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpander.ExpandViewLocations(Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext context, System.Collections.Generic.IEnumerable viewLocations) -> System.Collections.Generic.IEnumerable +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPage.RenderBody() -> Microsoft.AspNetCore.Html.IHtmlContent +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.BeginWriteAttribute(string name, string prefix, int prefixOffset, string suffix, int suffixOffset, int attributeValuesCount) -> void +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.DefineSection(string name, Microsoft.AspNetCore.Mvc.Razor.RenderAsyncDelegate section) -> void +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.FlushAsync() -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.Href(string contentPath) -> string +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.Output.get -> System.IO.TextWriter +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.PopWriter() -> System.IO.TextWriter +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.PushWriter(System.IO.TextWriter writer) -> void +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.SetAntiforgeryCookieAndHeader() -> Microsoft.AspNetCore.Html.HtmlString +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.User.get -> System.Security.Claims.ClaimsPrincipal +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.ViewContext.set -> void +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.Write(object value) -> void +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.Write(string value) -> void +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.WriteLiteral(object value) -> void +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorPageBase.WriteLiteral(string value) -> void +~virtual Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderAsync(Microsoft.AspNetCore.Mvc.Rendering.ViewContext context) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperFeatureProvider.IncludePart(Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPart part) -> bool +~virtual Microsoft.AspNetCore.Mvc.Razor.TagHelpers.TagHelperFeatureProvider.IncludeType(System.Reflection.TypeInfo type) -> bool diff --git a/src/Mvc/Mvc.RazorPages/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.RazorPages/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.RazorPages/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.RazorPages/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.RazorPages/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..77ee76129d --- /dev/null +++ b/src/Mvc/Mvc.RazorPages/src/PublicAPI.Unshipped.txt @@ -0,0 +1,638 @@ +#nullable enable +Microsoft.AspNetCore.Builder.PageActionEndpointConventionBuilder +Microsoft.AspNetCore.Builder.RazorPagesEndpointRouteBuilderExtensions +Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelPartsProvider +Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelProvider +Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelProvider.Order.get -> int +Microsoft.AspNetCore.Mvc.ApplicationModels.IPageConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.IPageHandlerModelConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.IPageRouteModelConvention +Microsoft.AspNetCore.Mvc.ApplicationModels.IPageRouteModelProvider +Microsoft.AspNetCore.Mvc.ApplicationModels.IPageRouteModelProvider.Order.get -> int +Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel +Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModelProviderContext +Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection.PageConventionCollection() -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel +Microsoft.AspNetCore.Mvc.ApplicationModels.PageParameterModel +Microsoft.AspNetCore.Mvc.ApplicationModels.PagePropertyModel +Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteMetadata +Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel +Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModelProviderContext +Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModelProviderContext.PageRouteModelProviderContext() -> void +Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteTransformerConvention +Microsoft.AspNetCore.Mvc.Diagnostics.AfterHandlerMethodEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutedEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutingEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutionEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerSelectedEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerSelectionEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeHandlerMethodEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutedEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutingEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutionEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerSelectedEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerSelectionEventData +Microsoft.AspNetCore.Mvc.Filters.IAsyncPageFilter +Microsoft.AspNetCore.Mvc.Filters.IPageFilter +Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext +Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext +Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutionDelegate +Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext +Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.CompiledPageActionDescriptor() -> void +Microsoft.AspNetCore.Mvc.RazorPages.IPageActivatorProvider +Microsoft.AspNetCore.Mvc.RazorPages.IPageFactoryProvider +Microsoft.AspNetCore.Mvc.RazorPages.IPageModelActivatorProvider +Microsoft.AspNetCore.Mvc.RazorPages.IPageModelFactoryProvider +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor.HandlerMethodDescriptor() -> void +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerParameterDescriptor +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerParameterDescriptor.HandlerParameterDescriptor() -> void +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.IPageHandlerMethodSelector +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.IPageLoader +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionDescriptorProvider +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionDescriptorProvider.Order.get -> int +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionDescriptorProvider.Order.set -> void +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageBoundPropertyDescriptor +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageBoundPropertyDescriptor.PageBoundPropertyDescriptor() -> void +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageLoader +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageLoader.PageLoader() -> void +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageModelAttribute +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageModelAttribute.PageModelAttribute() -> void +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageResultExecutor +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageViewLocationExpander +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageViewLocationExpander.PageViewLocationExpander() -> void +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.EnsureRenderedBodyOrSections() -> void +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.IsLayoutBeingRendered.get -> bool +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.IsLayoutBeingRendered.set -> void +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAttribute +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.ServiceBasedPageModelActivatorProvider +Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.ServiceBasedPageModelActivatorProvider.ServiceBasedPageModelActivatorProvider() -> void +Microsoft.AspNetCore.Mvc.RazorPages.NonHandlerAttribute +Microsoft.AspNetCore.Mvc.RazorPages.NonHandlerAttribute.NonHandlerAttribute() -> void +Microsoft.AspNetCore.Mvc.RazorPages.Page +Microsoft.AspNetCore.Mvc.RazorPages.Page.Page() -> void +Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor +Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor.PageActionDescriptor() -> void +Microsoft.AspNetCore.Mvc.RazorPages.PageBase +Microsoft.AspNetCore.Mvc.RazorPages.PageBase.PageBase() -> void +Microsoft.AspNetCore.Mvc.RazorPages.PageContext +Microsoft.AspNetCore.Mvc.RazorPages.PageContext.PageContext() -> void +Microsoft.AspNetCore.Mvc.RazorPages.PageContextAttribute +Microsoft.AspNetCore.Mvc.RazorPages.PageContextAttribute.PageContextAttribute() -> void +Microsoft.AspNetCore.Mvc.RazorPages.PageModel +Microsoft.AspNetCore.Mvc.RazorPages.PageModel.PageModel() -> void +Microsoft.AspNetCore.Mvc.RazorPages.PageResult +Microsoft.AspNetCore.Mvc.RazorPages.PageResult.PageResult() -> void +Microsoft.AspNetCore.Mvc.RazorPages.PageResult.StatusCode.get -> int? +Microsoft.AspNetCore.Mvc.RazorPages.PageResult.StatusCode.set -> void +Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions +Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions.RazorPagesOptions() -> void +Microsoft.Extensions.DependencyInjection.MvcRazorPagesMvcBuilderExtensions +Microsoft.Extensions.DependencyInjection.MvcRazorPagesMvcCoreBuilderExtensions +Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions +override Microsoft.AspNetCore.Mvc.RazorPages.PageBase.BeginContext(int position, int length, bool isLiteral) -> void +override Microsoft.AspNetCore.Mvc.RazorPages.PageBase.EndContext() -> void +override Microsoft.AspNetCore.Mvc.RazorPages.PageBase.EnsureRenderedBodyOrSections() -> void +virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.Canceled.get -> bool +virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.Canceled.set -> void +virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.ExceptionHandled.get -> bool +virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.ExceptionHandled.set -> void +~Microsoft.AspNetCore.Builder.PageActionEndpointConventionBuilder.Add(System.Action convention) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel model) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelPartsProvider.CreateHandlerModel(System.Reflection.MethodInfo method) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelPartsProvider.CreateParameterModel(System.Reflection.ParameterInfo parameter) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageParameterModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelPartsProvider.CreatePropertyModel(System.Reflection.PropertyInfo property) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PagePropertyModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelPartsProvider.IsHandler(System.Reflection.MethodInfo methodInfo) -> bool +~Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelProvider.OnProvidersExecuted(Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModelProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelProvider.OnProvidersExecuting(Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModelProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IPageHandlerModelConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel model) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IPageRouteModelConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel model) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IPageRouteModelProvider.OnProvidersExecuted(Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModelProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.IPageRouteModelProvider.OnProvidersExecuting(Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModelProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.AreaName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.DeclaredModelType.get -> System.Reflection.TypeInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.EndpointMetadata.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.Filters.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.HandlerMethods.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.HandlerProperties.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.HandlerType.get -> System.Reflection.TypeInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.HandlerTypeAttributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.ModelType.get -> System.Reflection.TypeInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.ModelType.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.PageApplicationModel(Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel other) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.PageApplicationModel(Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor actionDescriptor, System.Reflection.TypeInfo declaredModelType, System.Reflection.TypeInfo handlerType, System.Collections.Generic.IReadOnlyList handlerAttributes) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.PageApplicationModel(Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor actionDescriptor, System.Reflection.TypeInfo handlerType, System.Collections.Generic.IReadOnlyList handlerAttributes) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.PageType.get -> System.Reflection.TypeInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.PageType.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.Properties.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.RelativePath.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.RouteTemplate.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel.ViewEnginePath.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModelProviderContext.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModelProviderContext.PageApplicationModel.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModelProviderContext.PageApplicationModel.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModelProviderContext.PageApplicationModelProviderContext(Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor descriptor, System.Reflection.TypeInfo pageTypeInfo) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModelProviderContext.PageType.get -> System.Reflection.TypeInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection.AddAreaFolderApplicationModelConvention(string areaName, string folderPath, System.Action action) -> Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelConvention +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection.AddAreaFolderRouteModelConvention(string areaName, string folderPath, System.Action action) -> Microsoft.AspNetCore.Mvc.ApplicationModels.IPageRouteModelConvention +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection.AddAreaPageApplicationModelConvention(string areaName, string pageName, System.Action action) -> Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelConvention +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection.AddAreaPageRouteModelConvention(string areaName, string pageName, System.Action action) -> Microsoft.AspNetCore.Mvc.ApplicationModels.IPageRouteModelConvention +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection.AddFolderApplicationModelConvention(string folderPath, System.Action action) -> Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelConvention +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection.AddFolderRouteModelConvention(string folderPath, System.Action action) -> Microsoft.AspNetCore.Mvc.ApplicationModels.IPageRouteModelConvention +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection.AddPageApplicationModelConvention(string pageName, System.Action action) -> Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelConvention +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection.AddPageRouteModelConvention(string pageName, System.Action action) -> Microsoft.AspNetCore.Mvc.ApplicationModels.IPageRouteModelConvention +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection.PageConventionCollection(System.Collections.Generic.IList conventions) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection.RemoveType(System.Type pageConventionType) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection.RemoveType() -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.Attributes.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.HandlerName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.HandlerName.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.HttpMethod.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.HttpMethod.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.MethodInfo.get -> System.Reflection.MethodInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.Name.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.Name.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.Page.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.Page.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.PageHandlerModel(Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel other) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.PageHandlerModel(System.Reflection.MethodInfo handlerMethod, System.Collections.Generic.IReadOnlyList attributes) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.Parameters.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel.Properties.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageParameterModel.Handler.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageHandlerModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageParameterModel.Handler.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageParameterModel.PageParameterModel(Microsoft.AspNetCore.Mvc.ApplicationModels.PageParameterModel other) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageParameterModel.PageParameterModel(System.Reflection.ParameterInfo parameterInfo, System.Collections.Generic.IReadOnlyList attributes) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageParameterModel.ParameterInfo.get -> System.Reflection.ParameterInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageParameterModel.ParameterName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageParameterModel.ParameterName.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PagePropertyModel.Page.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageApplicationModel +~Microsoft.AspNetCore.Mvc.ApplicationModels.PagePropertyModel.Page.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PagePropertyModel.PagePropertyModel(Microsoft.AspNetCore.Mvc.ApplicationModels.PagePropertyModel other) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PagePropertyModel.PagePropertyModel(System.Reflection.PropertyInfo propertyInfo, System.Collections.Generic.IReadOnlyList attributes) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PagePropertyModel.PropertyInfo.get -> System.Reflection.PropertyInfo +~Microsoft.AspNetCore.Mvc.ApplicationModels.PagePropertyModel.PropertyName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PagePropertyModel.PropertyName.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteMetadata.PageRoute.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteMetadata.PageRouteMetadata(string pageRoute, string routeTemplate) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteMetadata.RouteTemplate.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel.AreaName.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel.PageRouteModel(Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel other) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel.PageRouteModel(string relativePath, string viewEnginePath) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel.PageRouteModel(string relativePath, string viewEnginePath, string areaName) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel.Properties.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel.RelativePath.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel.RouteParameterTransformer.get -> Microsoft.AspNetCore.Routing.IOutboundParameterTransformer +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel.RouteParameterTransformer.set -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel.RouteValues.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel.Selectors.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel.ViewEnginePath.get -> string +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModelProviderContext.RouteModels.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteTransformerConvention.Apply(Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel model) -> void +~Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteTransformerConvention.PageRouteTransformerConvention(Microsoft.AspNetCore.Routing.IOutboundParameterTransformer parameterTransformer) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterHandlerMethodEventData.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterHandlerMethodEventData.AfterHandlerMethodEventData(Microsoft.AspNetCore.Mvc.ActionContext actionContext, System.Collections.Generic.IReadOnlyDictionary arguments, Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor handlerMethodDescriptor, object instance, Microsoft.AspNetCore.Mvc.IActionResult result) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterHandlerMethodEventData.Arguments.get -> System.Collections.Generic.IReadOnlyDictionary +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterHandlerMethodEventData.HandlerMethodDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterHandlerMethodEventData.Instance.get -> object +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterHandlerMethodEventData.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutedEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutedEventData.AfterPageFilterOnPageHandlerExecutedEventData(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext handlerExecutedContext, Microsoft.AspNetCore.Mvc.Filters.IPageFilter filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutedEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IPageFilter +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutedEventData.HandlerExecutedContext.get -> Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutingEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutingEventData.AfterPageFilterOnPageHandlerExecutingEventData(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext handlerExecutingContext, Microsoft.AspNetCore.Mvc.Filters.IPageFilter filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutingEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IPageFilter +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutingEventData.HandlerExecutingContext.get -> Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutionEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutionEventData.AfterPageFilterOnPageHandlerExecutionEventData(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext handlerExecutedContext, Microsoft.AspNetCore.Mvc.Filters.IAsyncPageFilter filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutionEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IAsyncPageFilter +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutionEventData.HandlerExecutedContext.get -> Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerSelectedEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerSelectedEventData.AfterPageFilterOnPageHandlerSelectedEventData(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext handlerSelectedContext, Microsoft.AspNetCore.Mvc.Filters.IPageFilter filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerSelectedEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IPageFilter +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerSelectedEventData.HandlerSelectedContext.get -> Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerSelectionEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerSelectionEventData.AfterPageFilterOnPageHandlerSelectionEventData(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext handlerSelectedContext, Microsoft.AspNetCore.Mvc.Filters.IAsyncPageFilter filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerSelectionEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IAsyncPageFilter +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerSelectionEventData.HandlerSelectedContext.get -> Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeHandlerMethodEventData.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeHandlerMethodEventData.Arguments.get -> System.Collections.Generic.IReadOnlyDictionary +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeHandlerMethodEventData.BeforeHandlerMethodEventData(Microsoft.AspNetCore.Mvc.ActionContext actionContext, System.Collections.Generic.IReadOnlyDictionary arguments, Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor handlerMethodDescriptor, object instance) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeHandlerMethodEventData.HandlerMethodDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeHandlerMethodEventData.Instance.get -> object +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutedEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutedEventData.BeforePageFilterOnPageHandlerExecutedEventData(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext handlerExecutedContext, Microsoft.AspNetCore.Mvc.Filters.IPageFilter filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutedEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IPageFilter +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutedEventData.HandlerExecutedContext.get -> Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutingEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutingEventData.BeforePageFilterOnPageHandlerExecutingEventData(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext handlerExecutingContext, Microsoft.AspNetCore.Mvc.Filters.IPageFilter filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutingEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IPageFilter +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutingEventData.HandlerExecutingContext.get -> Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutionEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutionEventData.BeforePageFilterOnPageHandlerExecutionEventData(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext handlerExecutionContext, Microsoft.AspNetCore.Mvc.Filters.IAsyncPageFilter filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutionEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IAsyncPageFilter +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutionEventData.HandlerExecutionContext.get -> Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerSelectedEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerSelectedEventData.BeforePageFilterOnPageHandlerSelectedEventData(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext handlerSelectedContext, Microsoft.AspNetCore.Mvc.Filters.IPageFilter filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerSelectedEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IPageFilter +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerSelectedEventData.HandlerSelectedContext.get -> Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerSelectionEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerSelectionEventData.BeforePageFilterOnPageHandlerSelectionEventData(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext handlerSelectedContext, Microsoft.AspNetCore.Mvc.Filters.IAsyncPageFilter filter) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerSelectionEventData.Filter.get -> Microsoft.AspNetCore.Mvc.Filters.IAsyncPageFilter +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerSelectionEventData.HandlerSelectedContext.get -> Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext +~Microsoft.AspNetCore.Mvc.Filters.IAsyncPageFilter.OnPageHandlerExecutionAsync(Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext context, Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutionDelegate next) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.Filters.IAsyncPageFilter.OnPageHandlerSelectionAsync(Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.Filters.IPageFilter.OnPageHandlerExecuted(Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext context) -> void +~Microsoft.AspNetCore.Mvc.Filters.IPageFilter.OnPageHandlerExecuting(Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext context) -> void +~Microsoft.AspNetCore.Mvc.Filters.IPageFilter.OnPageHandlerSelected(Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext context) -> void +~Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.PageHandlerExecutedContext(Microsoft.AspNetCore.Mvc.RazorPages.PageContext pageContext, System.Collections.Generic.IList filters, Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor handlerMethod, object handlerInstance) -> void +~Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext.PageHandlerExecutingContext(Microsoft.AspNetCore.Mvc.RazorPages.PageContext pageContext, System.Collections.Generic.IList filters, Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor handlerMethod, System.Collections.Generic.IDictionary handlerArguments, object handlerInstance) -> void +~Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext.PageHandlerSelectedContext(Microsoft.AspNetCore.Mvc.RazorPages.PageContext pageContext, System.Collections.Generic.IList filters, object handlerInstance) -> void +~Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.CompiledPageActionDescriptor(Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor actionDescriptor) -> void +~Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.DeclaredModelTypeInfo.get -> System.Reflection.TypeInfo +~Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.DeclaredModelTypeInfo.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.Endpoint.get -> Microsoft.AspNetCore.Http.Endpoint +~Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.Endpoint.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.HandlerMethods.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.HandlerMethods.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.HandlerTypeInfo.get -> System.Reflection.TypeInfo +~Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.HandlerTypeInfo.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.ModelTypeInfo.get -> System.Reflection.TypeInfo +~Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.ModelTypeInfo.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.PageTypeInfo.get -> System.Reflection.TypeInfo +~Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor.PageTypeInfo.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.IPageActivatorProvider.CreateActivator(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor descriptor) -> System.Func +~Microsoft.AspNetCore.Mvc.RazorPages.IPageActivatorProvider.CreateReleaser(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor descriptor) -> System.Action +~Microsoft.AspNetCore.Mvc.RazorPages.IPageFactoryProvider.CreatePageDisposer(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor descriptor) -> System.Action +~Microsoft.AspNetCore.Mvc.RazorPages.IPageFactoryProvider.CreatePageFactory(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor descriptor) -> System.Func +~Microsoft.AspNetCore.Mvc.RazorPages.IPageModelActivatorProvider.CreateActivator(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor descriptor) -> System.Func +~Microsoft.AspNetCore.Mvc.RazorPages.IPageModelActivatorProvider.CreateReleaser(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor descriptor) -> System.Action +~Microsoft.AspNetCore.Mvc.RazorPages.IPageModelFactoryProvider.CreateModelDisposer(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor descriptor) -> System.Action +~Microsoft.AspNetCore.Mvc.RazorPages.IPageModelFactoryProvider.CreateModelFactory(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor descriptor) -> System.Func +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor.HttpMethod.get -> string +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor.HttpMethod.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor.MethodInfo.get -> System.Reflection.MethodInfo +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor.MethodInfo.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor.Name.get -> string +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor.Name.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor.Parameters.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor.Parameters.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerParameterDescriptor.ParameterInfo.get -> System.Reflection.ParameterInfo +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerParameterDescriptor.ParameterInfo.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.IPageHandlerMethodSelector.Select(Microsoft.AspNetCore.Mvc.RazorPages.PageContext context) -> Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.IPageLoader.Load(Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor actionDescriptor) -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionDescriptorProvider.BuildModel() -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionDescriptorProvider.OnProvidersExecuted(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptorProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionDescriptorProvider.OnProvidersExecuting(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptorProviderContext context) -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionDescriptorProvider.PageActionDescriptorProvider(System.Collections.Generic.IEnumerable pageRouteModelProviders, Microsoft.Extensions.Options.IOptions mvcOptionsAccessor, Microsoft.Extensions.Options.IOptions pagesOptionsAccessor) -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageBoundPropertyDescriptor.Property.get -> System.Reflection.PropertyInfo +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageBoundPropertyDescriptor.Property.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageResultExecutor.PageResultExecutor(Microsoft.AspNetCore.Mvc.Infrastructure.IHttpResponseStreamWriterFactory writerFactory, Microsoft.AspNetCore.Mvc.ViewEngines.ICompositeViewEngine compositeViewEngine, Microsoft.AspNetCore.Mvc.Razor.IRazorViewEngine razorViewEngine, Microsoft.AspNetCore.Mvc.Razor.IRazorPageActivator razorPageActivator, System.Diagnostics.DiagnosticListener diagnosticListener, System.Text.Encodings.Web.HtmlEncoder htmlEncoder) -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageViewLocationExpander.ExpandViewLocations(Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext context, System.Collections.Generic.IEnumerable viewLocations) -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageViewLocationExpander.PopulateValues(Microsoft.AspNetCore.Mvc.Razor.ViewLocationExpanderContext context) -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.BodyContent.get -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.BodyContent.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.ExecuteAsync() -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.Layout.get -> string +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.Layout.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.Path.get -> string +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.Path.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.PreviousSectionWriters.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.PreviousSectionWriters.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.RazorPageAdapter(Microsoft.AspNetCore.Mvc.Razor.RazorPageBase page, System.Type modelType) -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.SectionWriters.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAttribute.RazorPageAttribute(string path, System.Type viewType, string routeTemplate) -> void +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAttribute.RouteTemplate.get -> string +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.ServiceBasedPageModelActivatorProvider.CreateActivator(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor descriptor) -> System.Func +~Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.ServiceBasedPageModelActivatorProvider.CreateReleaser(Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor descriptor) -> System.Action +~Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor.AreaName.get -> string +~Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor.AreaName.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor.PageActionDescriptor(Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor other) -> void +~Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor.RelativePath.get -> string +~Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor.RelativePath.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor.ViewEnginePath.get -> string +~Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor.ViewEnginePath.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.MetadataProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.MetadataProvider.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.ModelState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.PageContext.get -> Microsoft.AspNetCore.Mvc.RazorPages.PageContext +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.PageContext.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Request.get -> Microsoft.AspNetCore.Http.HttpRequest +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Response.get -> Microsoft.AspNetCore.Http.HttpResponse +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RouteData.get -> Microsoft.AspNetCore.Routing.RouteData +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.TryUpdateModelAsync(object model, System.Type modelType, string prefix, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider, System.Func propertyFilter) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.TryUpdateModelAsync(TModel model, string prefix, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider, System.Func propertyFilter) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.TryUpdateModelAsync(TModel model, string prefix, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider, params System.Linq.Expressions.Expression>[] includeExpressions) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.TryUpdateModelAsync(TModel model, string prefix, System.Func propertyFilter) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageBase.TryUpdateModelAsync(TModel model, string prefix, params System.Linq.Expressions.Expression>[] includeExpressions) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageContext.PageContext(Microsoft.AspNetCore.Mvc.ActionContext actionContext) -> void +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.MetadataProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.MetadataProvider.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.ModelState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.PageContext.get -> Microsoft.AspNetCore.Mvc.RazorPages.PageContext +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.PageContext.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Redirect(string url) -> Microsoft.AspNetCore.Mvc.RedirectResult +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Request.get -> Microsoft.AspNetCore.Http.HttpRequest +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Response.get -> Microsoft.AspNetCore.Http.HttpResponse +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RouteData.get -> Microsoft.AspNetCore.Routing.RouteData +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.TempData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.TempData.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.TryUpdateModelAsync(object model, System.Type modelType, string name) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.TryUpdateModelAsync(object model, System.Type modelType, string name, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider, System.Func propertyFilter) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.TryUpdateModelAsync(TModel model) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.TryUpdateModelAsync(TModel model, string name) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.TryUpdateModelAsync(TModel model, string name, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.TryUpdateModelAsync(TModel model, string name, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider, System.Func propertyFilter) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.TryUpdateModelAsync(TModel model, string name, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider, params System.Linq.Expressions.Expression>[] includeExpressions) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.TryUpdateModelAsync(TModel model, string name, System.Func propertyFilter) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.TryUpdateModelAsync(TModel model, string name, params System.Linq.Expressions.Expression>[] includeExpressions) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Url.get -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Url.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.User.get -> System.Security.Claims.ClaimsPrincipal +~Microsoft.AspNetCore.Mvc.RazorPages.PageModel.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.RazorPages.PageResult.ContentType.get -> string +~Microsoft.AspNetCore.Mvc.RazorPages.PageResult.ContentType.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.PageResult.Model.get -> object +~Microsoft.AspNetCore.Mvc.RazorPages.PageResult.Page.get -> Microsoft.AspNetCore.Mvc.RazorPages.PageBase +~Microsoft.AspNetCore.Mvc.RazorPages.PageResult.Page.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.PageResult.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.RazorPages.PageResult.ViewData.set -> void +~Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions.Conventions.get -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions.RootDirectory.get -> string +~Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions.RootDirectory.set -> void +~abstract Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageLoader.LoadAsync(Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor actionDescriptor) -> System.Threading.Tasks.Task +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterHandlerMethodEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterHandlerMethod" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutedEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnPageHandlerExecuted" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutingEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnPageHandlerExecuting" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerExecutionEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnPageHandlerExecution" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerSelectedEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnPageHandlerSelected" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterPageFilterOnPageHandlerSelectionEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterOnPageHandlerSelection" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeHandlerMethodEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeHandlerMethod" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutedEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnPageHandlerExecuted" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutingEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnPageHandlerExecuting" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerExecutionEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnPageHandlerExecution" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerSelectedEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnPageHandlerSelected" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforePageFilterOnPageHandlerSelectionEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeOnPageHandlerSelection" -> string +~override Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor.DisplayName.get -> string +~override Microsoft.AspNetCore.Mvc.RazorPages.PageActionDescriptor.DisplayName.set -> void +~override Microsoft.AspNetCore.Mvc.RazorPages.PageBase.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~override Microsoft.AspNetCore.Mvc.RazorPages.PageBase.ViewContext.set -> void +~override Microsoft.AspNetCore.Mvc.RazorPages.PageResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Builder.RazorPagesEndpointRouteBuilderExtensions.MapDynamicPageRoute(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string pattern) -> void +~static Microsoft.AspNetCore.Builder.RazorPagesEndpointRouteBuilderExtensions.MapDynamicPageRoute(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string pattern, object state) -> void +~static Microsoft.AspNetCore.Builder.RazorPagesEndpointRouteBuilderExtensions.MapFallbackToAreaPage(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string page, string area) -> Microsoft.AspNetCore.Builder.IEndpointConventionBuilder +~static Microsoft.AspNetCore.Builder.RazorPagesEndpointRouteBuilderExtensions.MapFallbackToAreaPage(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string pattern, string page, string area) -> Microsoft.AspNetCore.Builder.IEndpointConventionBuilder +~static Microsoft.AspNetCore.Builder.RazorPagesEndpointRouteBuilderExtensions.MapFallbackToPage(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string page) -> Microsoft.AspNetCore.Builder.IEndpointConventionBuilder +~static Microsoft.AspNetCore.Builder.RazorPagesEndpointRouteBuilderExtensions.MapFallbackToPage(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string pattern, string page) -> Microsoft.AspNetCore.Builder.IEndpointConventionBuilder +~static Microsoft.AspNetCore.Builder.RazorPagesEndpointRouteBuilderExtensions.MapRazorPages(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints) -> Microsoft.AspNetCore.Builder.PageActionEndpointConventionBuilder +~static Microsoft.Extensions.DependencyInjection.MvcRazorPagesMvcBuilderExtensions.AddRazorPagesOptions(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcRazorPagesMvcBuilderExtensions.WithRazorPagesAtContentRoot(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcRazorPagesMvcBuilderExtensions.WithRazorPagesRoot(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, string rootDirectory) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcRazorPagesMvcCoreBuilderExtensions.AddRazorPages(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcRazorPagesMvcCoreBuilderExtensions.AddRazorPages(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcRazorPagesMvcCoreBuilderExtensions.WithRazorPagesRoot(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, string rootDirectory) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.Add(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, Microsoft.AspNetCore.Mvc.ApplicationModels.IParameterModelBaseConvention convention) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AddAreaPageRoute(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string areaName, string pageName, string route) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AddPageRoute(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string pageName, string route) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AllowAnonymousToAreaFolder(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string areaName, string folderPath) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AllowAnonymousToAreaPage(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string areaName, string pageName) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AllowAnonymousToFolder(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string folderPath) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AllowAnonymousToPage(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string pageName) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AuthorizeAreaFolder(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string areaName, string folderPath) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AuthorizeAreaFolder(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string areaName, string folderPath, string policy) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AuthorizeAreaPage(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string areaName, string pageName) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AuthorizeAreaPage(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string areaName, string pageName, string policy) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AuthorizeFolder(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string folderPath) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AuthorizeFolder(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string folderPath, string policy) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AuthorizePage(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string pageName) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.AuthorizePage(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, string pageName, string policy) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.ConfigureFilter(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata filter) -> Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection +~static Microsoft.Extensions.DependencyInjection.PageConventionCollectionExtensions.ConfigureFilter(this Microsoft.AspNetCore.Mvc.ApplicationModels.PageConventionCollection conventions, System.Func factory) -> Microsoft.AspNetCore.Mvc.ApplicationModels.IPageApplicationModelConvention +~virtual Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteTransformerConvention.ShouldApply(Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteModel action) -> bool +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.Exception.get -> System.Exception +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.Exception.set -> void +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.ExceptionDispatchInfo.get -> System.Runtime.ExceptionServices.ExceptionDispatchInfo +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.ExceptionDispatchInfo.set -> void +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.HandlerInstance.get -> object +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.HandlerMethod.get -> Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext.Result.set -> void +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext.HandlerArguments.get -> System.Collections.Generic.IDictionary +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext.HandlerInstance.get -> object +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext.HandlerMethod.get -> Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext.Result.get -> Microsoft.AspNetCore.Mvc.IActionResult +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext.Result.set -> void +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext.HandlerInstance.get -> object +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext.HandlerMethod.get -> Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.HandlerMethodDescriptor +~virtual Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext.HandlerMethod.set -> void +~virtual Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.RazorPages.PageContext pageContext, Microsoft.AspNetCore.Mvc.RazorPages.PageResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.BadRequest() -> Microsoft.AspNetCore.Mvc.BadRequestResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.BadRequest(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) -> Microsoft.AspNetCore.Mvc.BadRequestObjectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.BadRequest(object error) -> Microsoft.AspNetCore.Mvc.BadRequestObjectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Challenge() -> Microsoft.AspNetCore.Mvc.ChallengeResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Challenge(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> Microsoft.AspNetCore.Mvc.ChallengeResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Challenge(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties, params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.ChallengeResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Challenge(params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.ChallengeResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Content(string content) -> Microsoft.AspNetCore.Mvc.ContentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Content(string content, Microsoft.Net.Http.Headers.MediaTypeHeaderValue contentType) -> Microsoft.AspNetCore.Mvc.ContentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Content(string content, string contentType) -> Microsoft.AspNetCore.Mvc.ContentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Content(string content, string contentType, System.Text.Encoding contentEncoding) -> Microsoft.AspNetCore.Mvc.ContentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.File(System.IO.Stream fileStream, string contentType) -> Microsoft.AspNetCore.Mvc.FileStreamResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.File(System.IO.Stream fileStream, string contentType, string fileDownloadName) -> Microsoft.AspNetCore.Mvc.FileStreamResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.File(byte[] fileContents, string contentType) -> Microsoft.AspNetCore.Mvc.FileContentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.File(byte[] fileContents, string contentType, string fileDownloadName) -> Microsoft.AspNetCore.Mvc.FileContentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.File(string virtualPath, string contentType) -> Microsoft.AspNetCore.Mvc.VirtualFileResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.File(string virtualPath, string contentType, string fileDownloadName) -> Microsoft.AspNetCore.Mvc.VirtualFileResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Forbid() -> Microsoft.AspNetCore.Mvc.ForbidResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Forbid(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> Microsoft.AspNetCore.Mvc.ForbidResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Forbid(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties, params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.ForbidResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Forbid(params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.ForbidResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.LocalRedirect(string localUrl) -> Microsoft.AspNetCore.Mvc.LocalRedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.LocalRedirectPermanent(string localUrl) -> Microsoft.AspNetCore.Mvc.LocalRedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.LocalRedirectPermanentPreserveMethod(string localUrl) -> Microsoft.AspNetCore.Mvc.LocalRedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.LocalRedirectPreserveMethod(string localUrl) -> Microsoft.AspNetCore.Mvc.LocalRedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.NotFound() -> Microsoft.AspNetCore.Mvc.NotFoundResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.NotFound(object value) -> Microsoft.AspNetCore.Mvc.NotFoundObjectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Page() -> Microsoft.AspNetCore.Mvc.RazorPages.PageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Partial(string viewName) -> Microsoft.AspNetCore.Mvc.PartialViewResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Partial(string viewName, object model) -> Microsoft.AspNetCore.Mvc.PartialViewResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.PhysicalFile(string physicalPath, string contentType) -> Microsoft.AspNetCore.Mvc.PhysicalFileResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.PhysicalFile(string physicalPath, string contentType, string fileDownloadName) -> Microsoft.AspNetCore.Mvc.PhysicalFileResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Redirect(string url) -> Microsoft.AspNetCore.Mvc.RedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectPermanent(string url) -> Microsoft.AspNetCore.Mvc.RedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectPermanentPreserveMethod(string url) -> Microsoft.AspNetCore.Mvc.RedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectPreserveMethod(string url) -> Microsoft.AspNetCore.Mvc.RedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToAction(string actionName) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToAction(string actionName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToAction(string actionName, string controllerName) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToAction(string actionName, string controllerName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToAction(string actionName, string controllerName, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToAction(string actionName, string controllerName, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToActionPermanent(string actionName) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToActionPermanent(string actionName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToActionPermanent(string actionName, string controllerName) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToActionPermanent(string actionName, string controllerName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToActionPermanent(string actionName, string controllerName, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToActionPermanent(string actionName, string controllerName, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToActionPermanentPreserveMethod(string actionName = null, string controllerName = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToActionPreserveMethod(string actionName = null, string controllerName = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPage() -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPage(object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPage(string pageName) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPage(string pageName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPage(string pageName, string pageHandler) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPage(string pageName, string pageHandler, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPage(string pageName, string pageHandler, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPagePermanent(string pageName) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPagePermanent(string pageName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPagePermanent(string pageName, string pageHandler) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPagePermanent(string pageName, string pageHandler, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPagePermanent(string pageName, string pageHandler, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPagePermanent(string pageName, string pageHandler, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPagePermanentPreserveMethod(string pageName = null, string pageHandler = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToPagePreserveMethod(string pageName = null, string pageHandler = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToRoute(object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToRoute(string routeName) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToRoute(string routeName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToRoute(string routeName, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToRoute(string routeName, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToRoutePermanent(object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToRoutePermanent(string routeName) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToRoutePermanent(string routeName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToRoutePermanent(string routeName, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToRoutePermanent(string routeName, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToRoutePermanentPreserveMethod(string routeName = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.RedirectToRoutePreserveMethod(string routeName = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.SignIn(System.Security.Claims.ClaimsPrincipal principal, Microsoft.AspNetCore.Authentication.AuthenticationProperties properties, string authenticationScheme) -> Microsoft.AspNetCore.Mvc.SignInResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.SignIn(System.Security.Claims.ClaimsPrincipal principal, string authenticationScheme) -> Microsoft.AspNetCore.Mvc.SignInResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.SignOut(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties, params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.SignOutResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.SignOut(params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.SignOutResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.StatusCode(int statusCode) -> Microsoft.AspNetCore.Mvc.StatusCodeResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.StatusCode(int statusCode, object value) -> Microsoft.AspNetCore.Mvc.ObjectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.TryUpdateModelAsync(object model, System.Type modelType, string prefix) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.TryUpdateModelAsync(TModel model) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.TryUpdateModelAsync(TModel model, string prefix) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.TryUpdateModelAsync(TModel model, string prefix, Microsoft.AspNetCore.Mvc.ModelBinding.IValueProvider valueProvider) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.TryValidateModel(object model) -> bool +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.TryValidateModel(object model, string prefix) -> bool +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.Unauthorized() -> Microsoft.AspNetCore.Mvc.UnauthorizedResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.ViewComponent(System.Type componentType) -> Microsoft.AspNetCore.Mvc.ViewComponentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.ViewComponent(System.Type componentType, object arguments) -> Microsoft.AspNetCore.Mvc.ViewComponentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.ViewComponent(string componentName) -> Microsoft.AspNetCore.Mvc.ViewComponentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageBase.ViewComponent(string componentName, object arguments) -> Microsoft.AspNetCore.Mvc.ViewComponentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageContext.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.RazorPages.CompiledPageActionDescriptor +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageContext.ActionDescriptor.set -> void +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageContext.ValueProviderFactories.get -> System.Collections.Generic.IList +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageContext.ValueProviderFactories.set -> void +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageContext.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageContext.ViewData.set -> void +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageContext.ViewStartFactories.get -> System.Collections.Generic.IList> +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageContext.ViewStartFactories.set -> void +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.BadRequest() -> Microsoft.AspNetCore.Mvc.BadRequestResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.BadRequest(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) -> Microsoft.AspNetCore.Mvc.BadRequestObjectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.BadRequest(object error) -> Microsoft.AspNetCore.Mvc.BadRequestObjectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Challenge() -> Microsoft.AspNetCore.Mvc.ChallengeResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Challenge(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> Microsoft.AspNetCore.Mvc.ChallengeResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Challenge(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties, params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.ChallengeResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Challenge(params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.ChallengeResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Content(string content) -> Microsoft.AspNetCore.Mvc.ContentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Content(string content, Microsoft.Net.Http.Headers.MediaTypeHeaderValue contentType) -> Microsoft.AspNetCore.Mvc.ContentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Content(string content, string contentType) -> Microsoft.AspNetCore.Mvc.ContentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Content(string content, string contentType, System.Text.Encoding contentEncoding) -> Microsoft.AspNetCore.Mvc.ContentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.File(System.IO.Stream fileStream, string contentType) -> Microsoft.AspNetCore.Mvc.FileStreamResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.File(System.IO.Stream fileStream, string contentType, string fileDownloadName) -> Microsoft.AspNetCore.Mvc.FileStreamResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.File(byte[] fileContents, string contentType) -> Microsoft.AspNetCore.Mvc.FileContentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.File(byte[] fileContents, string contentType, string fileDownloadName) -> Microsoft.AspNetCore.Mvc.FileContentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.File(string virtualPath, string contentType) -> Microsoft.AspNetCore.Mvc.VirtualFileResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.File(string virtualPath, string contentType, string fileDownloadName) -> Microsoft.AspNetCore.Mvc.VirtualFileResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Forbid() -> Microsoft.AspNetCore.Mvc.ForbidResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Forbid(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties) -> Microsoft.AspNetCore.Mvc.ForbidResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Forbid(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties, params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.ForbidResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Forbid(params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.ForbidResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.LocalRedirect(string localUrl) -> Microsoft.AspNetCore.Mvc.LocalRedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.LocalRedirectPermanent(string localUrl) -> Microsoft.AspNetCore.Mvc.LocalRedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.LocalRedirectPermanentPreserveMethod(string localUrl) -> Microsoft.AspNetCore.Mvc.LocalRedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.LocalRedirectPreserveMethod(string localUrl) -> Microsoft.AspNetCore.Mvc.LocalRedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.NotFound() -> Microsoft.AspNetCore.Mvc.NotFoundResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.NotFound(object value) -> Microsoft.AspNetCore.Mvc.NotFoundObjectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.OnPageHandlerExecuted(Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutedContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.OnPageHandlerExecuting(Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.OnPageHandlerExecutionAsync(Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutingContext context, Microsoft.AspNetCore.Mvc.Filters.PageHandlerExecutionDelegate next) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.OnPageHandlerSelected(Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.OnPageHandlerSelectionAsync(Microsoft.AspNetCore.Mvc.Filters.PageHandlerSelectedContext context) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Page() -> Microsoft.AspNetCore.Mvc.RazorPages.PageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Partial(string viewName) -> Microsoft.AspNetCore.Mvc.PartialViewResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Partial(string viewName, object model) -> Microsoft.AspNetCore.Mvc.PartialViewResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.PhysicalFile(string physicalPath, string contentType) -> Microsoft.AspNetCore.Mvc.PhysicalFileResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.PhysicalFile(string physicalPath, string contentType, string fileDownloadName) -> Microsoft.AspNetCore.Mvc.PhysicalFileResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectPermanent(string url) -> Microsoft.AspNetCore.Mvc.RedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectPermanentPreserveMethod(string url) -> Microsoft.AspNetCore.Mvc.RedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectPreserveMethod(string url) -> Microsoft.AspNetCore.Mvc.RedirectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToAction(string actionName) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToAction(string actionName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToAction(string actionName, string controllerName) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToAction(string actionName, string controllerName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToAction(string actionName, string controllerName, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToAction(string actionName, string controllerName, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToActionPermanent(string actionName) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToActionPermanent(string actionName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToActionPermanent(string actionName, string controllerName) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToActionPermanent(string actionName, string controllerName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToActionPermanent(string actionName, string controllerName, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToActionPermanent(string actionName, string controllerName, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToActionPermanentPreserveMethod(string actionName = null, string controllerName = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToActionPreserveMethod(string actionName = null, string controllerName = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToActionResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPage() -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPage(object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPage(string pageName) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPage(string pageName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPage(string pageName, string pageHandler) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPage(string pageName, string pageHandler, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPage(string pageName, string pageHandler, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPage(string pageName, string pageHandler, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPagePermanent(string pageName) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPagePermanent(string pageName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPagePermanent(string pageName, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPagePermanent(string pageName, string pageHandler) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPagePermanent(string pageName, string pageHandler, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPagePermanent(string pageName, string pageHandler, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPagePermanent(string pageName, string pageHandler, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPagePermanentPreserveMethod(string pageName = null, string pageHandler = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToPagePreserveMethod(string pageName = null, string pageHandler = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToPageResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToRoute(object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToRoute(string routeName) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToRoute(string routeName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToRoute(string routeName, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToRoute(string routeName, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToRoutePermanent(object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToRoutePermanent(string routeName) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToRoutePermanent(string routeName, object routeValues) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToRoutePermanent(string routeName, object routeValues, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToRoutePermanent(string routeName, string fragment) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToRoutePermanentPreserveMethod(string routeName = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.RedirectToRoutePreserveMethod(string routeName = null, object routeValues = null, string fragment = null) -> Microsoft.AspNetCore.Mvc.RedirectToRouteResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.SignIn(System.Security.Claims.ClaimsPrincipal principal, Microsoft.AspNetCore.Authentication.AuthenticationProperties properties, string authenticationScheme) -> Microsoft.AspNetCore.Mvc.SignInResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.SignIn(System.Security.Claims.ClaimsPrincipal principal, string authenticationScheme) -> Microsoft.AspNetCore.Mvc.SignInResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.SignOut(Microsoft.AspNetCore.Authentication.AuthenticationProperties properties, params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.SignOutResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.SignOut(params string[] authenticationSchemes) -> Microsoft.AspNetCore.Mvc.SignOutResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.StatusCode(int statusCode) -> Microsoft.AspNetCore.Mvc.StatusCodeResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.StatusCode(int statusCode, object value) -> Microsoft.AspNetCore.Mvc.ObjectResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.TryValidateModel(object model) -> bool +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.TryValidateModel(object model, string name) -> bool +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.Unauthorized() -> Microsoft.AspNetCore.Mvc.UnauthorizedResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.ViewComponent(System.Type componentType) -> Microsoft.AspNetCore.Mvc.ViewComponentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.ViewComponent(System.Type componentType, object arguments) -> Microsoft.AspNetCore.Mvc.ViewComponentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.ViewComponent(string componentName) -> Microsoft.AspNetCore.Mvc.ViewComponentResult +~virtual Microsoft.AspNetCore.Mvc.RazorPages.PageModel.ViewComponent(string componentName, object arguments) -> Microsoft.AspNetCore.Mvc.ViewComponentResult diff --git a/src/Mvc/Mvc.TagHelpers/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.TagHelpers/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.TagHelpers/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.TagHelpers/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.TagHelpers/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..a8b3400bdf --- /dev/null +++ b/src/Mvc/Mvc.TagHelpers/src/PublicAPI.Unshipped.txt @@ -0,0 +1,373 @@ +#nullable enable +Microsoft.AspNetCore.Mvc.Rendering.ValidationSummary +Microsoft.AspNetCore.Mvc.Rendering.ValidationSummary.All = 2 -> Microsoft.AspNetCore.Mvc.Rendering.ValidationSummary +Microsoft.AspNetCore.Mvc.Rendering.ValidationSummary.ModelOnly = 1 -> Microsoft.AspNetCore.Mvc.Rendering.ValidationSummary +Microsoft.AspNetCore.Mvc.Rendering.ValidationSummary.None = 0 -> Microsoft.AspNetCore.Mvc.Rendering.ValidationSummary +Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.Cache.CacheTagKey +Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperFormatter +Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperFormatter.DistributedCacheTagHelperFormatter() -> void +Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperFormattingContext +Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperFormattingContext.DistributedCacheTagHelperFormattingContext() -> void +Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperService +Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperStorage +Microsoft.AspNetCore.Mvc.TagHelpers.Cache.IDistributedCacheTagHelperFormatter +Microsoft.AspNetCore.Mvc.TagHelpers.Cache.IDistributedCacheTagHelperService +Microsoft.AspNetCore.Mvc.TagHelpers.Cache.IDistributedCacheTagHelperStorage +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper.Priority.get -> Microsoft.Extensions.Caching.Memory.CacheItemPriority? +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper.Priority.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.Enabled.get -> bool +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.Enabled.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.ExpiresAfter.get -> System.TimeSpan? +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.ExpiresAfter.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.ExpiresOn.get -> System.DateTimeOffset? +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.ExpiresOn.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.ExpiresSliding.get -> System.TimeSpan? +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.ExpiresSliding.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryByCulture.get -> bool +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryByCulture.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryByUser.get -> bool +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryByUser.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperMemoryCacheFactory +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperOptions +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperOptions.CacheTagHelperOptions() -> void +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperOptions.SizeLimit.get -> long +Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperOptions.SizeLimit.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.ComponentTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.ComponentTagHelper.ComponentTagHelper() -> void +Microsoft.AspNetCore.Mvc.TagHelpers.ComponentTagHelper.RenderMode.get -> Microsoft.AspNetCore.Mvc.Rendering.RenderMode +Microsoft.AspNetCore.Mvc.TagHelpers.ComponentTagHelper.RenderMode.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Antiforgery.get -> bool? +Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Antiforgery.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.GlobbingUrlBuilder +Microsoft.AspNetCore.Mvc.TagHelpers.GlobbingUrlBuilder.RequestPathBase.get -> Microsoft.AspNetCore.Http.PathString +Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper.AppendVersion.get -> bool +Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper.AppendVersion.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.AppendVersion.get -> bool? +Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.AppendVersion.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.SuppressFallbackIntegrity.get -> bool +Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.SuppressFallbackIntegrity.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.OptionTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.Optional.get -> bool +Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.Optional.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.RenderAtEndOfFormTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.RenderAtEndOfFormTagHelper.RenderAtEndOfFormTagHelper() -> void +Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.AppendVersion.get -> bool? +Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.AppendVersion.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.SuppressFallbackIntegrity.get -> bool +Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.SuppressFallbackIntegrity.set -> void +Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.TagHelperOutputExtensions +Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.ValidationMessageTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.ValidationSummaryTagHelper +Microsoft.AspNetCore.Mvc.TagHelpers.ValidationSummaryTagHelper.ValidationSummary.get -> Microsoft.AspNetCore.Mvc.Rendering.ValidationSummary +Microsoft.AspNetCore.Mvc.TagHelpers.ValidationSummaryTagHelper.ValidationSummary.set -> void +Microsoft.Extensions.DependencyInjection.TagHelperServicesExtensions +override Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.Cache.CacheTagKey.GetHashCode() -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.OptionTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.RenderAtEndOfFormTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.ValidationMessageTagHelper.Order.get -> int +override Microsoft.AspNetCore.Mvc.TagHelpers.ValidationSummaryTagHelper.Order.get -> int +static readonly Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.DefaultExpiration -> System.TimeSpan +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Action.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Action.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.AnchorTagHelper(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Area.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Area.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Controller.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Controller.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Fragment.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Fragment.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Generator.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Host.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Host.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Page.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Page.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.PageHandler.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.PageHandler.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Protocol.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Protocol.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Route.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Route.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.RouteValues.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.RouteValues.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.CacheTagKey.CacheTagKey(Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper tagHelper, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.CacheTagKey.CacheTagKey(Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper tagHelper) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.CacheTagKey.Equals(Microsoft.AspNetCore.Mvc.TagHelpers.Cache.CacheTagKey other) -> bool +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.CacheTagKey.GenerateHashedKey() -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.CacheTagKey.GenerateKey() -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperFormatter.DeserializeAsync(byte[] value) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperFormatter.SerializeAsync(Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperFormattingContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperFormattingContext.Html.get -> Microsoft.AspNetCore.Html.HtmlString +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperFormattingContext.Html.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperService.DistributedCacheTagHelperService(Microsoft.AspNetCore.Mvc.TagHelpers.Cache.IDistributedCacheTagHelperStorage storage, Microsoft.AspNetCore.Mvc.TagHelpers.Cache.IDistributedCacheTagHelperFormatter formatter, System.Text.Encodings.Web.HtmlEncoder HtmlEncoder, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperService.ProcessContentAsync(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output, Microsoft.AspNetCore.Mvc.TagHelpers.Cache.CacheTagKey key, Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions options) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperStorage.DistributedCacheTagHelperStorage(Microsoft.Extensions.Caching.Distributed.IDistributedCache distributedCache) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperStorage.GetAsync(string key) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperStorage.SetAsync(string key, byte[] value, Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions options) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.IDistributedCacheTagHelperFormatter.DeserializeAsync(byte[] value) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.IDistributedCacheTagHelperFormatter.SerializeAsync(Microsoft.AspNetCore.Mvc.TagHelpers.Cache.DistributedCacheTagHelperFormattingContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.IDistributedCacheTagHelperService.ProcessContentAsync(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output, Microsoft.AspNetCore.Mvc.TagHelpers.Cache.CacheTagKey key, Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions options) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.IDistributedCacheTagHelperStorage.GetAsync(string key) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.TagHelpers.Cache.IDistributedCacheTagHelperStorage.SetAsync(string key, byte[] value, Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions options) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper.CacheTagHelper(Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperMemoryCacheFactory factory, System.Text.Encodings.Web.HtmlEncoder htmlEncoder) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper.MemoryCache.get -> Microsoft.Extensions.Caching.Memory.IMemoryCache +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.CacheTagHelperBase(System.Text.Encodings.Web.HtmlEncoder htmlEncoder) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.HtmlEncoder.get -> System.Text.Encodings.Web.HtmlEncoder +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryBy.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryBy.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryByCookie.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryByCookie.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryByHeader.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryByHeader.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryByQuery.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryByQuery.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryByRoute.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.VaryByRoute.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperBase.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperMemoryCacheFactory.Cache.get -> Microsoft.Extensions.Caching.Memory.IMemoryCache +~Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelperMemoryCacheFactory.CacheTagHelperMemoryCacheFactory(Microsoft.Extensions.Options.IOptions options) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ComponentTagHelper.ComponentType.get -> System.Type +~Microsoft.AspNetCore.Mvc.TagHelpers.ComponentTagHelper.ComponentType.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ComponentTagHelper.Parameters.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.TagHelpers.ComponentTagHelper.Parameters.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ComponentTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.ComponentTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper.DistributedCacheTagHelper(Microsoft.AspNetCore.Mvc.TagHelpers.Cache.IDistributedCacheTagHelperService distributedCacheService, System.Text.Encodings.Web.HtmlEncoder htmlEncoder) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper.MemoryCache.get -> Microsoft.Extensions.Caching.Memory.IMemoryCache +~Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper.Name.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper.Name.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper.EnvironmentTagHelper(Microsoft.AspNetCore.Hosting.IWebHostEnvironment hostingEnvironment) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper.Exclude.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper.Exclude.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper.HostingEnvironment.get -> Microsoft.AspNetCore.Hosting.IWebHostEnvironment +~Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper.Include.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper.Include.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper.Names.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper.Names.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Action.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Action.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Area.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Area.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Controller.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Controller.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.FormActionTagHelper(Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory urlHelperFactory) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Fragment.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Fragment.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Page.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Page.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.PageHandler.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.PageHandler.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Route.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Route.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.RouteValues.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.RouteValues.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.UrlHelperFactory.get -> Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Action.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Action.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Area.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Area.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Controller.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Controller.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.FormTagHelper(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Fragment.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Fragment.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Generator.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Method.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Method.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Page.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Page.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.PageHandler.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.PageHandler.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Route.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Route.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.RouteValues.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.RouteValues.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.GlobbingUrlBuilder.Cache.get -> Microsoft.Extensions.Caching.Memory.IMemoryCache +~Microsoft.AspNetCore.Mvc.TagHelpers.GlobbingUrlBuilder.FileProvider.get -> Microsoft.Extensions.FileProviders.IFileProvider +~Microsoft.AspNetCore.Mvc.TagHelpers.GlobbingUrlBuilder.GlobbingUrlBuilder(Microsoft.Extensions.FileProviders.IFileProvider fileProvider, Microsoft.Extensions.Caching.Memory.IMemoryCache cache, Microsoft.AspNetCore.Http.PathString requestPathBase) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper.Cache.get -> Microsoft.Extensions.Caching.Memory.IMemoryCache +~Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper.HostingEnvironment.get -> Microsoft.AspNetCore.Hosting.IWebHostEnvironment +~Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper.ImageTagHelper(Microsoft.AspNetCore.Hosting.IWebHostEnvironment hostingEnvironment, Microsoft.AspNetCore.Mvc.Razor.Infrastructure.TagHelperMemoryCacheProvider cacheProvider, Microsoft.AspNetCore.Mvc.ViewFeatures.IFileVersionProvider fileVersionProvider, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory urlHelperFactory) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper.ImageTagHelper(Microsoft.AspNetCore.Mvc.ViewFeatures.IFileVersionProvider fileVersionProvider, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory urlHelperFactory) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper.Src.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper.Src.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.For.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.For.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.Format.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.Format.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.Generator.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.GetInputType(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, out string inputTypeHint) -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.InputTagHelper(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.InputTypeName.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.InputTypeName.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.Name.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.Name.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.Value.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.Value.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper.For.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression +~Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper.For.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper.Generator.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator +~Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper.LabelTagHelper(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.Cache.get -> Microsoft.Extensions.Caching.Memory.IMemoryCache +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackHref.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackHref.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackHrefExclude.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackHrefExclude.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackHrefInclude.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackHrefInclude.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackTestClass.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackTestClass.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackTestProperty.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackTestProperty.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackTestValue.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackTestValue.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.GlobbingUrlBuilder.get -> Microsoft.AspNetCore.Mvc.TagHelpers.GlobbingUrlBuilder +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.GlobbingUrlBuilder.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.HostingEnvironment.get -> Microsoft.AspNetCore.Hosting.IWebHostEnvironment +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.Href.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.Href.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.HrefExclude.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.HrefExclude.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.HrefInclude.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.HrefInclude.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.JavaScriptEncoder.get -> System.Text.Encodings.Web.JavaScriptEncoder +~Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.LinkTagHelper(Microsoft.AspNetCore.Hosting.IWebHostEnvironment hostingEnvironment, Microsoft.AspNetCore.Mvc.Razor.Infrastructure.TagHelperMemoryCacheProvider cacheProvider, Microsoft.AspNetCore.Mvc.ViewFeatures.IFileVersionProvider fileVersionProvider, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, System.Text.Encodings.Web.JavaScriptEncoder javaScriptEncoder, Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory urlHelperFactory) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.OptionTagHelper.Generator.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator +~Microsoft.AspNetCore.Mvc.TagHelpers.OptionTagHelper.OptionTagHelper(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.OptionTagHelper.Value.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.OptionTagHelper.Value.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.OptionTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.OptionTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.FallbackName.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.FallbackName.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.For.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression +~Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.For.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.Model.get -> object +~Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.Model.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.Name.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.Name.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.PartialTagHelper(Microsoft.AspNetCore.Mvc.ViewEngines.ICompositeViewEngine viewEngine, Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.IViewBufferScope viewBufferScope) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.ViewData.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.RenderAtEndOfFormTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.RenderAtEndOfFormTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.Cache.get -> Microsoft.Extensions.Caching.Memory.IMemoryCache +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.FallbackSrc.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.FallbackSrc.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.FallbackSrcExclude.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.FallbackSrcExclude.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.FallbackSrcInclude.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.FallbackSrcInclude.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.FallbackTestExpression.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.FallbackTestExpression.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.GlobbingUrlBuilder.get -> Microsoft.AspNetCore.Mvc.TagHelpers.GlobbingUrlBuilder +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.GlobbingUrlBuilder.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.HostingEnvironment.get -> Microsoft.AspNetCore.Hosting.IWebHostEnvironment +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.JavaScriptEncoder.get -> System.Text.Encodings.Web.JavaScriptEncoder +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.ScriptTagHelper(Microsoft.AspNetCore.Hosting.IWebHostEnvironment hostingEnvironment, Microsoft.AspNetCore.Mvc.Razor.Infrastructure.TagHelperMemoryCacheProvider cacheProvider, Microsoft.AspNetCore.Mvc.ViewFeatures.IFileVersionProvider fileVersionProvider, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, System.Text.Encodings.Web.JavaScriptEncoder javaScriptEncoder, Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory urlHelperFactory) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.Src.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.Src.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.SrcExclude.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.SrcExclude.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.SrcInclude.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.SrcInclude.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.For.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression +~Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.For.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.Generator.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator +~Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.Items.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.Items.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.Name.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.Name.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.SelectTagHelper(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper.For.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression +~Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper.For.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper.Generator.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator +~Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper.Name.get -> string +~Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper.Name.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper.TextAreaTagHelper(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ValidationMessageTagHelper.For.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression +~Microsoft.AspNetCore.Mvc.TagHelpers.ValidationMessageTagHelper.For.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ValidationMessageTagHelper.Generator.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator +~Microsoft.AspNetCore.Mvc.TagHelpers.ValidationMessageTagHelper.ValidationMessageTagHelper(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ValidationMessageTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.ValidationMessageTagHelper.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ValidationSummaryTagHelper.Generator.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator +~Microsoft.AspNetCore.Mvc.TagHelpers.ValidationSummaryTagHelper.ValidationSummaryTagHelper(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator) -> void +~Microsoft.AspNetCore.Mvc.TagHelpers.ValidationSummaryTagHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.TagHelpers.ValidationSummaryTagHelper.ViewContext.set -> void +~override Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Process(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> void +~override Microsoft.AspNetCore.Mvc.TagHelpers.Cache.CacheTagKey.Equals(object obj) -> bool +~override Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper.ProcessAsync(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.TagHelpers.ComponentTagHelper.ProcessAsync(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper.ProcessAsync(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper.Process(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> void +~override Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Process(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> void +~override Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Process(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> void +~override Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper.Process(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> void +~override Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.Process(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> void +~override Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper.ProcessAsync(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.Process(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> void +~override Microsoft.AspNetCore.Mvc.TagHelpers.OptionTagHelper.ProcessAsync(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.ProcessAsync(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.TagHelpers.RenderAtEndOfFormTagHelper.Init(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context) -> void +~override Microsoft.AspNetCore.Mvc.TagHelpers.RenderAtEndOfFormTagHelper.ProcessAsync(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.Process(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> void +~override Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.Init(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context) -> void +~override Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.Process(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> void +~override Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper.Process(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> void +~override Microsoft.AspNetCore.Mvc.TagHelpers.ValidationMessageTagHelper.ProcessAsync(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.TagHelpers.ValidationSummaryTagHelper.Process(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) -> void +~static Microsoft.AspNetCore.Mvc.TagHelpers.TagHelperOutputExtensions.AddClass(this Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput tagHelperOutput, string classValue, System.Text.Encodings.Web.HtmlEncoder htmlEncoder) -> void +~static Microsoft.AspNetCore.Mvc.TagHelpers.TagHelperOutputExtensions.CopyHtmlAttribute(this Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput tagHelperOutput, string attributeName, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context) -> void +~static Microsoft.AspNetCore.Mvc.TagHelpers.TagHelperOutputExtensions.MergeAttributes(this Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput tagHelperOutput, Microsoft.AspNetCore.Mvc.Rendering.TagBuilder tagBuilder) -> void +~static Microsoft.AspNetCore.Mvc.TagHelpers.TagHelperOutputExtensions.RemoveClass(this Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput tagHelperOutput, string classValue, System.Text.Encodings.Web.HtmlEncoder htmlEncoder) -> void +~static Microsoft.AspNetCore.Mvc.TagHelpers.TagHelperOutputExtensions.RemoveRange(this Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput tagHelperOutput, System.Collections.Generic.IEnumerable attributes) -> void +~static Microsoft.Extensions.DependencyInjection.TagHelperServicesExtensions.AddCacheTagHelper(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.TagHelperServicesExtensions.AddCacheTagHelperLimits(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action configure) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.TagHelperServicesExtensions.AddCacheTagHelperLimits(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action configure) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static readonly Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper.CacheKeyPrefix -> string +~static readonly Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper.CacheKeyPrefix -> string +~virtual Microsoft.AspNetCore.Mvc.TagHelpers.GlobbingUrlBuilder.BuildUrlList(string staticUrl, string includePattern, string excludePattern) -> System.Collections.Generic.IReadOnlyList diff --git a/src/Mvc/Mvc.Testing/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.Testing/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.Testing/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.Testing/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.Testing/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..25fc98d166 --- /dev/null +++ b/src/Mvc/Mvc.Testing/src/PublicAPI.Unshipped.txt @@ -0,0 +1,48 @@ +#nullable enable +Microsoft.AspNetCore.Mvc.Testing.Handlers.CookieContainerHandler +Microsoft.AspNetCore.Mvc.Testing.Handlers.CookieContainerHandler.CookieContainerHandler() -> void +Microsoft.AspNetCore.Mvc.Testing.Handlers.RedirectHandler +Microsoft.AspNetCore.Mvc.Testing.Handlers.RedirectHandler.MaxRedirects.get -> int +Microsoft.AspNetCore.Mvc.Testing.Handlers.RedirectHandler.RedirectHandler() -> void +Microsoft.AspNetCore.Mvc.Testing.Handlers.RedirectHandler.RedirectHandler(int maxRedirects) -> void +Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.Dispose() -> void +Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.WebApplicationFactory() -> void +Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.~WebApplicationFactory() -> void +Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryClientOptions +Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryClientOptions.AllowAutoRedirect.get -> bool +Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryClientOptions.AllowAutoRedirect.set -> void +Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryClientOptions.HandleCookies.get -> bool +Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryClientOptions.HandleCookies.set -> void +Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryClientOptions.MaxAutomaticRedirections.get -> int +Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryClientOptions.MaxAutomaticRedirections.set -> void +Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryClientOptions.WebApplicationFactoryClientOptions() -> void +Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryContentRootAttribute +Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryContentRootAttribute.Priority.get -> int +virtual Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.Dispose(bool disposing) -> void +~Microsoft.AspNetCore.Mvc.Testing.Handlers.CookieContainerHandler.Container.get -> System.Net.CookieContainer +~Microsoft.AspNetCore.Mvc.Testing.Handlers.CookieContainerHandler.CookieContainerHandler(System.Net.CookieContainer cookieContainer) -> void +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.ClientOptions.get -> Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryClientOptions +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.CreateClient() -> System.Net.Http.HttpClient +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.CreateClient(Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryClientOptions options) -> System.Net.Http.HttpClient +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.CreateDefaultClient(System.Uri baseAddress, params System.Net.Http.DelegatingHandler[] handlers) -> System.Net.Http.HttpClient +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.CreateDefaultClient(params System.Net.Http.DelegatingHandler[] handlers) -> System.Net.Http.HttpClient +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.Factories.get -> System.Collections.Generic.IReadOnlyList> +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.Server.get -> Microsoft.AspNetCore.TestHost.TestServer +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.WithWebHostBuilder(System.Action configuration) -> Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryClientOptions.BaseAddress.get -> System.Uri +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryClientOptions.BaseAddress.set -> void +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryContentRootAttribute.ContentRootPath.get -> string +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryContentRootAttribute.ContentRootTest.get -> string +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryContentRootAttribute.Key.get -> string +~Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactoryContentRootAttribute.WebApplicationFactoryContentRootAttribute(string key, string contentRootPath, string contentRootTest, string priority) -> void +~override Microsoft.AspNetCore.Mvc.Testing.Handlers.CookieContainerHandler.SendAsync(System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.Testing.Handlers.RedirectHandler.SendAsync(System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.ConfigureClient(System.Net.Http.HttpClient client) -> void +~virtual Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.ConfigureWebHost(Microsoft.AspNetCore.Hosting.IWebHostBuilder builder) -> void +~virtual Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.CreateHost(Microsoft.Extensions.Hosting.IHostBuilder builder) -> Microsoft.Extensions.Hosting.IHost +~virtual Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.CreateHostBuilder() -> Microsoft.Extensions.Hosting.IHostBuilder +~virtual Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.CreateServer(Microsoft.AspNetCore.Hosting.IWebHostBuilder builder) -> Microsoft.AspNetCore.TestHost.TestServer +~virtual Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.CreateWebHostBuilder() -> Microsoft.AspNetCore.Hosting.IWebHostBuilder +~virtual Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.GetTestAssemblies() -> System.Collections.Generic.IEnumerable +~virtual Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory.Services.get -> System.IServiceProvider diff --git a/src/Mvc/Mvc.ViewFeatures/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc.ViewFeatures/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc.ViewFeatures/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc.ViewFeatures/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc.ViewFeatures/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..4b6567f9ce --- /dev/null +++ b/src/Mvc/Mvc.ViewFeatures/src/PublicAPI.Unshipped.txt @@ -0,0 +1,1160 @@ +#nullable enable +Microsoft.AspNetCore.Mvc.AutoValidateAntiforgeryTokenAttribute +Microsoft.AspNetCore.Mvc.AutoValidateAntiforgeryTokenAttribute.AutoValidateAntiforgeryTokenAttribute() -> void +Microsoft.AspNetCore.Mvc.AutoValidateAntiforgeryTokenAttribute.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.AutoValidateAntiforgeryTokenAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.AutoValidateAntiforgeryTokenAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.Controller +Microsoft.AspNetCore.Mvc.Controller.Controller() -> void +Microsoft.AspNetCore.Mvc.Controller.Dispose() -> void +Microsoft.AspNetCore.Mvc.Controller.ViewBag.get -> dynamic +Microsoft.AspNetCore.Mvc.CookieTempDataProviderOptions +Microsoft.AspNetCore.Mvc.CookieTempDataProviderOptions.CookieTempDataProviderOptions() -> void +Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewComponentEventData +Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewComponentEventData +Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewEventData +Microsoft.AspNetCore.Mvc.Diagnostics.ViewComponentAfterViewExecuteEventData +Microsoft.AspNetCore.Mvc.Diagnostics.ViewComponentBeforeViewExecuteEventData +Microsoft.AspNetCore.Mvc.Diagnostics.ViewFoundEventData +Microsoft.AspNetCore.Mvc.Diagnostics.ViewFoundEventData.IsMainPage.get -> bool +Microsoft.AspNetCore.Mvc.Diagnostics.ViewNotFoundEventData +Microsoft.AspNetCore.Mvc.Diagnostics.ViewNotFoundEventData.IsMainPage.get -> bool +Microsoft.AspNetCore.Mvc.IViewComponentHelper +Microsoft.AspNetCore.Mvc.IViewComponentResult +Microsoft.AspNetCore.Mvc.IgnoreAntiforgeryTokenAttribute +Microsoft.AspNetCore.Mvc.IgnoreAntiforgeryTokenAttribute.IgnoreAntiforgeryTokenAttribute() -> void +Microsoft.AspNetCore.Mvc.IgnoreAntiforgeryTokenAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.IgnoreAntiforgeryTokenAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionaryExtensions +Microsoft.AspNetCore.Mvc.MvcViewOptions +Microsoft.AspNetCore.Mvc.MvcViewOptions.MvcViewOptions() -> void +Microsoft.AspNetCore.Mvc.PageRemoteAttribute +Microsoft.AspNetCore.Mvc.PageRemoteAttribute.PageRemoteAttribute() -> void +Microsoft.AspNetCore.Mvc.PartialViewResult +Microsoft.AspNetCore.Mvc.PartialViewResult.PartialViewResult() -> void +Microsoft.AspNetCore.Mvc.PartialViewResult.StatusCode.get -> int? +Microsoft.AspNetCore.Mvc.PartialViewResult.StatusCode.set -> void +Microsoft.AspNetCore.Mvc.RemoteAttribute +Microsoft.AspNetCore.Mvc.RemoteAttribute.RemoteAttribute() -> void +Microsoft.AspNetCore.Mvc.RemoteAttributeBase +Microsoft.AspNetCore.Mvc.RemoteAttributeBase.RemoteAttributeBase() -> void +Microsoft.AspNetCore.Mvc.Rendering.CheckBoxHiddenInputRenderMode +Microsoft.AspNetCore.Mvc.Rendering.CheckBoxHiddenInputRenderMode.EndOfForm = 2 -> Microsoft.AspNetCore.Mvc.Rendering.CheckBoxHiddenInputRenderMode +Microsoft.AspNetCore.Mvc.Rendering.CheckBoxHiddenInputRenderMode.Inline = 1 -> Microsoft.AspNetCore.Mvc.Rendering.CheckBoxHiddenInputRenderMode +Microsoft.AspNetCore.Mvc.Rendering.CheckBoxHiddenInputRenderMode.None = 0 -> Microsoft.AspNetCore.Mvc.Rendering.CheckBoxHiddenInputRenderMode +Microsoft.AspNetCore.Mvc.Rendering.FormMethod +Microsoft.AspNetCore.Mvc.Rendering.FormMethod.Get = 0 -> Microsoft.AspNetCore.Mvc.Rendering.FormMethod +Microsoft.AspNetCore.Mvc.Rendering.FormMethod.Post = 1 -> Microsoft.AspNetCore.Mvc.Rendering.FormMethod +Microsoft.AspNetCore.Mvc.Rendering.Html5DateRenderingMode +Microsoft.AspNetCore.Mvc.Rendering.Html5DateRenderingMode.CurrentCulture = 1 -> Microsoft.AspNetCore.Mvc.Rendering.Html5DateRenderingMode +Microsoft.AspNetCore.Mvc.Rendering.Html5DateRenderingMode.Rfc3339 = 0 -> Microsoft.AspNetCore.Mvc.Rendering.Html5DateRenderingMode +Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperComponentExtensions +Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions +Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayNameExtensions +Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions +Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions +Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions +Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLabelExtensions +Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLinkExtensions +Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperNameExtensions +Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions +Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperSelectExtensions +Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions +Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValueExtensions +Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper +Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.EndForm() -> void +Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Html5DateRenderingMode.get -> Microsoft.AspNetCore.Mvc.Rendering.Html5DateRenderingMode +Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Html5DateRenderingMode.set -> void +Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.ViewBag.get -> dynamic +Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper +Microsoft.AspNetCore.Mvc.Rendering.IJsonHelper +Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList +Microsoft.AspNetCore.Mvc.Rendering.MvcForm +Microsoft.AspNetCore.Mvc.Rendering.MvcForm.Dispose() -> void +Microsoft.AspNetCore.Mvc.Rendering.MvcForm.EndForm() -> void +Microsoft.AspNetCore.Mvc.Rendering.RenderMode +Microsoft.AspNetCore.Mvc.Rendering.RenderMode.Server = 2 -> Microsoft.AspNetCore.Mvc.Rendering.RenderMode +Microsoft.AspNetCore.Mvc.Rendering.RenderMode.ServerPrerendered = 3 -> Microsoft.AspNetCore.Mvc.Rendering.RenderMode +Microsoft.AspNetCore.Mvc.Rendering.RenderMode.Static = 1 -> Microsoft.AspNetCore.Mvc.Rendering.RenderMode +Microsoft.AspNetCore.Mvc.Rendering.SelectList +Microsoft.AspNetCore.Mvc.Rendering.SelectListGroup +Microsoft.AspNetCore.Mvc.Rendering.SelectListGroup.Disabled.get -> bool +Microsoft.AspNetCore.Mvc.Rendering.SelectListGroup.Disabled.set -> void +Microsoft.AspNetCore.Mvc.Rendering.SelectListGroup.SelectListGroup() -> void +Microsoft.AspNetCore.Mvc.Rendering.SelectListItem +Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.Disabled.get -> bool +Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.Disabled.set -> void +Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.SelectListItem() -> void +Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.Selected.get -> bool +Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.Selected.set -> void +Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.HasInnerHtml.get -> bool +Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.TagRenderMode.get -> Microsoft.AspNetCore.Mvc.Rendering.TagRenderMode +Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.TagRenderMode.set -> void +Microsoft.AspNetCore.Mvc.Rendering.TagRenderMode +Microsoft.AspNetCore.Mvc.Rendering.TagRenderMode.EndTag = 2 -> Microsoft.AspNetCore.Mvc.Rendering.TagRenderMode +Microsoft.AspNetCore.Mvc.Rendering.TagRenderMode.Normal = 0 -> Microsoft.AspNetCore.Mvc.Rendering.TagRenderMode +Microsoft.AspNetCore.Mvc.Rendering.TagRenderMode.SelfClosing = 3 -> Microsoft.AspNetCore.Mvc.Rendering.TagRenderMode +Microsoft.AspNetCore.Mvc.Rendering.TagRenderMode.StartTag = 1 -> Microsoft.AspNetCore.Mvc.Rendering.TagRenderMode +Microsoft.AspNetCore.Mvc.Rendering.ViewComponentHelperExtensions +Microsoft.AspNetCore.Mvc.Rendering.ViewContext +Microsoft.AspNetCore.Mvc.Rendering.ViewContext.CheckBoxHiddenInputRenderMode.get -> Microsoft.AspNetCore.Mvc.Rendering.CheckBoxHiddenInputRenderMode +Microsoft.AspNetCore.Mvc.Rendering.ViewContext.CheckBoxHiddenInputRenderMode.set -> void +Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ClientValidationEnabled.get -> bool +Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ClientValidationEnabled.set -> void +Microsoft.AspNetCore.Mvc.Rendering.ViewContext.Html5DateRenderingMode.get -> Microsoft.AspNetCore.Mvc.Rendering.Html5DateRenderingMode +Microsoft.AspNetCore.Mvc.Rendering.ViewContext.Html5DateRenderingMode.set -> void +Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ViewBag.get -> dynamic +Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ViewContext() -> void +Microsoft.AspNetCore.Mvc.SkipStatusCodePagesAttribute +Microsoft.AspNetCore.Mvc.SkipStatusCodePagesAttribute.SkipStatusCodePagesAttribute() -> void +Microsoft.AspNetCore.Mvc.TempDataAttribute +Microsoft.AspNetCore.Mvc.TempDataAttribute.TempDataAttribute() -> void +Microsoft.AspNetCore.Mvc.ValidateAntiForgeryTokenAttribute +Microsoft.AspNetCore.Mvc.ValidateAntiForgeryTokenAttribute.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.ValidateAntiForgeryTokenAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.ValidateAntiForgeryTokenAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.ValidateAntiForgeryTokenAttribute.ValidateAntiForgeryTokenAttribute() -> void +Microsoft.AspNetCore.Mvc.ViewComponent +Microsoft.AspNetCore.Mvc.ViewComponent.ViewBag.get -> dynamic +Microsoft.AspNetCore.Mvc.ViewComponent.ViewComponent() -> void +Microsoft.AspNetCore.Mvc.ViewComponentAttribute +Microsoft.AspNetCore.Mvc.ViewComponentAttribute.ViewComponentAttribute() -> void +Microsoft.AspNetCore.Mvc.ViewComponentResult +Microsoft.AspNetCore.Mvc.ViewComponentResult.StatusCode.get -> int? +Microsoft.AspNetCore.Mvc.ViewComponentResult.StatusCode.set -> void +Microsoft.AspNetCore.Mvc.ViewComponentResult.ViewComponentResult() -> void +Microsoft.AspNetCore.Mvc.ViewComponents.ContentViewComponentResult +Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentDescriptorCollectionProvider +Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentDescriptorProvider +Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentFactory +Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentHelper +Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentSelector +Microsoft.AspNetCore.Mvc.ViewComponents.HtmlContentViewComponentResult +Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentActivator +Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentDescriptorCollectionProvider +Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentDescriptorProvider +Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentFactory +Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentInvoker +Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentInvokerFactory +Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentSelector +Microsoft.AspNetCore.Mvc.ViewComponents.ServiceBasedViewComponentActivator +Microsoft.AspNetCore.Mvc.ViewComponents.ServiceBasedViewComponentActivator.ServiceBasedViewComponentActivator() -> void +Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext +Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext.ViewComponentContext() -> void +Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContextAttribute +Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContextAttribute.ViewComponentContextAttribute() -> void +Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentConventions +Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor +Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.ViewComponentDescriptor() -> void +Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptorCollection +Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptorCollection.Version.get -> int +Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentFeature +Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentFeature.ViewComponentFeature() -> void +Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentFeatureProvider +Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentFeatureProvider.ViewComponentFeatureProvider() -> void +Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult +Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult.ViewViewComponentResult() -> void +Microsoft.AspNetCore.Mvc.ViewDataAttribute +Microsoft.AspNetCore.Mvc.ViewDataAttribute.ViewDataAttribute() -> void +Microsoft.AspNetCore.Mvc.ViewEngines.CompositeViewEngine +Microsoft.AspNetCore.Mvc.ViewEngines.ICompositeViewEngine +Microsoft.AspNetCore.Mvc.ViewEngines.IView +Microsoft.AspNetCore.Mvc.ViewEngines.IViewEngine +Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult +Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.Success.get -> bool +Microsoft.AspNetCore.Mvc.ViewFeatures.AntiforgeryExtensions +Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary +Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.AttributeDictionary() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Clear() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Count.get -> int +Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Enumerator +Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Enumerator.Dispose() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Enumerator.MoveNext() -> bool +Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Enumerator.Reset() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.GetEnumerator() -> Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Enumerator +Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.IsReadOnly.get -> bool +Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.IViewBufferScope +Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.ViewBufferValue +Microsoft.AspNetCore.Mvc.ViewFeatures.CookieTempDataProvider +Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator +Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.AllowRenderingMaxLengthAttribute.get -> bool +Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGeneratorExtensions +Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultValidationHtmlAttributeProvider +Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext +Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext.CanRenderAtEndOfForm.get -> bool +Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext.CanRenderAtEndOfForm.set -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext.FormContext() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext.HasAntiforgeryToken.get -> bool +Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext.HasAntiforgeryToken.set -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext.HasEndOfFormContent.get -> bool +Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext.HasFormData.get -> bool +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.EndForm() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Html5DateRenderingMode.get -> Microsoft.AspNetCore.Mvc.Rendering.Html5DateRenderingMode +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Html5DateRenderingMode.set -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ViewBag.get -> dynamic +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions.CheckBoxHiddenInputRenderMode.get -> Microsoft.AspNetCore.Mvc.Rendering.CheckBoxHiddenInputRenderMode +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions.CheckBoxHiddenInputRenderMode.set -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions.ClientValidationEnabled.get -> bool +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions.ClientValidationEnabled.set -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions.Html5DateRenderingMode.get -> Microsoft.AspNetCore.Mvc.Rendering.Html5DateRenderingMode +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions.Html5DateRenderingMode.set -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions.HtmlHelperOptions() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.IAntiforgeryPolicy +Microsoft.AspNetCore.Mvc.ViewFeatures.IFileVersionProvider +Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator +Microsoft.AspNetCore.Mvc.ViewFeatures.IModelExpressionProvider +Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary.Keep() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary.Load() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary.Save() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionaryFactory +Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataProvider +Microsoft.AspNetCore.Mvc.ViewFeatures.IViewContextAware +Microsoft.AspNetCore.Mvc.ViewFeatures.Infrastructure.TempDataSerializer +Microsoft.AspNetCore.Mvc.ViewFeatures.Infrastructure.TempDataSerializer.TempDataSerializer() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.InputType +Microsoft.AspNetCore.Mvc.ViewFeatures.InputType.CheckBox = 0 -> Microsoft.AspNetCore.Mvc.ViewFeatures.InputType +Microsoft.AspNetCore.Mvc.ViewFeatures.InputType.Hidden = 1 -> Microsoft.AspNetCore.Mvc.ViewFeatures.InputType +Microsoft.AspNetCore.Mvc.ViewFeatures.InputType.Password = 2 -> Microsoft.AspNetCore.Mvc.ViewFeatures.InputType +Microsoft.AspNetCore.Mvc.ViewFeatures.InputType.Radio = 3 -> Microsoft.AspNetCore.Mvc.ViewFeatures.InputType +Microsoft.AspNetCore.Mvc.ViewFeatures.InputType.Text = 4 -> Microsoft.AspNetCore.Mvc.ViewFeatures.InputType +Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorerExtensions +Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression +Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpressionProvider +Microsoft.AspNetCore.Mvc.ViewFeatures.ModelMetadataProviderExtensions +Microsoft.AspNetCore.Mvc.ViewFeatures.PartialViewResultExecutor +Microsoft.AspNetCore.Mvc.ViewFeatures.SaveTempDataAttribute +Microsoft.AspNetCore.Mvc.ViewFeatures.SaveTempDataAttribute.IsReusable.get -> bool +Microsoft.AspNetCore.Mvc.ViewFeatures.SaveTempDataAttribute.Order.get -> int +Microsoft.AspNetCore.Mvc.ViewFeatures.SaveTempDataAttribute.Order.set -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.SaveTempDataAttribute.SaveTempDataAttribute() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.SessionStateTempDataProvider +Microsoft.AspNetCore.Mvc.ViewFeatures.StringHtmlContent +Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary +Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.Clear() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.Count.get -> int +Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.Keep() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.Load() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.Save() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionaryFactory +Microsoft.AspNetCore.Mvc.ViewFeatures.TemplateInfo +Microsoft.AspNetCore.Mvc.ViewFeatures.TemplateInfo.TemplateDepth.get -> int +Microsoft.AspNetCore.Mvc.ViewFeatures.TemplateInfo.TemplateInfo() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.TryGetValueDelegate +Microsoft.AspNetCore.Mvc.ViewFeatures.TryGetValueProvider +Microsoft.AspNetCore.Mvc.ViewFeatures.ValidationHtmlAttributeProvider +Microsoft.AspNetCore.Mvc.ViewFeatures.ValidationHtmlAttributeProvider.ValidationHtmlAttributeProvider() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewComponentResultExecutor +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewContextAttribute +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewContextAttribute.ViewContextAttribute() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Clear() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Count.get -> int +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.IsReadOnly.get -> bool +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Model.get -> TModel +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Model.set -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionaryAttribute +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionaryAttribute.ViewDataDictionaryAttribute() -> void +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionaryControllerPropertyActivator +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataEvaluator +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataInfo +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor +Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor +Microsoft.AspNetCore.Mvc.ViewResult +Microsoft.AspNetCore.Mvc.ViewResult.StatusCode.get -> int? +Microsoft.AspNetCore.Mvc.ViewResult.StatusCode.set -> void +Microsoft.AspNetCore.Mvc.ViewResult.ViewResult() -> void +Microsoft.Extensions.DependencyInjection.MvcViewFeaturesMvcBuilderExtensions +Microsoft.Extensions.DependencyInjection.MvcViewFeaturesMvcCoreBuilderExtensions +virtual Microsoft.AspNetCore.Mvc.Controller.Dispose(bool disposing) -> void +virtual Microsoft.AspNetCore.Mvc.Rendering.MvcForm.GenerateEndForm() -> void +~Microsoft.AspNetCore.Mvc.AutoValidateAntiforgeryTokenAttribute.CreateInstance(System.IServiceProvider serviceProvider) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.Controller.TempData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.Controller.TempData.set -> void +~Microsoft.AspNetCore.Mvc.Controller.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.Controller.ViewData.set -> void +~Microsoft.AspNetCore.Mvc.CookieTempDataProviderOptions.Cookie.get -> Microsoft.AspNetCore.Http.CookieBuilder +~Microsoft.AspNetCore.Mvc.CookieTempDataProviderOptions.Cookie.set -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewComponentEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewComponentEventData.AfterViewComponentEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext viewComponentContext, Microsoft.AspNetCore.Mvc.IViewComponentResult viewComponentResult, object viewComponent) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewComponentEventData.ViewComponent.get -> object +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewComponentEventData.ViewComponentContext.get -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewComponentEventData.ViewComponentResult.get -> Microsoft.AspNetCore.Mvc.IViewComponentResult +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewEventData.AfterViewEventData(Microsoft.AspNetCore.Mvc.ViewEngines.IView view, Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewEventData.View.get -> Microsoft.AspNetCore.Mvc.ViewEngines.IView +~Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewEventData.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewComponentEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewComponentEventData.BeforeViewComponentEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext viewComponentContext, object viewComponent) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewComponentEventData.ViewComponent.get -> object +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewComponentEventData.ViewComponentContext.get -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewEventData.BeforeViewEventData(Microsoft.AspNetCore.Mvc.ViewEngines.IView view, Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewEventData.View.get -> Microsoft.AspNetCore.Mvc.ViewEngines.IView +~Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewEventData.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewComponentAfterViewExecuteEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewComponentAfterViewExecuteEventData.View.get -> Microsoft.AspNetCore.Mvc.ViewEngines.IView +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewComponentAfterViewExecuteEventData.ViewComponentAfterViewExecuteEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext viewComponentContext, Microsoft.AspNetCore.Mvc.ViewEngines.IView view) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewComponentAfterViewExecuteEventData.ViewComponentContext.get -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewComponentBeforeViewExecuteEventData.ActionDescriptor.get -> Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewComponentBeforeViewExecuteEventData.View.get -> Microsoft.AspNetCore.Mvc.ViewEngines.IView +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewComponentBeforeViewExecuteEventData.ViewComponentBeforeViewExecuteEventData(Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor actionDescriptor, Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext viewComponentContext, Microsoft.AspNetCore.Mvc.ViewEngines.IView view) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewComponentBeforeViewExecuteEventData.ViewComponentContext.get -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewFoundEventData.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewFoundEventData.Result.get -> Microsoft.AspNetCore.Mvc.ActionResult +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewFoundEventData.View.get -> Microsoft.AspNetCore.Mvc.ViewEngines.IView +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewFoundEventData.ViewFoundEventData(Microsoft.AspNetCore.Mvc.ActionContext actionContext, bool isMainPage, Microsoft.AspNetCore.Mvc.ActionResult result, string viewName, Microsoft.AspNetCore.Mvc.ViewEngines.IView view) -> void +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewFoundEventData.ViewName.get -> string +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewNotFoundEventData.ActionContext.get -> Microsoft.AspNetCore.Mvc.ActionContext +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewNotFoundEventData.Result.get -> Microsoft.AspNetCore.Mvc.ActionResult +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewNotFoundEventData.SearchedLocations.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewNotFoundEventData.ViewName.get -> string +~Microsoft.AspNetCore.Mvc.Diagnostics.ViewNotFoundEventData.ViewNotFoundEventData(Microsoft.AspNetCore.Mvc.ActionContext actionContext, bool isMainPage, Microsoft.AspNetCore.Mvc.ActionResult result, string viewName, System.Collections.Generic.IEnumerable searchedLocations) -> void +~Microsoft.AspNetCore.Mvc.IViewComponentHelper.InvokeAsync(System.Type componentType, object arguments) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.IViewComponentHelper.InvokeAsync(string name, object arguments) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.IViewComponentResult.Execute(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> void +~Microsoft.AspNetCore.Mvc.IViewComponentResult.ExecuteAsync(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.MvcViewOptions.ClientModelValidatorProviders.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.MvcViewOptions.HtmlHelperOptions.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions +~Microsoft.AspNetCore.Mvc.MvcViewOptions.HtmlHelperOptions.set -> void +~Microsoft.AspNetCore.Mvc.MvcViewOptions.ViewEngines.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.PageRemoteAttribute.PageHandler.get -> string +~Microsoft.AspNetCore.Mvc.PageRemoteAttribute.PageHandler.set -> void +~Microsoft.AspNetCore.Mvc.PageRemoteAttribute.PageName.get -> string +~Microsoft.AspNetCore.Mvc.PageRemoteAttribute.PageName.set -> void +~Microsoft.AspNetCore.Mvc.PartialViewResult.ContentType.get -> string +~Microsoft.AspNetCore.Mvc.PartialViewResult.ContentType.set -> void +~Microsoft.AspNetCore.Mvc.PartialViewResult.Model.get -> object +~Microsoft.AspNetCore.Mvc.PartialViewResult.TempData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.PartialViewResult.TempData.set -> void +~Microsoft.AspNetCore.Mvc.PartialViewResult.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.PartialViewResult.ViewData.set -> void +~Microsoft.AspNetCore.Mvc.PartialViewResult.ViewEngine.get -> Microsoft.AspNetCore.Mvc.ViewEngines.IViewEngine +~Microsoft.AspNetCore.Mvc.PartialViewResult.ViewEngine.set -> void +~Microsoft.AspNetCore.Mvc.PartialViewResult.ViewName.get -> string +~Microsoft.AspNetCore.Mvc.PartialViewResult.ViewName.set -> void +~Microsoft.AspNetCore.Mvc.RemoteAttribute.RemoteAttribute(string action, string controller) -> void +~Microsoft.AspNetCore.Mvc.RemoteAttribute.RemoteAttribute(string action, string controller, string areaName) -> void +~Microsoft.AspNetCore.Mvc.RemoteAttribute.RemoteAttribute(string routeName) -> void +~Microsoft.AspNetCore.Mvc.RemoteAttribute.RouteName.get -> string +~Microsoft.AspNetCore.Mvc.RemoteAttribute.RouteName.set -> void +~Microsoft.AspNetCore.Mvc.RemoteAttributeBase.AdditionalFields.get -> string +~Microsoft.AspNetCore.Mvc.RemoteAttributeBase.AdditionalFields.set -> void +~Microsoft.AspNetCore.Mvc.RemoteAttributeBase.FormatAdditionalFieldsForClientValidation(string property) -> string +~Microsoft.AspNetCore.Mvc.RemoteAttributeBase.HttpMethod.get -> string +~Microsoft.AspNetCore.Mvc.RemoteAttributeBase.HttpMethod.set -> void +~Microsoft.AspNetCore.Mvc.RemoteAttributeBase.RouteData.get -> Microsoft.AspNetCore.Routing.RouteValueDictionary +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.ActionLink(string linkText, string actionName, string controllerName, string protocol, string hostname, string fragment, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.AntiForgeryToken() -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.BeginForm(string actionName, string controllerName, object routeValues, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method, bool? antiforgery, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.BeginRouteForm(string routeName, object routeValues, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method, bool? antiforgery, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.CheckBox(string expression, bool? isChecked, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Display(string expression, string templateName, string htmlFieldName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.DisplayName(string expression) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.DisplayText(string expression) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.DropDownList(string expression, System.Collections.Generic.IEnumerable selectList, string optionLabel, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Editor(string expression, string templateName, string htmlFieldName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Encode(object value) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Encode(string value) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.FormatValue(object value, string format) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.GenerateIdFromName(string fullName) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.GetEnumSelectList(System.Type enumType) -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.GetEnumSelectList() -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Hidden(string expression, object value, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Id(string expression) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.IdAttributeDotReplacement.get -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Label(string expression, string labelText, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.ListBox(string expression, System.Collections.Generic.IEnumerable selectList, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.MetadataProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Name(string expression) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.PartialAsync(string partialViewName, object model, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Password(string expression, object value, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.RadioButton(string expression, object value, bool? isChecked, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Raw(object value) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Raw(string value) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.RenderPartialAsync(string partialViewName, object model, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.RouteLink(string linkText, string routeName, string protocol, string hostName, string fragment, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.TempData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.TextArea(string expression, string value, int rows, int columns, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.TextBox(string expression, object value, string format, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.UrlEncoder.get -> System.Text.Encodings.Web.UrlEncoder +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.ValidationMessage(string expression, string message, object htmlAttributes, string tag) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.ValidationSummary(bool excludePropertyErrors, string message, object htmlAttributes, string tag) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Value(string expression, string format) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.CheckBoxFor(System.Linq.Expressions.Expression> expression, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.DisplayFor(System.Linq.Expressions.Expression> expression, string templateName, string htmlFieldName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.DisplayNameFor(System.Linq.Expressions.Expression> expression) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.DisplayNameForInnerType(System.Linq.Expressions.Expression> expression) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.DisplayTextFor(System.Linq.Expressions.Expression> expression) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.DropDownListFor(System.Linq.Expressions.Expression> expression, System.Collections.Generic.IEnumerable selectList, string optionLabel, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.EditorFor(System.Linq.Expressions.Expression> expression, string templateName, string htmlFieldName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Encode(object value) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Encode(string value) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.HiddenFor(System.Linq.Expressions.Expression> expression, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.IdFor(System.Linq.Expressions.Expression> expression) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.LabelFor(System.Linq.Expressions.Expression> expression, string labelText, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.ListBoxFor(System.Linq.Expressions.Expression> expression, System.Collections.Generic.IEnumerable selectList, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.NameFor(System.Linq.Expressions.Expression> expression) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.PasswordFor(System.Linq.Expressions.Expression> expression, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.RadioButtonFor(System.Linq.Expressions.Expression> expression, object value, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Raw(object value) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.Raw(string value) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.TextAreaFor(System.Linq.Expressions.Expression> expression, int rows, int columns, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.TextBoxFor(System.Linq.Expressions.Expression> expression, string format, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.ValidationMessageFor(System.Linq.Expressions.Expression> expression, string message, object htmlAttributes, string tag) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.ValueFor(System.Linq.Expressions.Expression> expression, string format) -> string +~Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.Rendering.IJsonHelper.Serialize(object value) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.DataGroupField.get -> string +~Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.DataTextField.get -> string +~Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.DataValueField.get -> string +~Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.Items.get -> System.Collections.IEnumerable +~Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.MultiSelectList(System.Collections.IEnumerable items) -> void +~Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.MultiSelectList(System.Collections.IEnumerable items, System.Collections.IEnumerable selectedValues) -> void +~Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.MultiSelectList(System.Collections.IEnumerable items, string dataValueField, string dataTextField) -> void +~Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.MultiSelectList(System.Collections.IEnumerable items, string dataValueField, string dataTextField, System.Collections.IEnumerable selectedValues) -> void +~Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.MultiSelectList(System.Collections.IEnumerable items, string dataValueField, string dataTextField, System.Collections.IEnumerable selectedValues, string dataGroupField) -> void +~Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.SelectedValues.get -> System.Collections.IEnumerable +~Microsoft.AspNetCore.Mvc.Rendering.MvcForm.MvcForm(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, System.Text.Encodings.Web.HtmlEncoder htmlEncoder) -> void +~Microsoft.AspNetCore.Mvc.Rendering.SelectList.SelectList(System.Collections.IEnumerable items) -> void +~Microsoft.AspNetCore.Mvc.Rendering.SelectList.SelectList(System.Collections.IEnumerable items, object selectedValue) -> void +~Microsoft.AspNetCore.Mvc.Rendering.SelectList.SelectList(System.Collections.IEnumerable items, string dataValueField, string dataTextField) -> void +~Microsoft.AspNetCore.Mvc.Rendering.SelectList.SelectList(System.Collections.IEnumerable items, string dataValueField, string dataTextField, object selectedValue) -> void +~Microsoft.AspNetCore.Mvc.Rendering.SelectList.SelectList(System.Collections.IEnumerable items, string dataValueField, string dataTextField, object selectedValue, string dataGroupField) -> void +~Microsoft.AspNetCore.Mvc.Rendering.SelectList.SelectedValue.get -> object +~Microsoft.AspNetCore.Mvc.Rendering.SelectListGroup.Name.get -> string +~Microsoft.AspNetCore.Mvc.Rendering.SelectListGroup.Name.set -> void +~Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.Group.get -> Microsoft.AspNetCore.Mvc.Rendering.SelectListGroup +~Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.Group.set -> void +~Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.SelectListItem(string text, string value) -> void +~Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.SelectListItem(string text, string value, bool selected) -> void +~Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.SelectListItem(string text, string value, bool selected, bool disabled) -> void +~Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.Text.get -> string +~Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.Text.set -> void +~Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.Value.get -> string +~Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.Value.set -> void +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.AddCssClass(string value) -> void +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.Attributes.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.GenerateId(string name, string invalidCharReplacement) -> void +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.InnerHtml.get -> Microsoft.AspNetCore.Html.IHtmlContentBuilder +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.MergeAttribute(string key, string value) -> void +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.MergeAttribute(string key, string value, bool replaceExisting) -> void +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.MergeAttributes(System.Collections.Generic.IDictionary attributes) -> void +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.MergeAttributes(System.Collections.Generic.IDictionary attributes, bool replaceExisting) -> void +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.RenderBody() -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.RenderEndTag() -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.RenderSelfClosingTag() -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.RenderStartTag() -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.TagBuilder(Microsoft.AspNetCore.Mvc.Rendering.TagBuilder tagBuilder) -> void +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.TagBuilder(string tagName) -> void +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.TagName.get -> string +~Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.WriteTo(System.IO.TextWriter writer, System.Text.Encodings.Web.HtmlEncoder encoder) -> void +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ExecutingFilePath.get -> string +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ExecutingFilePath.set -> void +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.GetFormContextForClientValidation() -> Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.TempData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.TempData.set -> void +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ValidationMessageElement.get -> string +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ValidationMessageElement.set -> void +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ValidationSummaryMessageElement.get -> string +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ValidationSummaryMessageElement.set -> void +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.View.get -> Microsoft.AspNetCore.Mvc.ViewEngines.IView +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.View.set -> void +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ViewContext(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ViewEngines.IView view, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData, Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary tempData, System.IO.TextWriter writer, Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions htmlHelperOptions) -> void +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ViewContext(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewEngines.IView view, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData, System.IO.TextWriter writer) -> void +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.ViewData.set -> void +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.Writer.get -> System.IO.TextWriter +~Microsoft.AspNetCore.Mvc.Rendering.ViewContext.Writer.set -> void +~Microsoft.AspNetCore.Mvc.SkipStatusCodePagesAttribute.OnResourceExecuted(Microsoft.AspNetCore.Mvc.Filters.ResourceExecutedContext context) -> void +~Microsoft.AspNetCore.Mvc.SkipStatusCodePagesAttribute.OnResourceExecuting(Microsoft.AspNetCore.Mvc.Filters.ResourceExecutingContext context) -> void +~Microsoft.AspNetCore.Mvc.TempDataAttribute.Key.get -> string +~Microsoft.AspNetCore.Mvc.TempDataAttribute.Key.set -> void +~Microsoft.AspNetCore.Mvc.ValidateAntiForgeryTokenAttribute.CreateInstance(System.IServiceProvider serviceProvider) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.ViewComponent.Content(string content) -> Microsoft.AspNetCore.Mvc.ViewComponents.ContentViewComponentResult +~Microsoft.AspNetCore.Mvc.ViewComponent.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext +~Microsoft.AspNetCore.Mvc.ViewComponent.ModelState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary +~Microsoft.AspNetCore.Mvc.ViewComponent.Request.get -> Microsoft.AspNetCore.Http.HttpRequest +~Microsoft.AspNetCore.Mvc.ViewComponent.RouteData.get -> Microsoft.AspNetCore.Routing.RouteData +~Microsoft.AspNetCore.Mvc.ViewComponent.TempData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.ViewComponent.Url.get -> Microsoft.AspNetCore.Mvc.IUrlHelper +~Microsoft.AspNetCore.Mvc.ViewComponent.Url.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponent.User.get -> System.Security.Principal.IPrincipal +~Microsoft.AspNetCore.Mvc.ViewComponent.UserClaimsPrincipal.get -> System.Security.Claims.ClaimsPrincipal +~Microsoft.AspNetCore.Mvc.ViewComponent.View() -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult +~Microsoft.AspNetCore.Mvc.ViewComponent.View(string viewName) -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult +~Microsoft.AspNetCore.Mvc.ViewComponent.View(TModel model) -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult +~Microsoft.AspNetCore.Mvc.ViewComponent.View(string viewName, TModel model) -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult +~Microsoft.AspNetCore.Mvc.ViewComponent.ViewComponentContext.get -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext +~Microsoft.AspNetCore.Mvc.ViewComponent.ViewComponentContext.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponent.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.ViewComponent.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.ViewComponent.ViewEngine.get -> Microsoft.AspNetCore.Mvc.ViewEngines.ICompositeViewEngine +~Microsoft.AspNetCore.Mvc.ViewComponent.ViewEngine.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponentAttribute.Name.get -> string +~Microsoft.AspNetCore.Mvc.ViewComponentAttribute.Name.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponentResult.Arguments.get -> object +~Microsoft.AspNetCore.Mvc.ViewComponentResult.Arguments.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponentResult.ContentType.get -> string +~Microsoft.AspNetCore.Mvc.ViewComponentResult.ContentType.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponentResult.Model.get -> object +~Microsoft.AspNetCore.Mvc.ViewComponentResult.TempData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.ViewComponentResult.TempData.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponentResult.ViewComponentName.get -> string +~Microsoft.AspNetCore.Mvc.ViewComponentResult.ViewComponentName.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponentResult.ViewComponentType.get -> System.Type +~Microsoft.AspNetCore.Mvc.ViewComponentResult.ViewComponentType.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponentResult.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.ViewComponentResult.ViewData.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ContentViewComponentResult.Content.get -> string +~Microsoft.AspNetCore.Mvc.ViewComponents.ContentViewComponentResult.ContentViewComponentResult(string content) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ContentViewComponentResult.Execute(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ContentViewComponentResult.ExecuteAsync(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentDescriptorCollectionProvider.DefaultViewComponentDescriptorCollectionProvider(Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentDescriptorProvider descriptorProvider) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentDescriptorCollectionProvider.ViewComponents.get -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptorCollection +~Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentDescriptorProvider.DefaultViewComponentDescriptorProvider(Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartManager partManager) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentFactory.CreateViewComponent(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> object +~Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentFactory.DefaultViewComponentFactory(Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentActivator activator) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentFactory.ReleaseViewComponent(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context, object component) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentHelper.Contextualize(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentHelper.DefaultViewComponentHelper(Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentDescriptorCollectionProvider descriptorProvider, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentSelector selector, Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentInvokerFactory invokerFactory, Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.IViewBufferScope viewBufferScope) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentHelper.InvokeAsync(System.Type componentType, object arguments) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentHelper.InvokeAsync(string name, object arguments) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentSelector.DefaultViewComponentSelector(Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentDescriptorCollectionProvider descriptorProvider) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentSelector.SelectComponent(string componentName) -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor +~Microsoft.AspNetCore.Mvc.ViewComponents.HtmlContentViewComponentResult.EncodedContent.get -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewComponents.HtmlContentViewComponentResult.Execute(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.HtmlContentViewComponentResult.ExecuteAsync(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ViewComponents.HtmlContentViewComponentResult.HtmlContentViewComponentResult(Microsoft.AspNetCore.Html.IHtmlContent encodedContent) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentActivator.Create(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> object +~Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentActivator.Release(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context, object viewComponent) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentDescriptorCollectionProvider.ViewComponents.get -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptorCollection +~Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentDescriptorProvider.GetViewComponents() -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentFactory.CreateViewComponent(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> object +~Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentFactory.ReleaseViewComponent(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context, object component) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentInvoker.InvokeAsync(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentInvokerFactory.CreateInstance(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentInvoker +~Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentSelector.SelectComponent(string componentName) -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor +~Microsoft.AspNetCore.Mvc.ViewComponents.ServiceBasedViewComponentActivator.Create(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> object +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext.Arguments.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext.Arguments.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext.HtmlEncoder.get -> System.Text.Encodings.Web.HtmlEncoder +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext.HtmlEncoder.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext.TempData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext.ViewComponentContext(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor viewComponentDescriptor, System.Collections.Generic.IDictionary arguments, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, System.IO.TextWriter writer) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext.ViewComponentDescriptor.get -> Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext.ViewComponentDescriptor.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext.ViewContext.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext.Writer.get -> System.IO.TextWriter +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.DisplayName.get -> string +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.DisplayName.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.FullName.get -> string +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.FullName.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.Id.get -> string +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.Id.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.MethodInfo.get -> System.Reflection.MethodInfo +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.MethodInfo.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.Parameters.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.Parameters.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.ShortName.get -> string +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.ShortName.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.TypeInfo.get -> System.Reflection.TypeInfo +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptor.TypeInfo.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptorCollection.Items.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentDescriptorCollection.ViewComponentDescriptorCollection(System.Collections.Generic.IEnumerable items, int version) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentFeature.ViewComponents.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentFeatureProvider.PopulateFeature(System.Collections.Generic.IEnumerable parts, Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentFeature feature) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult.Execute(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult.ExecuteAsync(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult.TempData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult.TempData.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult.ViewData.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult.ViewEngine.get -> Microsoft.AspNetCore.Mvc.ViewEngines.IViewEngine +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult.ViewEngine.set -> void +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult.ViewName.get -> string +~Microsoft.AspNetCore.Mvc.ViewComponents.ViewViewComponentResult.ViewName.set -> void +~Microsoft.AspNetCore.Mvc.ViewDataAttribute.Key.get -> string +~Microsoft.AspNetCore.Mvc.ViewDataAttribute.Key.set -> void +~Microsoft.AspNetCore.Mvc.ViewEngines.CompositeViewEngine.CompositeViewEngine(Microsoft.Extensions.Options.IOptions optionsAccessor) -> void +~Microsoft.AspNetCore.Mvc.ViewEngines.CompositeViewEngine.FindView(Microsoft.AspNetCore.Mvc.ActionContext context, string viewName, bool isMainPage) -> Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult +~Microsoft.AspNetCore.Mvc.ViewEngines.CompositeViewEngine.GetView(string executingFilePath, string viewPath, bool isMainPage) -> Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult +~Microsoft.AspNetCore.Mvc.ViewEngines.CompositeViewEngine.ViewEngines.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ViewEngines.ICompositeViewEngine.ViewEngines.get -> System.Collections.Generic.IReadOnlyList +~Microsoft.AspNetCore.Mvc.ViewEngines.IView.Path.get -> string +~Microsoft.AspNetCore.Mvc.ViewEngines.IView.RenderAsync(Microsoft.AspNetCore.Mvc.Rendering.ViewContext context) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ViewEngines.IViewEngine.FindView(Microsoft.AspNetCore.Mvc.ActionContext context, string viewName, bool isMainPage) -> Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult +~Microsoft.AspNetCore.Mvc.ViewEngines.IViewEngine.GetView(string executingFilePath, string viewPath, bool isMainPage) -> Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult +~Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.EnsureSuccessful(System.Collections.Generic.IEnumerable originalLocations) -> Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult +~Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.SearchedLocations.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.View.get -> Microsoft.AspNetCore.Mvc.ViewEngines.IView +~Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.ViewName.get -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Add(System.Collections.Generic.KeyValuePair item) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Add(string key, string value) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Contains(System.Collections.Generic.KeyValuePair item) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.ContainsKey(string key) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.CopyTo(System.Collections.Generic.KeyValuePair[] array, int arrayIndex) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Enumerator.Current.get -> System.Collections.Generic.KeyValuePair +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Enumerator.Enumerator(Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary attributes) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Keys.get -> System.Collections.Generic.ICollection +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Remove(System.Collections.Generic.KeyValuePair item) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Remove(string key) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.TryGetValue(string key, out string value) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.Values.get -> System.Collections.Generic.ICollection +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.this[string key].get -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.AttributeDictionary.this[string key].set -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.IViewBufferScope.CreateWriter(System.IO.TextWriter writer) -> System.IO.TextWriter +~Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.IViewBufferScope.GetPage(int pageSize) -> Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.ViewBufferValue[] +~Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.IViewBufferScope.ReturnSegment(Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.ViewBufferValue[] segment) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.ViewBufferValue.Value.get -> object +~Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.ViewBufferValue.ViewBufferValue(Microsoft.AspNetCore.Html.IHtmlContent content) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.ViewBufferValue.ViewBufferValue(string value) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.CookieTempDataProvider.CookieTempDataProvider(Microsoft.AspNetCore.DataProtection.IDataProtectionProvider dataProtectionProvider, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.Extensions.Options.IOptions options, Microsoft.AspNetCore.Mvc.ViewFeatures.Infrastructure.TempDataSerializer tempDataSerializer) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.CookieTempDataProvider.LoadTempData(Microsoft.AspNetCore.Http.HttpContext context) -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ViewFeatures.CookieTempDataProvider.SaveTempData(Microsoft.AspNetCore.Http.HttpContext context, System.Collections.Generic.IDictionary values) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.DefaultHtmlGenerator(Microsoft.AspNetCore.Antiforgery.IAntiforgery antiforgery, Microsoft.Extensions.Options.IOptions optionsAccessor, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.AspNetCore.Mvc.Routing.IUrlHelperFactory urlHelperFactory, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, Microsoft.AspNetCore.Mvc.ViewFeatures.ValidationHtmlAttributeProvider validationAttributeProvider) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.Encode(object value) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.Encode(string value) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.FormatValue(object value, string format) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateGroupsAndOptions(string optionLabel, System.Collections.Generic.IEnumerable selectList) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateRouteForm(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string routeName, object routeValues, string method, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateSelect(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string optionLabel, string expression, System.Collections.Generic.IEnumerable selectList, bool allowMultiple, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.IdAttributeDotReplacement.get -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultValidationHtmlAttributeProvider.DefaultValidationHtmlAttributeProvider(Microsoft.Extensions.Options.IOptions optionsAccessor, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientValidatorCache clientValidatorCache) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext.EndOfFormContent.get -> System.Collections.Generic.IList +~Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext.FormData.get -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext.RenderedField(string fieldName) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext.RenderedField(string fieldName, bool value) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ActionLink(string linkText, string actionName, string controllerName, string protocol, string hostname, string fragment, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.AntiForgeryToken() -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.BeginForm(string actionName, string controllerName, object routeValues, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method, bool? antiforgery, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.BeginRouteForm(string routeName, object routeValues, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method, bool? antiforgery, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.CheckBox(string expression, bool? isChecked, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Display(string expression, string templateName, string htmlFieldName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.DisplayName(string expression) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.DisplayText(string expression) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.DropDownList(string expression, System.Collections.Generic.IEnumerable selectList, string optionLabel, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Editor(string expression, string templateName, string htmlFieldName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Encode(object value) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Encode(string value) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.FormatValue(object value, string format) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateDropDown(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, System.Collections.Generic.IEnumerable selectList, string optionLabel, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateIdFromName(string fullName) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateListBox(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, System.Collections.Generic.IEnumerable selectList, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GetEnumSelectList(System.Type enumType) -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GetEnumSelectList() -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Hidden(string expression, object value, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.HtmlHelper(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator htmlGenerator, Microsoft.AspNetCore.Mvc.ViewEngines.ICompositeViewEngine viewEngine, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.IViewBufferScope bufferScope, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, System.Text.Encodings.Web.UrlEncoder urlEncoder) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Id(string expression) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.IdAttributeDotReplacement.get -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Label(string expression, string labelText, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ListBox(string expression, System.Collections.Generic.IEnumerable selectList, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.MetadataProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Name(string expression) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.PartialAsync(string partialViewName, object model, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Password(string expression, object value, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.RadioButton(string expression, object value, bool? isChecked, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Raw(object value) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Raw(string value) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.RenderPartialAsync(string partialViewName, object model, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.RouteLink(string linkText, string routeName, string protocol, string hostName, string fragment, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.TempData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.TextArea(string expression, string value, int rows, int columns, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.TextBox(string expression, object value, string format, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.UrlEncoder.get -> System.Text.Encodings.Web.UrlEncoder +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ValidationMessage(string expression, string message, object htmlAttributes, string tag) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ValidationSummary(bool excludePropertyErrors, string message, object htmlAttributes, string tag) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Value(string expression, string format) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ViewContext.get -> Microsoft.AspNetCore.Mvc.Rendering.ViewContext +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.CheckBoxFor(System.Linq.Expressions.Expression> expression, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.DisplayFor(System.Linq.Expressions.Expression> expression, string templateName, string htmlFieldName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.DisplayNameFor(System.Linq.Expressions.Expression> expression) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.DisplayNameForInnerType(System.Linq.Expressions.Expression> expression) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.DisplayTextFor(System.Linq.Expressions.Expression> expression) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.DropDownListFor(System.Linq.Expressions.Expression> expression, System.Collections.Generic.IEnumerable selectList, string optionLabel, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.EditorFor(System.Linq.Expressions.Expression> expression, string templateName, string htmlFieldName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GetExpressionName(System.Linq.Expressions.Expression> expression) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GetModelExplorer(System.Linq.Expressions.Expression> expression) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.HiddenFor(System.Linq.Expressions.Expression> expression, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.HtmlHelper(Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator htmlGenerator, Microsoft.AspNetCore.Mvc.ViewEngines.ICompositeViewEngine viewEngine, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.IViewBufferScope bufferScope, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, System.Text.Encodings.Web.UrlEncoder urlEncoder, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpressionProvider modelExpressionProvider) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.IdFor(System.Linq.Expressions.Expression> expression) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.LabelFor(System.Linq.Expressions.Expression> expression, string labelText, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ListBoxFor(System.Linq.Expressions.Expression> expression, System.Collections.Generic.IEnumerable selectList, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.NameFor(System.Linq.Expressions.Expression> expression) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.PasswordFor(System.Linq.Expressions.Expression> expression, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.RadioButtonFor(System.Linq.Expressions.Expression> expression, object value, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.TextAreaFor(System.Linq.Expressions.Expression> expression, int rows, int columns, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.TextBoxFor(System.Linq.Expressions.Expression> expression, string format, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ValidationMessageFor(System.Linq.Expressions.Expression> expression, string message, object htmlAttributes, string tag) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ValueFor(System.Linq.Expressions.Expression> expression, string format) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions.IdAttributeDotReplacement.get -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions.IdAttributeDotReplacement.set -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions.ValidationMessageElement.get -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions.ValidationMessageElement.set -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions.ValidationSummaryMessageElement.get -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelperOptions.ValidationSummaryMessageElement.set -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.IFileVersionProvider.AddFileVersionToPath(Microsoft.AspNetCore.Http.PathString requestPathBase, string path) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.Encode(object value) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.Encode(string value) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.FormatValue(object value, string format) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateActionLink(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string linkText, string actionName, string controllerName, string protocol, string hostname, string fragment, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateAntiforgery(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateCheckBox(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, bool? isChecked, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateForm(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string actionName, string controllerName, object routeValues, string method, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateGroupsAndOptions(string optionLabel, System.Collections.Generic.IEnumerable selectList) -> Microsoft.AspNetCore.Html.IHtmlContent +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateHidden(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, object value, bool useViewData, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateHiddenForCheckbox(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateLabel(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, string labelText, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GeneratePageForm(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string pageName, string pageHandler, object routeValues, string fragment, string method, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GeneratePageLink(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string linkText, string pageName, string pageHandler, string protocol, string hostname, string fragment, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GeneratePassword(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, object value, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateRadioButton(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, object value, bool? isChecked, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateRouteForm(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string routeName, object routeValues, string method, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateRouteLink(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string linkText, string routeName, string protocol, string hostName, string fragment, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateSelect(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string optionLabel, string expression, System.Collections.Generic.IEnumerable selectList, System.Collections.Generic.ICollection currentValues, bool allowMultiple, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateSelect(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string optionLabel, string expression, System.Collections.Generic.IEnumerable selectList, bool allowMultiple, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateTextArea(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, int rows, int columns, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateTextBox(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, object value, string format, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateValidationMessage(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, string message, string tag, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GenerateValidationSummary(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, bool excludePropertyErrors, string message, string headerTag, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.GetCurrentValues(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, bool allowMultiple) -> System.Collections.Generic.ICollection +~Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator.IdAttributeDotReplacement.get -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.IModelExpressionProvider.CreateModelExpression(Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData, System.Linq.Expressions.Expression> expression) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression +~Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary.Keep(string key) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary.Peek(string key) -> object +~Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionaryFactory.GetTempData(Microsoft.AspNetCore.Http.HttpContext context) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataProvider.LoadTempData(Microsoft.AspNetCore.Http.HttpContext context) -> System.Collections.Generic.IDictionary +~Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataProvider.SaveTempData(Microsoft.AspNetCore.Http.HttpContext context, System.Collections.Generic.IDictionary values) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.IViewContextAware.Contextualize(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.Container.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.GetExplorerForExpression(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, System.Func modelAccessor) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.GetExplorerForExpression(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, object model) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.GetExplorerForExpression(System.Type modelType, System.Func modelAccessor) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.GetExplorerForExpression(System.Type modelType, object model) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.GetExplorerForModel(object model) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.GetExplorerForProperty(string name) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.GetExplorerForProperty(string name, System.Func modelAccessor) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.GetExplorerForProperty(string name, object model) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.Metadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.Model.get -> object +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.ModelExplorer(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, object model) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.ModelExplorer(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer container, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, System.Func modelAccessor) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.ModelExplorer(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer container, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata, object model) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.ModelType.get -> System.Type +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer.Properties.get -> System.Collections.Generic.IEnumerable +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression.Metadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression.Model.get -> object +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression.ModelExplorer.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression.ModelExpression(string name, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression.Name.get -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpressionProvider.CreateModelExpression(Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData, System.Linq.Expressions.Expression> expression) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpressionProvider.CreateModelExpression(Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData, string expression) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpressionProvider.GetExpressionText(System.Linq.Expressions.Expression> expression) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpressionProvider.ModelExpressionProvider(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider modelMetadataProvider) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.PartialViewResultExecutor.Logger.get -> Microsoft.Extensions.Logging.ILogger +~Microsoft.AspNetCore.Mvc.ViewFeatures.PartialViewResultExecutor.PartialViewResultExecutor(Microsoft.Extensions.Options.IOptions viewOptions, Microsoft.AspNetCore.Mvc.Infrastructure.IHttpResponseStreamWriterFactory writerFactory, Microsoft.AspNetCore.Mvc.ViewEngines.ICompositeViewEngine viewEngine, Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionaryFactory tempDataFactory, System.Diagnostics.DiagnosticListener diagnosticListener, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider modelMetadataProvider) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.SaveTempDataAttribute.CreateInstance(System.IServiceProvider serviceProvider) -> Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata +~Microsoft.AspNetCore.Mvc.ViewFeatures.SessionStateTempDataProvider.SessionStateTempDataProvider(Microsoft.AspNetCore.Mvc.ViewFeatures.Infrastructure.TempDataSerializer tempDataSerializer) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.StringHtmlContent.StringHtmlContent(string input) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.StringHtmlContent.WriteTo(System.IO.TextWriter writer, System.Text.Encodings.Web.HtmlEncoder encoder) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.Add(string key, object value) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.ContainsKey(string key) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.ContainsValue(object value) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.GetEnumerator() -> System.Collections.Generic.IEnumerator> +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.Keep(string key) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.Keys.get -> System.Collections.Generic.ICollection +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.Peek(string key) -> object +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.Remove(string key) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.TempDataDictionary(Microsoft.AspNetCore.Http.HttpContext context, Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataProvider provider) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.TryGetValue(string key, out object value) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.Values.get -> System.Collections.Generic.ICollection +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.this[string key].get -> object +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionary.this[string key].set -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionaryFactory.GetTempData(Microsoft.AspNetCore.Http.HttpContext context) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.ViewFeatures.TempDataDictionaryFactory.TempDataDictionaryFactory(Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataProvider provider) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.TemplateInfo.AddVisited(object value) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.TemplateInfo.FormattedModelValue.get -> object +~Microsoft.AspNetCore.Mvc.ViewFeatures.TemplateInfo.FormattedModelValue.set -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.TemplateInfo.GetFullHtmlFieldName(string partialFieldName) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.TemplateInfo.HtmlFieldPrefix.get -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.TemplateInfo.HtmlFieldPrefix.set -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.TemplateInfo.TemplateInfo(Microsoft.AspNetCore.Mvc.ViewFeatures.TemplateInfo original) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.TemplateInfo.Visited(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewComponentResultExecutor.ViewComponentResultExecutor(Microsoft.Extensions.Options.IOptions mvcHelperOptions, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider modelMetadataProvider, Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionaryFactory tempDataDictionaryFactory) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewComponentResultExecutor.ViewComponentResultExecutor(Microsoft.Extensions.Options.IOptions mvcHelperOptions, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, System.Text.Encodings.Web.HtmlEncoder htmlEncoder, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider modelMetadataProvider, Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionaryFactory tempDataDictionaryFactory, Microsoft.AspNetCore.Mvc.Infrastructure.IHttpResponseStreamWriterFactory writerFactory) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Add(System.Collections.Generic.KeyValuePair item) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Add(string key, object value) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Contains(System.Collections.Generic.KeyValuePair item) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ContainsKey(string key) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.CopyTo(System.Collections.Generic.KeyValuePair[] array, int arrayIndex) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Eval(string expression) -> object +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Eval(string expression, string format) -> string +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.GetViewDataInfo(string expression) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataInfo +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Keys.get -> System.Collections.Generic.ICollection +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Model.get -> object +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Model.set -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ModelExplorer.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ModelExplorer.set -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ModelMetadata.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ModelState.get -> Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Remove(System.Collections.Generic.KeyValuePair item) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Remove(string key) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.TemplateInfo.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.TemplateInfo +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.TryGetValue(string key, out object value) -> bool +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.Values.get -> System.Collections.Generic.ICollection +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ViewDataDictionary(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ViewDataDictionary(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState, System.Type declaredModelType) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ViewDataDictionary(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, System.Type declaredModelType) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ViewDataDictionary(Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary source) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ViewDataDictionary(Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary source, System.Type declaredModelType) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ViewDataDictionary(Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary source, object model, System.Type declaredModelType) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.this[string index].get -> object +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.this[string index].set -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ViewDataDictionary(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider metadataProvider, Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ViewDataDictionary(Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary source) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.ViewDataDictionary(Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary source, object model) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionaryControllerPropertyActivator.Activate(Microsoft.AspNetCore.Mvc.ControllerContext actionContext, object controller) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionaryControllerPropertyActivator.GetActivatorDelegate(Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor actionDescriptor) -> System.Action +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionaryControllerPropertyActivator.ViewDataDictionaryControllerPropertyActivator(Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider modelMetadataProvider) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataInfo.Container.get -> object +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataInfo.PropertyInfo.get -> System.Reflection.PropertyInfo +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataInfo.Value.get -> object +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataInfo.Value.set -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataInfo.ViewDataInfo(object container, System.Reflection.PropertyInfo propertyInfo) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataInfo.ViewDataInfo(object container, System.Reflection.PropertyInfo propertyInfo, System.Func valueAccessor) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataInfo.ViewDataInfo(object container, object value) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.DiagnosticListener.get -> System.Diagnostics.DiagnosticListener +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string contentType, int? statusCode) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ModelMetadataProvider.get -> Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.TempDataFactory.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionaryFactory +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ViewEngine.get -> Microsoft.AspNetCore.Mvc.ViewEngines.IViewEngine +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ViewExecutor(Microsoft.AspNetCore.Mvc.Infrastructure.IHttpResponseStreamWriterFactory writerFactory, Microsoft.AspNetCore.Mvc.ViewEngines.ICompositeViewEngine viewEngine, System.Diagnostics.DiagnosticListener diagnosticListener) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ViewExecutor(Microsoft.Extensions.Options.IOptions viewOptions, Microsoft.AspNetCore.Mvc.Infrastructure.IHttpResponseStreamWriterFactory writerFactory, Microsoft.AspNetCore.Mvc.ViewEngines.ICompositeViewEngine viewEngine, Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionaryFactory tempDataFactory, System.Diagnostics.DiagnosticListener diagnosticListener, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider modelMetadataProvider) -> void +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ViewOptions.get -> Microsoft.AspNetCore.Mvc.MvcViewOptions +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.WriterFactory.get -> Microsoft.AspNetCore.Mvc.Infrastructure.IHttpResponseStreamWriterFactory +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.ViewResult result) -> System.Threading.Tasks.Task +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor.Logger.get -> Microsoft.Extensions.Logging.ILogger +~Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor.ViewResultExecutor(Microsoft.Extensions.Options.IOptions viewOptions, Microsoft.AspNetCore.Mvc.Infrastructure.IHttpResponseStreamWriterFactory writerFactory, Microsoft.AspNetCore.Mvc.ViewEngines.ICompositeViewEngine viewEngine, Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionaryFactory tempDataFactory, System.Diagnostics.DiagnosticListener diagnosticListener, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider modelMetadataProvider) -> void +~Microsoft.AspNetCore.Mvc.ViewResult.ContentType.get -> string +~Microsoft.AspNetCore.Mvc.ViewResult.ContentType.set -> void +~Microsoft.AspNetCore.Mvc.ViewResult.Model.get -> object +~Microsoft.AspNetCore.Mvc.ViewResult.TempData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary +~Microsoft.AspNetCore.Mvc.ViewResult.TempData.set -> void +~Microsoft.AspNetCore.Mvc.ViewResult.ViewData.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary +~Microsoft.AspNetCore.Mvc.ViewResult.ViewData.set -> void +~Microsoft.AspNetCore.Mvc.ViewResult.ViewEngine.get -> Microsoft.AspNetCore.Mvc.ViewEngines.IViewEngine +~Microsoft.AspNetCore.Mvc.ViewResult.ViewEngine.set -> void +~Microsoft.AspNetCore.Mvc.ViewResult.ViewName.get -> string +~Microsoft.AspNetCore.Mvc.ViewResult.ViewName.set -> void +~abstract Microsoft.AspNetCore.Mvc.RemoteAttributeBase.GetUrl(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientModelValidationContext context) -> string +~abstract Microsoft.AspNetCore.Mvc.ViewFeatures.Infrastructure.TempDataSerializer.Deserialize(byte[] unprotectedData) -> System.Collections.Generic.IDictionary +~abstract Microsoft.AspNetCore.Mvc.ViewFeatures.Infrastructure.TempDataSerializer.Serialize(System.Collections.Generic.IDictionary values) -> byte[] +~abstract Microsoft.AspNetCore.Mvc.ViewFeatures.ValidationHtmlAttributeProvider.AddValidationAttributes(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, System.Collections.Generic.IDictionary attributes) -> void +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewComponentEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterViewComponent" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.AfterViewEventData.EventName = "Microsoft.AspNetCore.Mvc.AfterView" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewComponentEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeViewComponent" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.BeforeViewEventData.EventName = "Microsoft.AspNetCore.Mvc.BeforeView" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.ViewComponentAfterViewExecuteEventData.EventName = "Microsoft.AspNetCore.Mvc.ViewComponentAfterViewExecute" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.ViewComponentBeforeViewExecuteEventData.EventName = "Microsoft.AspNetCore.Mvc.ViewComponentBeforeViewExecute" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.ViewFoundEventData.EventName = "Microsoft.AspNetCore.Mvc.ViewFound" -> string +~const Microsoft.AspNetCore.Mvc.Diagnostics.ViewNotFoundEventData.EventName = "Microsoft.AspNetCore.Mvc.ViewNotFound" -> string +~override Microsoft.AspNetCore.Mvc.PageRemoteAttribute.GetUrl(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientModelValidationContext context) -> string +~override Microsoft.AspNetCore.Mvc.PartialViewResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.RemoteAttribute.GetUrl(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientModelValidationContext context) -> string +~override Microsoft.AspNetCore.Mvc.RemoteAttributeBase.FormatErrorMessage(string name) -> string +~override Microsoft.AspNetCore.Mvc.RemoteAttributeBase.IsValid(object value) -> bool +~override Microsoft.AspNetCore.Mvc.ViewComponentResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~override Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultValidationHtmlAttributeProvider.AddValidationAttributes(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, System.Collections.Generic.IDictionary attributes) -> void +~override Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Contextualize(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext) -> void +~override Microsoft.AspNetCore.Mvc.ViewResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionaryExtensions.AddModelError(this Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState, System.Linq.Expressions.Expression> expression, System.Exception exception, Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata) -> void +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionaryExtensions.AddModelError(this Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState, System.Linq.Expressions.Expression> expression, string errorMessage) -> void +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionaryExtensions.Remove(this Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState, System.Linq.Expressions.Expression> expression) -> bool +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionaryExtensions.RemoveAll(this Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState, System.Linq.Expressions.Expression> expression) -> void +~static Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionaryExtensions.TryAddModelException(this Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState, System.Linq.Expressions.Expression> expression, System.Exception exception) -> void +~static Microsoft.AspNetCore.Mvc.RemoteAttributeBase.FormatPropertyForClientValidation(string property) -> string +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperComponentExtensions.RenderComponentAsync(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Type componentType, Microsoft.AspNetCore.Mvc.Rendering.RenderMode renderMode, object parameters) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperComponentExtensions.RenderComponentAsync(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, Microsoft.AspNetCore.Mvc.Rendering.RenderMode renderMode) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperComponentExtensions.RenderComponentAsync(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, Microsoft.AspNetCore.Mvc.Rendering.RenderMode renderMode, object parameters) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.Display(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.Display(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.Display(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, string templateName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.Display(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, string templateName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.Display(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, string templateName, string htmlFieldName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.DisplayFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.DisplayFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.DisplayFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, string templateName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.DisplayFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, string templateName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.DisplayFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, string templateName, string htmlFieldName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.DisplayForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.DisplayForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.DisplayForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string templateName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.DisplayForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string templateName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.DisplayForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string templateName, string htmlFieldName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayExtensions.DisplayForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string templateName, string htmlFieldName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayNameExtensions.DisplayNameFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper> htmlHelper, System.Linq.Expressions.Expression> expression) -> string +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperDisplayNameExtensions.DisplayNameForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper) -> string +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.Editor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.Editor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.Editor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, string templateName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.Editor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, string templateName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.Editor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, string templateName, string htmlFieldName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.EditorFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.EditorFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.EditorFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, string templateName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.EditorFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, string templateName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.EditorFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, string templateName, string htmlFieldName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.EditorForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.EditorForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.EditorForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string templateName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.EditorForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string templateName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.EditorForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string templateName, string htmlFieldName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperEditorExtensions.EditorForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string templateName, string htmlFieldName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method, bool? antiforgery, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, bool? antiforgery) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, object routeValues) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string actionName, string controllerName) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string actionName, string controllerName, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string actionName, string controllerName, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string actionName, string controllerName, object routeValues) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string actionName, string controllerName, object routeValues, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginRouteForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, object routeValues) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginRouteForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, object routeValues, bool? antiforgery) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginRouteForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string routeName) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginRouteForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string routeName, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginRouteForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string routeName, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginRouteForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string routeName, bool? antiforgery) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginRouteForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string routeName, object routeValues) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperFormExtensions.BeginRouteForm(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string routeName, object routeValues, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.CheckBox(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.CheckBox(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, bool isChecked) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.CheckBox(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.CheckBoxFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.Hidden(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.Hidden(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, object value) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.HiddenFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.Password(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.Password(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, object value) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.PasswordFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.RadioButton(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, object value) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.RadioButton(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, object value, bool isChecked) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.RadioButton(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, object value, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.RadioButtonFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, object value) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.TextArea(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.TextArea(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.TextArea(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, string value) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.TextArea(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, string value, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.TextAreaFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.TextAreaFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.TextBox(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.TextBox(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, object value) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.TextBox(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, object value, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.TextBox(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, object value, string format) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.TextBoxFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.TextBoxFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperInputExtensions.TextBoxFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, string format) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLabelExtensions.Label(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLabelExtensions.Label(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, string labelText) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLabelExtensions.LabelFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLabelExtensions.LabelFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLabelExtensions.LabelFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, string labelText) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLabelExtensions.LabelForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLabelExtensions.LabelForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLabelExtensions.LabelForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string labelText) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLabelExtensions.LabelForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string labelText, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLinkExtensions.ActionLink(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper helper, string linkText, string actionName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLinkExtensions.ActionLink(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper helper, string linkText, string actionName, object routeValues) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLinkExtensions.ActionLink(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper helper, string linkText, string actionName, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLinkExtensions.ActionLink(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper helper, string linkText, string actionName, string controllerName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLinkExtensions.ActionLink(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper helper, string linkText, string actionName, string controllerName, object routeValues) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLinkExtensions.ActionLink(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper helper, string linkText, string actionName, string controllerName, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLinkExtensions.RouteLink(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string linkText, object routeValues) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLinkExtensions.RouteLink(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string linkText, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLinkExtensions.RouteLink(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string linkText, string routeName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLinkExtensions.RouteLink(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string linkText, string routeName, object routeValues) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperLinkExtensions.RouteLink(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string linkText, string routeName, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperNameExtensions.IdForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper) -> string +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperNameExtensions.NameForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper) -> string +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.Partial(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.Partial(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.Partial(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName, object model) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.Partial(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName, object model, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.PartialAsync(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.PartialAsync(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.PartialAsync(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName, object model) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.RenderPartial(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName) -> void +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.RenderPartial(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData) -> void +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.RenderPartial(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName, object model) -> void +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.RenderPartial(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName, object model, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData) -> void +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.RenderPartialAsync(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.RenderPartialAsync(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperPartialExtensions.RenderPartialAsync(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string partialViewName, object model) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperSelectExtensions.DropDownList(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperSelectExtensions.DropDownList(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, System.Collections.Generic.IEnumerable selectList) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperSelectExtensions.DropDownList(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, System.Collections.Generic.IEnumerable selectList, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperSelectExtensions.DropDownList(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, System.Collections.Generic.IEnumerable selectList, string optionLabel) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperSelectExtensions.DropDownList(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, string optionLabel) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperSelectExtensions.DropDownListFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, System.Collections.Generic.IEnumerable selectList) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperSelectExtensions.DropDownListFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, System.Collections.Generic.IEnumerable selectList, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperSelectExtensions.DropDownListFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, System.Collections.Generic.IEnumerable selectList, string optionLabel) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperSelectExtensions.ListBox(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperSelectExtensions.ListBox(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, System.Collections.Generic.IEnumerable selectList) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperSelectExtensions.ListBoxFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, System.Collections.Generic.IEnumerable selectList) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationMessage(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationMessage(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationMessage(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, string message) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationMessage(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, string message, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationMessage(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression, string message, string tag) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationMessageFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationMessageFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, string message) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationMessageFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, string message, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationMessageFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression, string message, string tag) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationSummary(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationSummary(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, bool excludePropertyErrors) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationSummary(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, bool excludePropertyErrors, string message) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationSummary(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, bool excludePropertyErrors, string message, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationSummary(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, bool excludePropertyErrors, string message, string tag) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationSummary(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string message) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationSummary(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string message, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationSummary(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string message, object htmlAttributes, string tag) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValidationExtensions.ValidationSummary(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string message, string tag) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValueExtensions.Value(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string expression) -> string +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValueExtensions.ValueFor(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, System.Linq.Expressions.Expression> expression) -> string +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValueExtensions.ValueForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper) -> string +~static Microsoft.AspNetCore.Mvc.Rendering.HtmlHelperValueExtensions.ValueForModel(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string format) -> string +~static Microsoft.AspNetCore.Mvc.Rendering.TagBuilder.CreateSanitizedId(string name, string invalidCharReplacement) -> string +~static Microsoft.AspNetCore.Mvc.Rendering.ViewComponentHelperExtensions.InvokeAsync(this Microsoft.AspNetCore.Mvc.IViewComponentHelper helper, System.Type componentType) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.Rendering.ViewComponentHelperExtensions.InvokeAsync(this Microsoft.AspNetCore.Mvc.IViewComponentHelper helper, string name) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.Rendering.ViewComponentHelperExtensions.InvokeAsync(this Microsoft.AspNetCore.Mvc.IViewComponentHelper helper) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.Rendering.ViewComponentHelperExtensions.InvokeAsync(this Microsoft.AspNetCore.Mvc.IViewComponentHelper helper, object arguments) -> System.Threading.Tasks.Task +~static Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentConventions.GetComponentFullName(System.Reflection.TypeInfo componentType) -> string +~static Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentConventions.GetComponentName(System.Reflection.TypeInfo componentType) -> string +~static Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentConventions.IsComponent(System.Reflection.TypeInfo typeInfo) -> bool +~static Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.Found(string viewName, Microsoft.AspNetCore.Mvc.ViewEngines.IView view) -> Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult +~static Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.NotFound(string viewName, System.Collections.Generic.IEnumerable searchedLocations) -> Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult +~static Microsoft.AspNetCore.Mvc.ViewFeatures.AntiforgeryExtensions.GetHtml(this Microsoft.AspNetCore.Antiforgery.IAntiforgery antiforgery, Microsoft.AspNetCore.Http.HttpContext httpContext) -> Microsoft.AspNetCore.Html.IHtmlContent +~static Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGeneratorExtensions.GenerateForm(this Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator, Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string actionName, string controllerName, string fragment, object routeValues, string method, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~static Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGeneratorExtensions.GenerateRouteForm(this Microsoft.AspNetCore.Mvc.ViewFeatures.IHtmlGenerator generator, Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string routeName, object routeValues, string fragment, string method, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~static Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.AnonymousObjectToHtmlAttributes(object htmlAttributes) -> System.Collections.Generic.IDictionary +~static Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GetFormMethodString(Microsoft.AspNetCore.Mvc.Rendering.FormMethod method) -> string +~static Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ObjectToDictionary(object value) -> System.Collections.Generic.IDictionary +~static Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorerExtensions.GetSimpleDisplayText(this Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer) -> string +~static Microsoft.AspNetCore.Mvc.ViewFeatures.ModelMetadataProviderExtensions.GetModelExplorerForType(this Microsoft.AspNetCore.Mvc.ModelBinding.IModelMetadataProvider provider, System.Type modelType, object model) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer +~static Microsoft.AspNetCore.Mvc.ViewFeatures.TryGetValueProvider.CreateInstance(System.Type targetType) -> Microsoft.AspNetCore.Mvc.ViewFeatures.TryGetValueDelegate +~static Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.FormatValue(object value, string format) -> string +~static Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataEvaluator.Eval(Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData, string expression) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataInfo +~static Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataEvaluator.Eval(object indexableObject, string expression) -> Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataInfo +~static Microsoft.Extensions.DependencyInjection.MvcViewFeaturesMvcBuilderExtensions.AddCookieTempDataProvider(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcViewFeaturesMvcBuilderExtensions.AddCookieTempDataProvider(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcViewFeaturesMvcBuilderExtensions.AddSessionStateTempDataProvider(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcViewFeaturesMvcBuilderExtensions.AddViewComponentsAsServices(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcViewFeaturesMvcBuilderExtensions.AddViewOptions(this Microsoft.Extensions.DependencyInjection.IMvcBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcViewFeaturesMvcCoreBuilderExtensions.AddCookieTempDataProvider(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcViewFeaturesMvcCoreBuilderExtensions.AddCookieTempDataProvider(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcViewFeaturesMvcCoreBuilderExtensions.AddViews(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcViewFeaturesMvcCoreBuilderExtensions.AddViews(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static Microsoft.Extensions.DependencyInjection.MvcViewFeaturesMvcCoreBuilderExtensions.ConfigureViews(this Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder builder, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcCoreBuilder +~static readonly Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentConventions.ViewComponentSuffix -> string +~static readonly Microsoft.AspNetCore.Mvc.ViewFeatures.CookieTempDataProvider.CookieName -> string +~static readonly Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ValidationInputCssClassName -> string +~static readonly Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ValidationInputValidCssClassName -> string +~static readonly Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ValidationMessageCssClassName -> string +~static readonly Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ValidationMessageValidCssClassName -> string +~static readonly Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ValidationSummaryCssClassName -> string +~static readonly Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.ValidationSummaryValidCssClassName -> string +~static readonly Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.DefaultContentType -> string +~virtual Microsoft.AspNetCore.Mvc.Controller.Json(object data) -> Microsoft.AspNetCore.Mvc.JsonResult +~virtual Microsoft.AspNetCore.Mvc.Controller.Json(object data, object serializerSettings) -> Microsoft.AspNetCore.Mvc.JsonResult +~virtual Microsoft.AspNetCore.Mvc.Controller.OnActionExecuted(Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.Controller.OnActionExecuting(Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.Controller.OnActionExecutionAsync(Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext context, Microsoft.AspNetCore.Mvc.Filters.ActionExecutionDelegate next) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.Controller.PartialView() -> Microsoft.AspNetCore.Mvc.PartialViewResult +~virtual Microsoft.AspNetCore.Mvc.Controller.PartialView(object model) -> Microsoft.AspNetCore.Mvc.PartialViewResult +~virtual Microsoft.AspNetCore.Mvc.Controller.PartialView(string viewName) -> Microsoft.AspNetCore.Mvc.PartialViewResult +~virtual Microsoft.AspNetCore.Mvc.Controller.PartialView(string viewName, object model) -> Microsoft.AspNetCore.Mvc.PartialViewResult +~virtual Microsoft.AspNetCore.Mvc.Controller.View() -> Microsoft.AspNetCore.Mvc.ViewResult +~virtual Microsoft.AspNetCore.Mvc.Controller.View(object model) -> Microsoft.AspNetCore.Mvc.ViewResult +~virtual Microsoft.AspNetCore.Mvc.Controller.View(string viewName) -> Microsoft.AspNetCore.Mvc.ViewResult +~virtual Microsoft.AspNetCore.Mvc.Controller.View(string viewName, object model) -> Microsoft.AspNetCore.Mvc.ViewResult +~virtual Microsoft.AspNetCore.Mvc.Controller.ViewComponent(System.Type componentType) -> Microsoft.AspNetCore.Mvc.ViewComponentResult +~virtual Microsoft.AspNetCore.Mvc.Controller.ViewComponent(System.Type componentType, object arguments) -> Microsoft.AspNetCore.Mvc.ViewComponentResult +~virtual Microsoft.AspNetCore.Mvc.Controller.ViewComponent(string componentName) -> Microsoft.AspNetCore.Mvc.ViewComponentResult +~virtual Microsoft.AspNetCore.Mvc.Controller.ViewComponent(string componentName, object arguments) -> Microsoft.AspNetCore.Mvc.ViewComponentResult +~virtual Microsoft.AspNetCore.Mvc.RemoteAttributeBase.AddValidation(Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ClientModelValidationContext context) -> void +~virtual Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.GetEnumerator() -> System.Collections.Generic.IEnumerator +~virtual Microsoft.AspNetCore.Mvc.Rendering.ViewContext.FormContext.get -> Microsoft.AspNetCore.Mvc.ViewFeatures.FormContext +~virtual Microsoft.AspNetCore.Mvc.Rendering.ViewContext.FormContext.set -> void +~virtual Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentDescriptorProvider.GetCandidateTypes() -> System.Collections.Generic.IEnumerable +~virtual Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentDescriptorProvider.GetViewComponents() -> System.Collections.Generic.IEnumerable +~virtual Microsoft.AspNetCore.Mvc.ViewComponents.ServiceBasedViewComponentActivator.Release(Microsoft.AspNetCore.Mvc.ViewComponents.ViewComponentContext context, object viewComponent) -> void +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.AddMaxLengthAttribute(Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData, Microsoft.AspNetCore.Mvc.Rendering.TagBuilder tagBuilder, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression) -> void +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.AddPlaceholderAttribute(Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData, Microsoft.AspNetCore.Mvc.Rendering.TagBuilder tagBuilder, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression) -> void +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.AddValidationAttributes(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.Rendering.TagBuilder tagBuilder, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression) -> void +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateActionLink(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string linkText, string actionName, string controllerName, string protocol, string hostname, string fragment, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateAntiforgery(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext) -> Microsoft.AspNetCore.Html.IHtmlContent +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateCheckBox(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, bool? isChecked, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateForm(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string actionName, string controllerName, object routeValues, string method, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateFormCore(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string action, string method, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateHidden(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, object value, bool useViewData, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateHiddenForCheckbox(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateInput(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.InputType inputType, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, object value, bool useViewData, bool isChecked, bool setId, bool isExplicitValue, string format, System.Collections.Generic.IDictionary htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateLabel(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, string labelText, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateLink(string linkText, string url, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GeneratePageForm(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string pageName, string pageHandler, object routeValues, string fragment, string method, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GeneratePageLink(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string linkText, string pageName, string pageHandler, string protocol, string hostname, string fragment, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GeneratePassword(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, object value, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateRadioButton(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, object value, bool? isChecked, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateRouteLink(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string linkText, string routeName, string protocol, string hostName, string fragment, object routeValues, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateSelect(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string optionLabel, string expression, System.Collections.Generic.IEnumerable selectList, System.Collections.Generic.ICollection currentValues, bool allowMultiple, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateTextArea(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, int rows, int columns, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateTextBox(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, object value, string format, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateValidationMessage(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, string message, string tag, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateValidationSummary(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, bool excludePropertyErrors, string message, string headerTag, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.TagBuilder +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GetCurrentValues(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, bool allowMultiple) -> System.Collections.Generic.ICollection +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Contextualize(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext) -> void +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.CreateForm() -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateCheckBox(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, bool? isChecked, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateDisplay(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string htmlFieldName, string templateName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateDisplayName(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression) -> string +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateDisplayText(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer) -> string +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateEditor(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string htmlFieldName, string templateName, object additionalViewData) -> Microsoft.AspNetCore.Html.IHtmlContent +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateForm(string actionName, string controllerName, object routeValues, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method, bool? antiforgery, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateHidden(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, object value, bool useViewData, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateId(string expression) -> string +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateLabel(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, string labelText, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateName(string expression) -> string +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GeneratePassword(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, object value, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateRadioButton(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, object value, bool? isChecked, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateRouteForm(string routeName, object routeValues, Microsoft.AspNetCore.Mvc.Rendering.FormMethod method, bool? antiforgery, object htmlAttributes) -> Microsoft.AspNetCore.Mvc.Rendering.MvcForm +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateTextArea(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, int rows, int columns, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateTextBox(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, object value, string format, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateValidationMessage(Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, string message, string tag, object htmlAttributes) -> Microsoft.AspNetCore.Html.IHtmlContent +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateValidationSummary(bool excludePropertyErrors, string message, object htmlAttributes, string tag) -> Microsoft.AspNetCore.Html.IHtmlContent +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GenerateValue(string expression, object value, string format, bool useViewData) -> string +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.GetEnumSelectList(Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata metadata) -> System.Collections.Generic.IEnumerable +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.RenderPartialCoreAsync(string partialViewName, object model, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData, System.IO.TextWriter writer) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.Infrastructure.TempDataSerializer.CanSerializeType(System.Type type) -> bool +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.PartialViewResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ViewEngines.IView view, Microsoft.AspNetCore.Mvc.PartialViewResult viewResult) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.PartialViewResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.PartialViewResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.PartialViewResultExecutor.FindView(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.PartialViewResult viewResult) -> Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.SessionStateTempDataProvider.LoadTempData(Microsoft.AspNetCore.Http.HttpContext context) -> System.Collections.Generic.IDictionary +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.SessionStateTempDataProvider.SaveTempData(Microsoft.AspNetCore.Http.HttpContext context, System.Collections.Generic.IDictionary values) -> void +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.ValidationHtmlAttributeProvider.AddAndTrackValidationAttributes(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExplorer modelExplorer, string expression, System.Collections.Generic.IDictionary attributes) -> void +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.ViewComponentResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.ViewComponentResult result) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.SetModel(object value) -> void +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ViewEngines.IView view, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData, Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary tempData, string contentType, int? statusCode) -> System.Threading.Tasks.Task +~virtual Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor.FindView(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ViewResult viewResult) -> Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult diff --git a/src/Mvc/Mvc/src/PublicAPI.Shipped.txt b/src/Mvc/Mvc/src/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/Mvc/Mvc/src/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Mvc/Mvc/src/PublicAPI.Unshipped.txt b/src/Mvc/Mvc/src/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..210451dad3 --- /dev/null +++ b/src/Mvc/Mvc/src/PublicAPI.Unshipped.txt @@ -0,0 +1,10 @@ +#nullable enable +Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions +~static Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddControllers(this Microsoft.Extensions.DependencyInjection.IServiceCollection services) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddControllers(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, System.Action configure) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddControllersWithViews(this Microsoft.Extensions.DependencyInjection.IServiceCollection services) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddControllersWithViews(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, System.Action configure) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddMvc(this Microsoft.Extensions.DependencyInjection.IServiceCollection services) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddMvc(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, System.Action setupAction) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddRazorPages(this Microsoft.Extensions.DependencyInjection.IServiceCollection services) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder +~static Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddRazorPages(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, System.Action configure) -> Microsoft.Extensions.DependencyInjection.IMvcBuilder diff --git a/src/ProjectTemplates/BlazorTemplates.Tests/BlazorTemplates.Tests.csproj b/src/ProjectTemplates/BlazorTemplates.Tests/BlazorTemplates.Tests.csproj index 77e0ab1128..232a11f3a4 100644 --- a/src/ProjectTemplates/BlazorTemplates.Tests/BlazorTemplates.Tests.csproj +++ b/src/ProjectTemplates/BlazorTemplates.Tests/BlazorTemplates.Tests.csproj @@ -40,9 +40,7 @@ - + diff --git a/src/ProjectTemplates/BlazorTemplates.Tests/BlazorWasmTemplateTest.cs b/src/ProjectTemplates/BlazorTemplates.Tests/BlazorWasmTemplateTest.cs index 1ef58465c4..c087fc3d07 100644 --- a/src/ProjectTemplates/BlazorTemplates.Tests/BlazorWasmTemplateTest.cs +++ b/src/ProjectTemplates/BlazorTemplates.Tests/BlazorWasmTemplateTest.cs @@ -138,6 +138,7 @@ namespace Templates.Test } [Fact] + [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/23992")] public async Task BlazorWasmStandalonePwaTemplate_Works() { // Additional arguments are needed. See: https://github.com/dotnet/aspnetcore/issues/24278 @@ -263,6 +264,7 @@ namespace Templates.Test } [ConditionalFact] + [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/23992")] // LocalDB doesn't work on non Windows platforms [OSSkipCondition(OperatingSystems.Linux | OperatingSystems.MacOSX)] public Task BlazorWasmHostedTemplate_IndividualAuth_Works_WithLocalDB() @@ -271,6 +273,7 @@ namespace Templates.Test } [Fact] + [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/23992")] public Task BlazorWasmHostedTemplate_IndividualAuth_Works_WithOutLocalDB() { return BlazorWasmHostedTemplate_IndividualAuth_Works(false); diff --git a/src/ProjectTemplates/Shared/Project.cs b/src/ProjectTemplates/Shared/Project.cs index 939a49089f..cb28d482f4 100644 --- a/src/ProjectTemplates/Shared/Project.cs +++ b/src/ProjectTemplates/Shared/Project.cs @@ -145,7 +145,7 @@ namespace Templates.Test.Helpers ["ASPNETCORE_Logging__Console__LogLevel__Default"] = "Debug", ["ASPNETCORE_Logging__Console__LogLevel__System"] = "Debug", ["ASPNETCORE_Logging__Console__LogLevel__Microsoft"] = "Debug", - ["ASPNETCORE_Logging__Console__IncludeScopes"] = "true", + ["ASPNETCORE_Logging__Console__FormatterOptions__IncludeScopes"] = "true", }; var launchSettingsJson = Path.Combine(TemplateOutputDir, "Properties", "launchSettings.json"); @@ -185,7 +185,7 @@ namespace Templates.Test.Helpers ["ASPNETCORE_Logging__Console__LogLevel__Default"] = "Debug", ["ASPNETCORE_Logging__Console__LogLevel__System"] = "Debug", ["ASPNETCORE_Logging__Console__LogLevel__Microsoft"] = "Debug", - ["ASPNETCORE_Logging__Console__IncludeScopes"] = "true", + ["ASPNETCORE_Logging__Console__FormatterOptions__IncludeScopes"] = "true", }; var projectDll = $"{ProjectName}.dll"; diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/Shared/SurveyPrompt.razor b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/Shared/SurveyPrompt.razor index e9706c83da..66edfb87a0 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/Shared/SurveyPrompt.razor +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/Shared/SurveyPrompt.razor @@ -4,7 +4,7 @@ Please take our - brief survey + brief survey and tell us what you think. diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/_Imports.razor b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/_Imports.razor index 4fe5a889de..48dcfafe89 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/_Imports.razor +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/_Imports.razor @@ -4,6 +4,7 @@ @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web +@using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop @using BlazorServerWeb_CSharp @using BlazorServerWeb_CSharp.Shared diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/wwwroot/css/site.css b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/wwwroot/css/site.css index caebf2a463..af74676569 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/wwwroot/css/site.css +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/wwwroot/css/site.css @@ -48,3 +48,12 @@ a, .btn-link { right: 0.75rem; top: 0.5rem; } + +#components-reconnect-modal.show { + animation: VISIBILITY 500ms linear; +} + +@keyframes VISIBILITY { + 0%,99% { visibility: hidden; } + 100% { visibility: visible; } +} diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Client/Shared/SurveyPrompt.razor b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Client/Shared/SurveyPrompt.razor index 02714098ef..67828b574b 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Client/Shared/SurveyPrompt.razor +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Client/Shared/SurveyPrompt.razor @@ -4,7 +4,7 @@ Please take our - brief survey + brief survey and tell us what you think. diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Client/_Imports.razor b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Client/_Imports.razor index ac695bb5b1..e4e4f5afbf 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Client/_Imports.razor +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Client/_Imports.razor @@ -6,6 +6,7 @@ @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web +@using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.AspNetCore.Components.WebAssembly.Http @using Microsoft.JSInterop @*#if (!Hosted) diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Server/Pages/Error.cshtml.cs b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Server/Pages/Error.cshtml.cs index 3867a3976d..92282ce4c2 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Server/Pages/Error.cshtml.cs +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/Server/Pages/Error.cshtml.cs @@ -10,6 +10,7 @@ using Microsoft.Extensions.Logging; namespace ComponentsWebAssembly_CSharp.Server.Pages { [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] + [IgnoreAntiforgeryToken] public class ErrorModel : PageModel { public string RequestId { get; set; } diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Error.cshtml.cs b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Error.cshtml.cs index 302c5ce4a6..10108d2b10 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Error.cshtml.cs +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Error.cshtml.cs @@ -10,6 +10,7 @@ using Microsoft.Extensions.Logging; namespace Company.WebApplication1.Pages { [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] + [IgnoreAntiforgeryToken] public class ErrorModel : PageModel { public string RequestId { get; set; } diff --git a/src/ProjectTemplates/test/BaselineTest.cs b/src/ProjectTemplates/test/BaselineTest.cs index 243d13d67f..eabacc336d 100644 --- a/src/ProjectTemplates/test/BaselineTest.cs +++ b/src/ProjectTemplates/test/BaselineTest.cs @@ -71,6 +71,7 @@ namespace Templates.Test [Theory] [MemberData(nameof(TemplateBaselines))] + [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/23993")] public async Task Template_Produces_The_Right_Set_Of_FilesAsync(string arguments, string[] expectedFiles) { Project = await ProjectFactory.GetOrCreateProject("baseline" + SanitizeArgs(arguments), Output); @@ -151,4 +152,4 @@ namespace Templates.Test } } } -} \ No newline at end of file +} diff --git a/src/ProjectTemplates/test/MvcTemplateTest.cs b/src/ProjectTemplates/test/MvcTemplateTest.cs index 0c337894b5..15a1c87300 100644 --- a/src/ProjectTemplates/test/MvcTemplateTest.cs +++ b/src/ProjectTemplates/test/MvcTemplateTest.cs @@ -224,6 +224,7 @@ namespace Templates.Test } [Fact] + [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/23993")] public async Task MvcTemplate_RazorRuntimeCompilation_BuildsAndPublishes() { await MvcTemplateBuildsAndPublishes(auth: null, args: new[] { "--razor-runtime-compilation" }); diff --git a/src/ProjectTemplates/test/ProjectTemplates.Tests.csproj b/src/ProjectTemplates/test/ProjectTemplates.Tests.csproj index ca40318bc5..c20f7f0d59 100644 --- a/src/ProjectTemplates/test/ProjectTemplates.Tests.csproj +++ b/src/ProjectTemplates/test/ProjectTemplates.Tests.csproj @@ -42,7 +42,7 @@ - + false @@ -54,9 +54,7 @@ - + diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/BoundAttributeDescriptorComparer.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/BoundAttributeDescriptorComparer.cs index 54154a7aaa..4b3ae0503c 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/BoundAttributeDescriptorComparer.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/BoundAttributeDescriptorComparer.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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; @@ -56,10 +56,20 @@ namespace Microsoft.AspNetCore.Razor.Language } var hash = HashCodeCombiner.Start(); - hash.Add(descriptor.Kind); + hash.Add(descriptor.Kind, StringComparer.Ordinal); hash.Add(descriptor.Name, StringComparer.Ordinal); + if (descriptor.BoundAttributeParameters != null) + { + for (var i = 0; i < descriptor.BoundAttributeParameters.Count; i++) + { + hash.Add(descriptor.BoundAttributeParameters[i]); + } + } + + hash.Add(descriptor.Metadata.Count); + return hash.CombinedHash; } } -} \ No newline at end of file +} diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/BoundAttributeParameterDescriptorComparer.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/BoundAttributeParameterDescriptorComparer.cs index 6cbc01017c..8896c341d3 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/BoundAttributeParameterDescriptorComparer.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/BoundAttributeParameterDescriptorComparer.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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; @@ -51,8 +51,10 @@ namespace Microsoft.AspNetCore.Razor.Language } var hash = HashCodeCombiner.Start(); - hash.Add(descriptor.Kind); + hash.Add(descriptor.Kind, StringComparer.Ordinal); hash.Add(descriptor.Name, StringComparer.Ordinal); + hash.Add(descriptor.TypeName, StringComparer.Ordinal); + hash.Add(descriptor.Metadata?.Count); return hash.CombinedHash; } diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DirectiveDescriptorComparer.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DirectiveDescriptorComparer.cs index c3a9590231..42bff25217 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DirectiveDescriptorComparer.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DirectiveDescriptorComparer.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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; @@ -39,11 +39,19 @@ namespace Microsoft.AspNetCore.Razor.Language throw new ArgumentNullException(nameof(descriptor)); } - var hashCodeCombiner = HashCodeCombiner.Start(); - hashCodeCombiner.Add(descriptor.Directive, StringComparer.Ordinal); - hashCodeCombiner.Add(descriptor.Kind); + var hash = HashCodeCombiner.Start(); + hash.Add(descriptor.Directive, StringComparer.Ordinal); + hash.Add(descriptor.Kind); - return hashCodeCombiner.CombinedHash; + if (descriptor.Tokens != null) + { + for (var i = 0; i < descriptor.Tokens.Count; i++) + { + hash.Add(descriptor.Tokens[i]); + } + } + + return hash.CombinedHash; } } } diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DirectiveTokenDescriptorComparer.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DirectiveTokenDescriptorComparer.cs index 4ec1ba70d6..8d3d4bc24e 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DirectiveTokenDescriptorComparer.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DirectiveTokenDescriptorComparer.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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; diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Microsoft.AspNetCore.Razor.Language.csproj b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Microsoft.AspNetCore.Razor.Language.csproj index fbda167142..38d03b2a1d 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Microsoft.AspNetCore.Razor.Language.csproj +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Microsoft.AspNetCore.Razor.Language.csproj @@ -1,4 +1,4 @@ - + Razor is a markup syntax for adding server-side logic to web pages. This package contains the Razor parser and code generation infrastructure. diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/RequiredAttributeDescriptorComparer.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/RequiredAttributeDescriptorComparer.cs index 2883797e4f..6467803ee9 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/RequiredAttributeDescriptorComparer.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/RequiredAttributeDescriptorComparer.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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; @@ -57,6 +57,7 @@ namespace Microsoft.AspNetCore.Razor.Language var hash = HashCodeCombiner.Start(); hash.Add(descriptor.Name, StringComparer.Ordinal); + hash.Add(descriptor.Value, StringComparer.Ordinal); return hash.CombinedHash; } diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/TagHelperDescriptorComparer.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/TagHelperDescriptorComparer.cs index a078fc0630..275ee11cea 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/TagHelperDescriptorComparer.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/TagHelperDescriptorComparer.cs @@ -120,8 +120,50 @@ namespace Microsoft.AspNetCore.Razor.Language hash.Add(descriptor.Kind, StringComparer.Ordinal); hash.Add(descriptor.AssemblyName, StringComparer.Ordinal); hash.Add(descriptor.Name, StringComparer.Ordinal); + hash.Add(descriptor.DisplayName, StringComparer.Ordinal); + hash.Add(descriptor.CaseSensitive ? 1 : 0); + + if (descriptor.BoundAttributes != null) + { + for (var i = 0; i < descriptor.BoundAttributes.Count; i++) + { + hash.Add(descriptor.BoundAttributes[i]); + } + } + + if (descriptor.TagMatchingRules != null) + { + for (var i = 0; i < descriptor.TagMatchingRules.Count; i++) + { + hash.Add(descriptor.TagMatchingRules[i]); + } + } + + if (descriptor.AllowedChildTags != null) + { + for (var i = 0; i < descriptor.AllowedChildTags.Count; i++) + { + hash.Add(descriptor.AllowedChildTags[i]); + } + } + + if (descriptor.Diagnostics != null) + { + for (var i = 0; i < descriptor.Diagnostics.Count; i++) + { + hash.Add(descriptor.Diagnostics[i]); + } + } + + if (descriptor.Metadata != null) + { + foreach (var kvp in descriptor.Metadata) + { + hash.Add(kvp.Value, StringComparer.Ordinal); + } + } return hash.CombinedHash; } } -} \ No newline at end of file +} diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/TagMatchingRuleDescriptorComparer.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/TagMatchingRuleDescriptorComparer.cs index 4ed8805e92..1b9a2a7589 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/TagMatchingRuleDescriptorComparer.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/TagMatchingRuleDescriptorComparer.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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; @@ -48,8 +48,17 @@ namespace Microsoft.AspNetCore.Razor.Language var hash = HashCodeCombiner.Start(); hash.Add(rule.TagName, StringComparer.Ordinal); + hash.Add(rule.ParentTag, StringComparer.Ordinal); + + if (rule.Attributes != null) + { + for (var i = 0; i < rule.Attributes.Count; ++i) + { + hash.Add(rule.Attributes[i]); + } + } return hash.CombinedHash; } } -} \ No newline at end of file +} diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/test/Microsoft.AspNetCore.Razor.Language.Test.csproj b/src/Razor/Microsoft.AspNetCore.Razor.Language/test/Microsoft.AspNetCore.Razor.Language.Test.csproj index f60d341f39..d90b125693 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/test/Microsoft.AspNetCore.Razor.Language.Test.csproj +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/test/Microsoft.AspNetCore.Razor.Language.Test.csproj @@ -13,15 +13,31 @@ false - - - - - + + + + Shared\TagHelperDescriptorJsonConverter.cs + + + Shared\RazorDiagnosticJsonConverter.cs + + + Shared\JsonReaderExtensions.cs + + + TestFiles\taghelpers.json + + + + + + + + diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/test/TagHelperDescriptorComparerTest.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/test/TagHelperDescriptorComparerTest.cs new file mode 100644 index 0000000000..d2302ef4e4 --- /dev/null +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/test/TagHelperDescriptorComparerTest.cs @@ -0,0 +1,208 @@ +// 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.IO; +using System.Linq; +using Microsoft.CodeAnalysis.Razor.Serialization; +using Newtonsoft.Json; +using Xunit; + +namespace Microsoft.AspNetCore.Razor.Language +{ + public class TagHelperDescriptorComparerTest + { + private static readonly TestFile TagHelpersTestFile = TestFile.Create("TestFiles/taghelpers.json", typeof(TagHelperDescriptorComparerTest)); + + [Fact] + public void GetHashCode_SameTagHelperDescriptors_HashCodeMatches() + { + // Arrange + var descriptor1 = CreateTagHelperDescriptor( + tagName: "input", + typeName: "InputTagHelper", + assemblyName: "TestAssembly", + attributes: new Action[] + { + builder => builder + .Name("value") + .PropertyName("FooProp") + .TypeName("System.String"), + }); + var descriptor2 = CreateTagHelperDescriptor( + tagName: "input", + typeName: "InputTagHelper", + assemblyName: "TestAssembly", + attributes: new Action[] + { + builder => builder + .Name("value") + .PropertyName("FooProp") + .TypeName("System.String"), + }); + + // Act + var hashCode1 = descriptor1.GetHashCode(); + var hashCode2 = descriptor2.GetHashCode(); + + // Assert + Assert.Equal(hashCode1, hashCode2); + } + + [Fact] + public void GetHashCode_FQNAndNameTagHelperDescriptors_HashCodeDoesNotMatch() + { + // Arrange + var descriptorName = CreateTagHelperDescriptor( + tagName: "input", + typeName: "InputTagHelper", + assemblyName: "TestAssembly", + tagMatchingRuleName: "Input", + attributes: new Action[] + { + builder => builder + .Name("value") + .PropertyName("FooProp") + .TypeName("System.String"), + }); + var descriptorFQN = CreateTagHelperDescriptor( + tagName: "input", + typeName: "InputTagHelper", + assemblyName: "TestAssembly", + tagMatchingRuleName: "Microsoft.AspNetCore.Components.Forms.Input", + attributes: new Action[] + { + builder => builder + .Name("value") + .PropertyName("FooProp") + .TypeName("System.String"), + }); + + // Act + var hashCodeName = descriptorName.GetHashCode(); + var hashCodeFQN = descriptorFQN.GetHashCode(); + + // Assert + Assert.NotEqual(hashCodeName, hashCodeFQN); + } + + [Fact] + public void GetHashCode_DifferentTagHelperDescriptors_HashCodeDoesNotMatch() + { + // Arrange + var counterTagHelper = CreateTagHelperDescriptor( + tagName: "Counter", + typeName: "CounterTagHelper", + assemblyName: "Components.Component", + tagMatchingRuleName: "Input", + attributes: new Action[] + { + builder => builder + .Name("IncrementBy") + .PropertyName("IncrementBy") + .TypeName("System.Int32"), + }); + var inputTagHelper = CreateTagHelperDescriptor( + tagName: "input", + typeName: "InputTagHelper", + assemblyName: "TestAssembly", + tagMatchingRuleName: "Microsoft.AspNetCore.Components.Forms.Input", + attributes: new Action[] + { + builder => builder + .Name("value") + .PropertyName("FooProp") + .TypeName("System.String"), + }); + + // Act + var hashCodeCounter = counterTagHelper.GetHashCode(); + var hashCodeInput = inputTagHelper.GetHashCode(); + + // Assert + Assert.NotEqual(hashCodeCounter, hashCodeInput); + } + + [Fact] + public void GetHashCode_AllTagHelpers_NoHashCodeCollisions() + { + // Arrange + var tagHelpers = ReadTagHelpers(TagHelpersTestFile.OpenRead()); + + // Act + var hashes = new HashSet(tagHelpers.Select(t => t.GetHashCode())); + + // Assert + Assert.Equal(hashes.Count(), tagHelpers.Count); + } + + [Fact] + public void GetHashCode_DuplicateTagHelpers_NoHashCodeCollisions() + { + // Arrange + var tagHelpers = new List(); + var tagHelpersPerBatch = -1; + + // Reads 5 copies of the TagHelpers (with 5x references) + // This ensures we don't have any dependencies on reference based GetHashCode + for (var i = 0; i < 5; ++i) + { + var tagHelpersBatch = ReadTagHelpers(TagHelpersTestFile.OpenRead()); + tagHelpers.AddRange(tagHelpersBatch); + tagHelpersPerBatch = tagHelpersBatch.Count; + } + + // Act + var hashes = new HashSet(tagHelpers.Select(t => t.GetHashCode())); + + // Assert + // Only 1 batch of taghelpers should remain after we filter by hash + Assert.Equal(hashes.Count(), tagHelpersPerBatch); + } + + private static TagHelperDescriptor CreateTagHelperDescriptor( + string tagName, + string typeName, + string assemblyName, + string tagMatchingRuleName = null, + IEnumerable> attributes = null) + { + var builder = TagHelperDescriptorBuilder.Create(typeName, assemblyName) as DefaultTagHelperDescriptorBuilder; + builder.TypeName(typeName); + + if (attributes != null) + { + foreach (var attributeBuilder in attributes) + { + builder.BoundAttributeDescriptor(attributeBuilder); + } + } + + builder.TagMatchingRuleDescriptor(ruleBuilder => ruleBuilder.RequireTagName(tagMatchingRuleName ?? tagName)); + + var descriptor = builder.Build(); + + return descriptor; + } + + private IReadOnlyList ReadTagHelpers(Stream stream) + { + var serializer = new JsonSerializer(); + serializer.Converters.Add(new RazorDiagnosticJsonConverter()); + serializer.Converters.Add(new TagHelperDescriptorJsonConverter()); + + IReadOnlyList result; + + using var streamReader = new StreamReader(stream); + using (var reader = new JsonTextReader(streamReader)) + { + result = serializer.Deserialize>(reader); + } + + stream.Dispose(); + + return result; + } + } +} diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/DiscoverCommand.cs b/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/DiscoverCommand.cs index 1c96b83e85..7ac1ea23c7 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/DiscoverCommand.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/DiscoverCommand.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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; @@ -13,7 +13,6 @@ using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.Razor; using Microsoft.CodeAnalysis.Razor.Serialization; using Microsoft.Extensions.CommandLineUtils; -using Microsoft.VisualStudio.LanguageServices.Razor.Serialization; using Newtonsoft.Json; namespace Microsoft.AspNetCore.Razor.Tools @@ -223,4 +222,4 @@ namespace Microsoft.AspNetCore.Razor.Tools } } } -} \ No newline at end of file +} diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/GenerateCommand.cs b/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/GenerateCommand.cs index 6bcf622d1d..229d62a040 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/GenerateCommand.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/GenerateCommand.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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; @@ -12,7 +12,6 @@ using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.Razor; using Microsoft.CodeAnalysis.Razor.Serialization; using Microsoft.Extensions.CommandLineUtils; -using Microsoft.VisualStudio.LanguageServices.Razor.Serialization; using Newtonsoft.Json; namespace Microsoft.AspNetCore.Razor.Tools @@ -201,6 +200,7 @@ namespace Microsoft.AspNetCore.Razor.Tools if (GenerateDeclaration.HasValue()) { b.Features.Add(new SetSuppressPrimaryMethodBodyOptionFeature()); + b.Features.Add(new SuppressChecksumOptionsFeature()); } if (RootNamespace.HasValue()) @@ -227,6 +227,7 @@ namespace Microsoft.AspNetCore.Razor.Tools }); var results = GenerateCode(engine, sourceItems); + var isGeneratingDeclaration = GenerateDeclaration.HasValue(); foreach (var result in results) { @@ -255,6 +256,18 @@ namespace Microsoft.AspNetCore.Razor.Tools { // Only output the file if we generated it without errors. var outputFilePath = result.InputItem.OutputPath; + var generatedCode = result.CSharpDocument.GeneratedCode; + if (isGeneratingDeclaration) + { + // When emiting declarations, only write if it the contents are different. + // This allows build incrementalism to kick in when the declaration remains unchanged between builds. + if (File.Exists(outputFilePath) && + string.Equals(File.ReadAllText(outputFilePath), generatedCode, StringComparison.Ordinal)) + { + continue; + } + } + File.WriteAllText(outputFilePath, result.CSharpDocument.GeneratedCode); } } diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/RewriteCssCommand.cs b/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/RewriteCssCommand.cs index 6369d3bc93..f9e33cae14 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/RewriteCssCommand.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/RewriteCssCommand.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; +using System.Text.RegularExpressions; using System.Threading.Tasks; using Microsoft.Css.Parser.Parser; using Microsoft.Css.Parser.Tokens; @@ -18,6 +19,11 @@ namespace Microsoft.AspNetCore.Razor.Tools { internal class RewriteCssCommand : CommandBase { + private const string DeepCombinatorText = "::deep"; + private readonly static TimeSpan _regexTimeout = TimeSpan.FromSeconds(1); + private readonly static Regex _deepCombinatorRegex = new Regex($@"^{DeepCombinatorText}\s*", RegexOptions.None, _regexTimeout); + private readonly static Regex _trailingCombinatorRegex = new Regex(@"\s+[\>\+\~]$", RegexOptions.None, _regexTimeout); + public RewriteCssCommand(Application parent) : base(parent, "rewritecss") { @@ -145,12 +151,12 @@ namespace Microsoft.AspNetCore.Razor.Tools // If there's a deep combinator among the sequence of simple selectors, we consider that to signal // the end of the set of simple selectors for us to look at, plus we strip it out var allSimpleSelectors = selector.Children.OfType(); - var firstDeepCombinator = allSimpleSelectors.FirstOrDefault(s => IsDeepCombinator(s.Text)); + var firstDeepCombinator = allSimpleSelectors.FirstOrDefault(s => _deepCombinatorRegex.IsMatch(s.Text)); var lastSimpleSelector = allSimpleSelectors.TakeWhile(s => s != firstDeepCombinator).LastOrDefault(); if (lastSimpleSelector != null) { - Edits.Add(new InsertSelectorScopeEdit { Position = lastSimpleSelector.AfterEnd }); + Edits.Add(new InsertSelectorScopeEdit { Position = FindPositionBeforeTrailingCombinator(lastSimpleSelector) }); } else if (firstDeepCombinator != null) { @@ -162,13 +168,32 @@ namespace Microsoft.AspNetCore.Razor.Tools // Also remove the deep combinator if we matched one if (firstDeepCombinator != null) { - Edits.Add(new DeleteContentEdit { Position = firstDeepCombinator.Start, DeleteLength = firstDeepCombinator.Length }); + Edits.Add(new DeleteContentEdit { Position = firstDeepCombinator.Start, DeleteLength = DeepCombinatorText.Length }); } } - private static bool IsDeepCombinator(string simpleSelectorText) + private int FindPositionBeforeTrailingCombinator(SimpleSelector lastSimpleSelector) { - return string.Equals(simpleSelectorText, "::deep", StringComparison.Ordinal); + // For a selector like "a > ::deep b", the parser splits it as "a >", "::deep", "b". + // The place we want to insert the scope is right after "a", hence we need to detect + // if the simple selector ends with " >" or similar, and if so, insert before that. + var text = lastSimpleSelector.Text; + var lastChar = text.Length > 0 ? text[^1] : default; + switch (lastChar) + { + case '>': + case '+': + case '~': + var trailingCombinatorMatch = _trailingCombinatorRegex.Match(text); + if (trailingCombinatorMatch.Success) + { + var trailingCombinatorLength = trailingCombinatorMatch.Length; + return lastSimpleSelector.AfterEnd - trailingCombinatorLength; + } + break; + } + + return lastSimpleSelector.AfterEnd; } protected override void VisitAtDirective(AtDirective item) diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/Microsoft.AspNetCore.Razor.Tools.csproj b/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/rzc.csproj similarity index 89% rename from src/Razor/Microsoft.AspNetCore.Razor.Tools/src/Microsoft.AspNetCore.Razor.Tools.csproj rename to src/Razor/Microsoft.AspNetCore.Razor.Tools/src/rzc.csproj index a12f1b8624..590e785d0e 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/Microsoft.AspNetCore.Razor.Tools.csproj +++ b/src/Razor/Microsoft.AspNetCore.Razor.Tools/src/rzc.csproj @@ -1,4 +1,4 @@ - + Razor is a markup syntax for adding server-side logic to web pages. This assembly contains infrastructure supporting Razor MSBuild integration. @@ -33,16 +33,16 @@ Shared\RazorDiagnosticJsonConverter.cs + + Shared\JsonReaderExtensions.cs + - - - - - + + diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Tools/test/RewriteCssCommandTest.cs b/src/Razor/Microsoft.AspNetCore.Razor.Tools/test/RewriteCssCommandTest.cs index 57d8830a52..2c2d199f80 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Tools/test/RewriteCssCommandTest.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Tools/test/RewriteCssCommandTest.cs @@ -91,6 +91,54 @@ namespace Microsoft.AspNetCore.Razor.Tools ", result); } + [Fact] + public void RespectsDeepCombinatorWithDirectDescendant() + { + // Arrange/act + var result = RewriteCssCommand.AddScopeToSelectors(@" + a > ::deep b { color: red; } + c ::deep > d { color: blue; } +", "TestScope"); + + // Assert + Assert.Equal(@" + a[TestScope] > b { color: red; } + c[TestScope] > d { color: blue; } +", result); + } + + [Fact] + public void RespectsDeepCombinatorWithAdjacentSibling() + { + // Arrange/act + var result = RewriteCssCommand.AddScopeToSelectors(@" + a + ::deep b { color: red; } + c ::deep + d { color: blue; } +", "TestScope"); + + // Assert + Assert.Equal(@" + a[TestScope] + b { color: red; } + c[TestScope] + d { color: blue; } +", result); + } + + [Fact] + public void RespectsDeepCombinatorWithGeneralSibling() + { + // Arrange/act + var result = RewriteCssCommand.AddScopeToSelectors(@" + a ~ ::deep b { color: red; } + c ::deep ~ d { color: blue; } +", "TestScope"); + + // Assert + Assert.Equal(@" + a[TestScope] ~ b { color: red; } + c[TestScope] ~ d { color: blue; } +", result); + } + [Fact] public void IgnoresMultipleDeepCombinators() { diff --git a/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/BuildIncrementalismTest.cs b/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/BuildIncrementalismTest.cs index df84c3b7a6..e651cad69f 100644 --- a/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/BuildIncrementalismTest.cs +++ b/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/BuildIncrementalismTest.cs @@ -174,9 +174,10 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests [Fact] [InitializeTestProject("MvcWithComponents")] - public async Task BuildComponents_RegeneratesComponentDefinition_WhenFilesChange() + public async Task BuildComponents_DoesNotRegenerateComponentDefinition_WhenDefinitionIsUnchanged() { // Act - 1 + var updatedContent = "Some content"; var tagHelperOutputCache = Path.Combine(IntermediateOutputPath, "MvcWithComponents.TagHelpers.output.cache"); var generatedFile = Path.Combine(RazorIntermediateOutputPath, "Views", "Shared", "NavMenu.razor.g.cs"); @@ -204,7 +205,56 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests var definitionThumbprint = GetThumbPrint(tagHelperOutputCache); // Act - 2 - ReplaceContent("Different things", "Views", "Shared", "NavMenu.razor"); + ReplaceContent(updatedContent, "Views", "Shared", "NavMenu.razor"); + result = await DotnetMSBuild("Build"); + + // Assert - 2 + Assert.FileExists(result, generatedDefinitionFile); + // Definition file remains unchanged. + Assert.Equal(generatedDefinitionThumbprint, GetThumbPrint(generatedDefinitionFile)); + Assert.FileExists(result, generatedFile); + // Generated file should change and include the new content. + Assert.NotEqual(generatedFileThumbprint, GetThumbPrint(generatedFile)); + Assert.FileContains(result, generatedFile, updatedContent); + + // TagHelper cache should remain unchanged. + Assert.Equal(definitionThumbprint, GetThumbPrint(tagHelperOutputCache)); + } + + [Fact] + [InitializeTestProject("MvcWithComponents")] + public async Task BuildComponents_RegeneratesComponentDefinition_WhenFilesChange() + { + // Act - 1 + var updatedContent = "@code { [Parameter] public string AParameter { get; set; } }"; + var tagHelperOutputCache = Path.Combine(IntermediateOutputPath, "MvcWithComponents.TagHelpers.output.cache"); + + var generatedFile = Path.Combine(RazorIntermediateOutputPath, "Views", "Shared", "NavMenu.razor.g.cs"); + var generatedDefinitionFile = Path.Combine(RazorComponentIntermediateOutputPath, "Views", "Shared", "NavMenu.razor.g.cs"); + + // Assert - 1 + var result = await DotnetMSBuild("Build"); + + Assert.BuildPassed(result); + var outputFile = Path.Combine(OutputPath, "MvcWithComponents.dll"); + Assert.FileExists(result, OutputPath, "MvcWithComponents.dll"); + var outputAssemblyThumbprint = GetThumbPrint(outputFile); + + Assert.FileExists(result, generatedDefinitionFile); + var generatedDefinitionThumbprint = GetThumbPrint(generatedDefinitionFile); + Assert.FileExists(result, generatedFile); + var generatedFileThumbprint = GetThumbPrint(generatedFile); + + Assert.FileExists(result, tagHelperOutputCache); + Assert.FileContains( + result, + tagHelperOutputCache, + @"""Name"":""MvcWithComponents.Views.Shared.NavMenu"""); + + var definitionThumbprint = GetThumbPrint(tagHelperOutputCache); + + // Act - 2 + ReplaceContent(updatedContent, "Views", "Shared", "NavMenu.razor"); result = await DotnetMSBuild("Build"); // Assert - 2 @@ -222,8 +272,12 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests tagHelperOutputCache, @"""Name"":""MvcWithComponents.Views.Shared.NavMenu"""); - // TODO: - Assert.Equal(definitionThumbprint, GetThumbPrint(tagHelperOutputCache)); + Assert.FileContains( + result, + tagHelperOutputCache, + "AParameter"); + + Assert.NotEqual(definitionThumbprint, GetThumbPrint(tagHelperOutputCache)); } [Fact] diff --git a/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/BuildServerIntegrationTest.cs b/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/BuildServerIntegrationTest.cs index 041c27a955..005ac4ccf6 100644 --- a/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/BuildServerIntegrationTest.cs +++ b/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/BuildServerIntegrationTest.cs @@ -155,7 +155,7 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests var repositoryRoot = ProjectDirectory.SearchUp(AppContext.BaseDirectory, "global.json"); var solutionRoot = Path.Combine(repositoryRoot, "src", "Razor"); var toolAssemblyDirectory = Path.Combine(solutionRoot, "Microsoft.AspNetCore.Razor.Tools", "src"); - var toolAssemblyPath = Path.Combine(toolAssemblyDirectory, "Microsoft.AspNetCore.Razor.Tools.csproj"); + var toolAssemblyPath = Path.Combine(toolAssemblyDirectory, "rzc.csproj"); var projectDirectory = new TestProjectDirectory(solutionRoot, toolAssemblyDirectory, toolAssemblyPath); var publishDir = Path.Combine(Path.GetTempPath(), "Razor", Path.GetRandomFileName(), "RzcPublish"); var publishResult = await MSBuildProcessManager.RunProcessAsync(projectDirectory, $"/t:Publish /p:PublishDir=\"{publishDir}\""); diff --git a/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/Microsoft.NET.Sdk.Razor.IntegrationTests.csproj b/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/Microsoft.NET.Sdk.Razor.IntegrationTests.csproj index 2832be128d..7733267812 100644 --- a/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/Microsoft.NET.Sdk.Razor.IntegrationTests.csproj +++ b/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/Microsoft.NET.Sdk.Razor.IntegrationTests.csproj @@ -30,11 +30,7 @@ - - - false - true - + diff --git a/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/StaticWebAssetsIntegrationTest.cs b/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/StaticWebAssetsIntegrationTest.cs index ed2cfab9b3..3d9d7149e8 100644 --- a/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/StaticWebAssetsIntegrationTest.cs +++ b/src/Razor/Microsoft.NET.Sdk.Razor/integrationtests/StaticWebAssetsIntegrationTest.cs @@ -83,6 +83,7 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests } [ConditionalFact] + [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/18543")] [OSSkipCondition(OperatingSystems.Linux | OperatingSystems.MacOSX)] [InitializeTestProject("AppWithPackageAndP2PReferenceAndRID", additionalProjects: new[] { "ClassLibrary", "ClassLibrary2" })] public async Task Publish_CopiesStaticWebAssetsToDestinationFolder_PublishSingleFile() diff --git a/src/Razor/Microsoft.NET.Sdk.Razor/src/Microsoft.NET.Sdk.Razor.csproj b/src/Razor/Microsoft.NET.Sdk.Razor/src/Microsoft.NET.Sdk.Razor.csproj index 552d192460..c1f511a8ac 100644 --- a/src/Razor/Microsoft.NET.Sdk.Razor/src/Microsoft.NET.Sdk.Razor.csproj +++ b/src/Razor/Microsoft.NET.Sdk.Razor/src/Microsoft.NET.Sdk.Razor.csproj @@ -24,18 +24,14 @@ - - @@ -73,12 +69,12 @@ - + <_RazorComponentInputHash> <_RazorComponentInputCacheFile>$(IntermediateOutputPath)$(MSBuildProjectName).RazorComponent.input.cache + <_RazorComponentDeclarationOutputCacheFile>$(IntermediateOutputPath)$(MSBuildProjectName).RazorComponent.output.cache @@ -85,7 +86,7 @@ Copyright (c) .NET Foundation. All rights reserved. Name="RazorGenerateComponentDeclaration" DependsOnTargets="$(RazorGenerateComponentDeclarationDependsOn)" Inputs="$(MSBuildAllProjects);@(RazorComponentWithTargetPath);$(_RazorComponentInputCacheFile)" - Outputs="@(_RazorComponentDeclaration)" + Outputs="$(_RazorComponentDeclarationOutputCacheFile)" Condition="'@(RazorComponentWithTargetPath->Count())'!='0'"> @@ -120,8 +121,13 @@ Copyright (c) .NET Foundation. All rights reserved. TagHelperManifest="$(_RazorComponentDeclarationManifest)" GenerateDeclaration="true" /> + + + diff --git a/src/Razor/Razor.slnf b/src/Razor/Razor.slnf index 33ae6982b5..14e12c6a03 100644 --- a/src/Razor/Razor.slnf +++ b/src/Razor/Razor.slnf @@ -14,7 +14,7 @@ "src\\Razor\\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X\\test\\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X.Test.csproj", "src\\Razor\\Microsoft.AspNetCore.Razor.Language\\src\\Microsoft.AspNetCore.Razor.Language.csproj", "src\\Razor\\Microsoft.AspNetCore.Razor.Language\\test\\Microsoft.AspNetCore.Razor.Language.Test.csproj", - "src\\Razor\\Microsoft.AspNetCore.Razor.Tools\\src\\Microsoft.AspNetCore.Razor.Tools.csproj", + "src\\Razor\\Microsoft.AspNetCore.Razor.Tools\\src\\rzc.csproj", "src\\Razor\\Microsoft.AspNetCore.Razor.Tools\\test\\Microsoft.AspNetCore.Razor.Tools.Test.csproj", "src\\Razor\\Microsoft.CodeAnalysis.Razor\\src\\Microsoft.CodeAnalysis.Razor.csproj", "src\\Razor\\Microsoft.CodeAnalysis.Razor\\test\\Microsoft.CodeAnalysis.Razor.Test.csproj", diff --git a/src/Razor/perf/Microsoft.AspNetCore.Razor.Performance/Microsoft.AspNetCore.Razor.Performance.csproj b/src/Razor/perf/Microsoft.AspNetCore.Razor.Performance/Microsoft.AspNetCore.Razor.Performance.csproj index 31cc0f16bd..75bf91f96d 100644 --- a/src/Razor/perf/Microsoft.AspNetCore.Razor.Performance/Microsoft.AspNetCore.Razor.Performance.csproj +++ b/src/Razor/perf/Microsoft.AspNetCore.Razor.Performance/Microsoft.AspNetCore.Razor.Performance.csproj @@ -1,4 +1,4 @@ - + netcoreapp2.1 @@ -16,15 +16,22 @@ - - - + Shared\TagHelperDescriptorJsonConverter.cs Shared\RazorDiagnosticJsonConverter.cs + + Shared\JsonReaderExtensions.cs + + + + + taghelpers.json + + diff --git a/src/Razor/perf/Microsoft.AspNetCore.Razor.Performance/RazorTagHelperParsingBenchmark.cs b/src/Razor/perf/Microsoft.AspNetCore.Razor.Performance/RazorTagHelperParsingBenchmark.cs index 56e80f62fb..89e3c291f7 100644 --- a/src/Razor/perf/Microsoft.AspNetCore.Razor.Performance/RazorTagHelperParsingBenchmark.cs +++ b/src/Razor/perf/Microsoft.AspNetCore.Razor.Performance/RazorTagHelperParsingBenchmark.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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; @@ -8,7 +8,6 @@ using BenchmarkDotNet.Attributes; using Microsoft.AspNetCore.Mvc.Razor.Extensions; using Microsoft.AspNetCore.Razor.Language; using Microsoft.CodeAnalysis.Razor.Serialization; -using Microsoft.VisualStudio.LanguageServices.Razor.Serialization; using Newtonsoft.Json; using static Microsoft.AspNetCore.Razor.Language.DefaultRazorTagHelperBinderPhase; diff --git a/src/Razor/tools/Microsoft.Aspnetcore.Razor.Internal.Transport/Microsoft.AspNetCore.Razor.Internal.Transport.csproj b/src/Razor/tools/Microsoft.Aspnetcore.Razor.Internal.Transport/Microsoft.AspNetCore.Razor.Internal.Transport.csproj index 7be2683e2a..379be1e6c6 100644 --- a/src/Razor/tools/Microsoft.Aspnetcore.Razor.Internal.Transport/Microsoft.AspNetCore.Razor.Internal.Transport.csproj +++ b/src/Razor/tools/Microsoft.Aspnetcore.Razor.Internal.Transport/Microsoft.AspNetCore.Razor.Internal.Transport.csproj @@ -9,6 +9,7 @@ + diff --git a/src/Security/Authentication/Certificate/samples/Certificate.Sample/Program.cs b/src/Security/Authentication/Certificate/samples/Certificate.Sample/Program.cs index 1c4a2d2958..c5077427d7 100644 --- a/src/Security/Authentication/Certificate/samples/Certificate.Sample/Program.cs +++ b/src/Security/Authentication/Certificate/samples/Certificate.Sample/Program.cs @@ -1,26 +1,30 @@ -using Microsoft.AspNetCore; +using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Server.Kestrel.Https; +using Microsoft.Extensions.Hosting; namespace Certificate.Sample { public class Program { - public static void Main(string[] args) + public static Task Main(string[] args) { - BuildWebHost(args).Run(); - } - - public static IWebHost BuildWebHost(string[] args) - => WebHost.CreateDefaultBuilder(args) - .UseStartup() - .ConfigureKestrel(options => - { - options.ConfigureHttpsDefaults(opt => + var host = Host.CreateDefaultBuilder(args) + .ConfigureWebHost(webHostBuilder => { - opt.ClientCertificateMode = ClientCertificateMode.RequireCertificate; - }); - }) - .Build(); + webHostBuilder + .UseStartup() + .ConfigureKestrel(options => + { + options.ConfigureHttpsDefaults(opt => + { + opt.ClientCertificateMode = ClientCertificateMode.RequireCertificate; + }); + }); + }) + .Build(); + + return host.RunAsync(); + } } } diff --git a/src/Security/Authentication/Cookies/samples/CookieSample/Program.cs b/src/Security/Authentication/Cookies/samples/CookieSample/Program.cs index 3f40d3194b..7cd8884876 100644 --- a/src/Security/Authentication/Cookies/samples/CookieSample/Program.cs +++ b/src/Security/Authentication/Cookies/samples/CookieSample/Program.cs @@ -1,26 +1,32 @@ -using System.IO; +using System.IO; +using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace CookieSample { public static class Program { - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = new WebHostBuilder() + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseKestrel() + .UseContentRoot(Directory.GetCurrentDirectory()) + .UseIISIntegration() + .UseStartup(); + }) .ConfigureLogging(factory => { factory.AddConsole(); factory.AddFilter("Console", level => level >= LogLevel.Information); }) - .UseKestrel() - .UseContentRoot(Directory.GetCurrentDirectory()) - .UseIISIntegration() - .UseStartup() .Build(); - host.Run(); + return host.RunAsync(); } } } diff --git a/src/Security/Authentication/Cookies/samples/CookieSessionSample/Program.cs b/src/Security/Authentication/Cookies/samples/CookieSessionSample/Program.cs index 1a19850e64..298b809ca1 100644 --- a/src/Security/Authentication/Cookies/samples/CookieSessionSample/Program.cs +++ b/src/Security/Authentication/Cookies/samples/CookieSessionSample/Program.cs @@ -1,26 +1,32 @@ -using System.IO; +using System.IO; +using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace CookieSessionSample { public static class Program { - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = new WebHostBuilder() + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseKestrel() + .UseContentRoot(Directory.GetCurrentDirectory()) + .UseIISIntegration() + .UseStartup(); + }) .ConfigureLogging(factory => { factory.AddConsole(); factory.AddFilter("Console", level => level >= LogLevel.Information); }) - .UseKestrel() - .UseContentRoot(Directory.GetCurrentDirectory()) - .UseIISIntegration() - .UseStartup() .Build(); - host.Run(); + return host.RunAsync(); } } } diff --git a/src/Security/Authentication/Cookies/src/CookieAuthenticationHandler.cs b/src/Security/Authentication/Cookies/src/CookieAuthenticationHandler.cs index 7ca9348595..f10e6114cd 100644 --- a/src/Security/Authentication/Cookies/src/CookieAuthenticationHandler.cs +++ b/src/Security/Authentication/Cookies/src/CookieAuthenticationHandler.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Diagnostics; using System.Linq; using System.Security.Claims; using System.Text.Encodings.Web; @@ -27,9 +28,9 @@ namespace Microsoft.AspNetCore.Authentication.Cookies private DateTimeOffset? _refreshIssuedUtc; private DateTimeOffset? _refreshExpiresUtc; - private string _sessionKey; - private Task _readCookieTask; - private AuthenticationTicket _refreshTicket; + private string? _sessionKey; + private Task? _readCookieTask; + private AuthenticationTicket? _refreshTicket; public CookieAuthenticationHandler(IOptionsMonitor options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : base(options, logger, encoder, clock) @@ -41,7 +42,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies /// protected new CookieAuthenticationEvents Events { - get { return (CookieAuthenticationEvents)base.Events; } + get { return (CookieAuthenticationEvents)base.Events!; } set { base.Events = value; } } @@ -86,7 +87,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies } } - private void RequestRefresh(AuthenticationTicket ticket, ClaimsPrincipal replacedPrincipal = null) + private void RequestRefresh(AuthenticationTicket ticket, ClaimsPrincipal? replacedPrincipal = null) { var issuedUtc = ticket.Properties.IssuedUtc; var expiresUtc = ticket.Properties.ExpiresUtc; @@ -102,7 +103,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies } } - private AuthenticationTicket CloneTicket(AuthenticationTicket ticket, ClaimsPrincipal replacedPrincipal) + private AuthenticationTicket CloneTicket(AuthenticationTicket ticket, ClaimsPrincipal? replacedPrincipal) { var principal = replacedPrincipal ?? ticket.Principal; var newPrincipal = new ClaimsPrincipal(); @@ -122,7 +123,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies private async Task ReadCookieTicket() { - var cookie = Options.CookieManager.GetRequestCookie(Context, Options.Cookie.Name); + var cookie = Options.CookieManager.GetRequestCookie(Context, Options.Cookie.Name!); if (string.IsNullOrEmpty(cookie)) { return AuthenticateResult.NoResult(); @@ -157,7 +158,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies { if (Options.SessionStore != null) { - await Options.SessionStore.RemoveAsync(_sessionKey); + await Options.SessionStore.RemoveAsync(_sessionKey!); } return AuthenticateResult.Fail("Ticket expired"); } @@ -176,6 +177,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies return result; } + Debug.Assert(result.Ticket != null); var context = new CookieValidatePrincipalContext(Context, Scheme, Options, result.Ticket); await Events.ValidatePrincipal(context); @@ -244,7 +246,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies Options.CookieManager.AppendResponseCookie( Context, - Options.Cookie.Name, + Options.Cookie.Name!, cookieValue, cookieOptions); @@ -252,7 +254,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies } } - protected async override Task HandleSignInAsync(ClaimsPrincipal user, AuthenticationProperties properties) + protected async override Task HandleSignInAsync(ClaimsPrincipal user, AuthenticationProperties? properties) { if (user == null) { @@ -299,7 +301,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies signInContext.CookieOptions.Expires = expiresUtc.ToUniversalTime(); } - var ticket = new AuthenticationTicket(signInContext.Principal, signInContext.Properties, signInContext.Scheme.Name); + var ticket = new AuthenticationTicket(signInContext.Principal!, signInContext.Properties, signInContext.Scheme.Name); if (Options.SessionStore != null) { @@ -324,14 +326,14 @@ namespace Microsoft.AspNetCore.Authentication.Cookies Options.CookieManager.AppendResponseCookie( Context, - Options.Cookie.Name, + Options.Cookie.Name!, cookieValue, signInContext.CookieOptions); var signedInContext = new CookieSignedInContext( Context, Scheme, - signInContext.Principal, + signInContext.Principal!, signInContext.Properties, Options); @@ -344,7 +346,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies Logger.AuthenticationSchemeSignedIn(Scheme.Name); } - protected async override Task HandleSignOutAsync(AuthenticationProperties properties) + protected async override Task HandleSignOutAsync(AuthenticationProperties? properties) { properties = properties ?? new AuthenticationProperties(); @@ -369,7 +371,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies Options.CookieManager.DeleteCookie( Context, - Options.Cookie.Name, + Options.Cookie.Name!, context.CookieOptions); // Only redirect on the logout path @@ -449,7 +451,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies await Events.RedirectToLogin(redirectContext); } - private string GetTlsTokenBinding() + private string? GetTlsTokenBinding() { var binding = Context.Features.Get()?.GetProvidedTokenBindingId(); return binding == null ? null : Convert.ToBase64String(binding); diff --git a/src/Security/Authentication/Cookies/src/CookieAuthenticationOptions.cs b/src/Security/Authentication/Cookies/src/CookieAuthenticationOptions.cs index 0248669979..49e7092b76 100644 --- a/src/Security/Authentication/Cookies/src/CookieAuthenticationOptions.cs +++ b/src/Security/Authentication/Cookies/src/CookieAuthenticationOptions.cs @@ -71,7 +71,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies /// /// If set this will be used by the CookieAuthenticationHandler for data protection. /// - public IDataProtectionProvider DataProtectionProvider { get; set; } + public IDataProtectionProvider? DataProtectionProvider { get; set; } /// /// The SlidingExpiration is set to true to instruct the handler to re-issue a new cookie with a new @@ -111,7 +111,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies /// public new CookieAuthenticationEvents Events { - get => (CookieAuthenticationEvents)base.Events; + get => (CookieAuthenticationEvents)base.Events!; set => base.Events = value; } @@ -119,20 +119,20 @@ namespace Microsoft.AspNetCore.Authentication.Cookies /// The TicketDataFormat is used to protect and unprotect the identity and other properties which are stored in the /// cookie value. If not provided one will be created using . /// - public ISecureDataFormat TicketDataFormat { get; set; } + public ISecureDataFormat TicketDataFormat { get; set; } = default!; /// /// The component used to get cookies from the request or set them on the response. /// /// ChunkingCookieManager will be used by default. /// - public ICookieManager CookieManager { get; set; } + public ICookieManager CookieManager { get; set; } = default!; /// /// An optional container in which to store the identity across requests. When used, only a session identifier is sent /// to the client. This can be used to mitigate potential problems with very large identities. /// - public ITicketStore SessionStore { get; set; } + public ITicketStore? SessionStore { get; set; } /// /// diff --git a/src/Security/Authentication/Cookies/src/CookieExtensions.cs b/src/Security/Authentication/Cookies/src/CookieExtensions.cs index 7763e6a624..7787ad8094 100644 --- a/src/Security/Authentication/Cookies/src/CookieExtensions.cs +++ b/src/Security/Authentication/Cookies/src/CookieExtensions.cs @@ -17,13 +17,13 @@ namespace Microsoft.Extensions.DependencyInjection public static AuthenticationBuilder AddCookie(this AuthenticationBuilder builder, string authenticationScheme) => builder.AddCookie(authenticationScheme, configureOptions: null); - public static AuthenticationBuilder AddCookie(this AuthenticationBuilder builder, Action configureOptions) + public static AuthenticationBuilder AddCookie(this AuthenticationBuilder builder, Action? configureOptions) => builder.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, configureOptions); - public static AuthenticationBuilder AddCookie(this AuthenticationBuilder builder, string authenticationScheme, Action configureOptions) + public static AuthenticationBuilder AddCookie(this AuthenticationBuilder builder, string authenticationScheme, Action? configureOptions) => builder.AddCookie(authenticationScheme, displayName: null, configureOptions: configureOptions); - public static AuthenticationBuilder AddCookie(this AuthenticationBuilder builder, string authenticationScheme, string displayName, Action configureOptions) + public static AuthenticationBuilder AddCookie(this AuthenticationBuilder builder, string authenticationScheme, string? displayName, Action? configureOptions) { builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton, PostConfigureCookieAuthenticationOptions>()); builder.Services.AddOptions(authenticationScheme).Validate(o => o.Cookie.Expiration == null, "Cookie.Expiration is ignored, use ExpireTimeSpan instead."); diff --git a/src/Security/Authentication/Cookies/src/CookieSignedInContext.cs b/src/Security/Authentication/Cookies/src/CookieSignedInContext.cs index 98c31dd190..d0d1dde8b7 100644 --- a/src/Security/Authentication/Cookies/src/CookieSignedInContext.cs +++ b/src/Security/Authentication/Cookies/src/CookieSignedInContext.cs @@ -23,7 +23,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies HttpContext context, AuthenticationScheme scheme, ClaimsPrincipal principal, - AuthenticationProperties properties, + AuthenticationProperties? properties, CookieAuthenticationOptions options) : base(context, scheme, options, properties) { diff --git a/src/Security/Authentication/Cookies/src/CookieSigningInContext.cs b/src/Security/Authentication/Cookies/src/CookieSigningInContext.cs index 41d7b4f6ae..b85429f0cf 100644 --- a/src/Security/Authentication/Cookies/src/CookieSigningInContext.cs +++ b/src/Security/Authentication/Cookies/src/CookieSigningInContext.cs @@ -25,7 +25,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies AuthenticationScheme scheme, CookieAuthenticationOptions options, ClaimsPrincipal principal, - AuthenticationProperties properties, + AuthenticationProperties? properties, CookieOptions cookieOptions) : base(context, scheme, options, properties) { diff --git a/src/Security/Authentication/Cookies/src/CookieSigningOutContext.cs b/src/Security/Authentication/Cookies/src/CookieSigningOutContext.cs index 34f6e49ab6..fd0e9712b1 100644 --- a/src/Security/Authentication/Cookies/src/CookieSigningOutContext.cs +++ b/src/Security/Authentication/Cookies/src/CookieSigningOutContext.cs @@ -22,7 +22,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies HttpContext context, AuthenticationScheme scheme, CookieAuthenticationOptions options, - AuthenticationProperties properties, + AuthenticationProperties? properties, CookieOptions cookieOptions) : base(context, scheme, options, properties) => CookieOptions = cookieOptions; diff --git a/src/Security/Authentication/Cookies/src/ICookieManager.cs b/src/Security/Authentication/Cookies/src/ICookieManager.cs index 4514fefa97..5db41d7223 100644 --- a/src/Security/Authentication/Cookies/src/ICookieManager.cs +++ b/src/Security/Authentication/Cookies/src/ICookieManager.cs @@ -17,7 +17,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies /// /// /// - string GetRequestCookie(HttpContext context, string key); + string? GetRequestCookie(HttpContext context, string key); /// /// Append the given cookie to the response. @@ -26,7 +26,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies /// /// /// - void AppendResponseCookie(HttpContext context, string key, string value, CookieOptions options); + void AppendResponseCookie(HttpContext context, string key, string? value, CookieOptions options); /// /// Append a delete cookie to the response. diff --git a/src/Security/Authentication/Cookies/src/LoggingExtensions.cs b/src/Security/Authentication/Cookies/src/LoggingExtensions.cs index a8a59f29dd..340fb04a29 100644 --- a/src/Security/Authentication/Cookies/src/LoggingExtensions.cs +++ b/src/Security/Authentication/Cookies/src/LoggingExtensions.cs @@ -7,8 +7,8 @@ namespace Microsoft.Extensions.Logging { internal static class LoggingExtensions { - private static Action _authenticationSchemeSignedIn; - private static Action _authenticationSchemeSignedOut; + private static Action _authenticationSchemeSignedIn; + private static Action _authenticationSchemeSignedOut; static LoggingExtensions() { diff --git a/src/Security/Authentication/Cookies/src/Microsoft.AspNetCore.Authentication.Cookies.csproj b/src/Security/Authentication/Cookies/src/Microsoft.AspNetCore.Authentication.Cookies.csproj index 803c58f408..af13015b04 100644 --- a/src/Security/Authentication/Cookies/src/Microsoft.AspNetCore.Authentication.Cookies.csproj +++ b/src/Security/Authentication/Cookies/src/Microsoft.AspNetCore.Authentication.Cookies.csproj @@ -1,4 +1,4 @@ - + ASP.NET Core middleware that enables an application to use cookie based authentication. @@ -9,6 +9,7 @@ true aspnetcore;authentication;security false + enable diff --git a/src/Security/Authentication/Cookies/src/PostConfigureCookieAuthenticationOptions.cs b/src/Security/Authentication/Cookies/src/PostConfigureCookieAuthenticationOptions.cs index 48895072e9..5881098800 100644 --- a/src/Security/Authentication/Cookies/src/PostConfigureCookieAuthenticationOptions.cs +++ b/src/Security/Authentication/Cookies/src/PostConfigureCookieAuthenticationOptions.cs @@ -26,7 +26,7 @@ namespace Microsoft.AspNetCore.Authentication.Cookies /// The options instance to configure. public void PostConfigure(string name, CookieAuthenticationOptions options) { - options.DataProtectionProvider = options.DataProtectionProvider ?? _dp; + options.DataProtectionProvider ??= _dp; if (string.IsNullOrEmpty(options.Cookie.Name)) { diff --git a/src/Security/Authentication/Core/src/AuthenticationBuilder.cs b/src/Security/Authentication/Core/src/AuthenticationBuilder.cs index d4efd0c847..c89c153003 100644 --- a/src/Security/Authentication/Core/src/AuthenticationBuilder.cs +++ b/src/Security/Authentication/Core/src/AuthenticationBuilder.cs @@ -25,7 +25,7 @@ namespace Microsoft.AspNetCore.Authentication /// public virtual IServiceCollection Services { get; } - private AuthenticationBuilder AddSchemeHelper(string authenticationScheme, string displayName, Action configureOptions) + private AuthenticationBuilder AddSchemeHelper(string authenticationScheme, string? displayName, Action? configureOptions) where TOptions : AuthenticationSchemeOptions, new() where THandler : class, IAuthenticationHandler { @@ -57,7 +57,7 @@ namespace Microsoft.AspNetCore.Authentication /// The display name of this scheme. /// Used to configure the scheme options. /// The builder. - public virtual AuthenticationBuilder AddScheme(string authenticationScheme, string displayName, Action configureOptions) + public virtual AuthenticationBuilder AddScheme(string authenticationScheme, string? displayName, Action? configureOptions) where TOptions : AuthenticationSchemeOptions, new() where THandler : AuthenticationHandler => AddSchemeHelper(authenticationScheme, displayName, configureOptions); @@ -70,7 +70,7 @@ namespace Microsoft.AspNetCore.Authentication /// The name of this scheme. /// Used to configure the scheme options. /// The builder. - public virtual AuthenticationBuilder AddScheme(string authenticationScheme, Action configureOptions) + public virtual AuthenticationBuilder AddScheme(string authenticationScheme, Action? configureOptions) where TOptions : AuthenticationSchemeOptions, new() where THandler : AuthenticationHandler => AddScheme(authenticationScheme, displayName: null, configureOptions: configureOptions); @@ -85,7 +85,7 @@ namespace Microsoft.AspNetCore.Authentication /// The display name of this scheme. /// Used to configure the scheme options. /// The builder. - public virtual AuthenticationBuilder AddRemoteScheme(string authenticationScheme, string displayName, Action configureOptions) + public virtual AuthenticationBuilder AddRemoteScheme(string authenticationScheme, string? displayName, Action? configureOptions) where TOptions : RemoteAuthenticationOptions, new() where THandler : RemoteAuthenticationHandler { @@ -101,7 +101,7 @@ namespace Microsoft.AspNetCore.Authentication /// The display name of this scheme. /// Used to configure the scheme options. /// The builder. - public virtual AuthenticationBuilder AddPolicyScheme(string authenticationScheme, string displayName, Action configureOptions) + public virtual AuthenticationBuilder AddPolicyScheme(string authenticationScheme, string? displayName, Action configureOptions) => AddSchemeHelper(authenticationScheme, displayName, configureOptions); // Used to ensure that there's always a default sign in scheme that's not itself @@ -116,7 +116,7 @@ namespace Microsoft.AspNetCore.Authentication public void PostConfigure(string name, TOptions options) { - options.SignInScheme = options.SignInScheme ?? _authOptions.DefaultSignInScheme ?? _authOptions.DefaultScheme; + options.SignInScheme ??= _authOptions.DefaultSignInScheme ?? _authOptions.DefaultScheme; } } } diff --git a/src/Security/Authentication/Core/src/AuthenticationHandler.cs b/src/Security/Authentication/Core/src/AuthenticationHandler.cs index 5f8a8d588f..d19286d030 100644 --- a/src/Security/Authentication/Core/src/AuthenticationHandler.cs +++ b/src/Security/Authentication/Core/src/AuthenticationHandler.cs @@ -13,11 +13,11 @@ namespace Microsoft.AspNetCore.Authentication { public abstract class AuthenticationHandler : IAuthenticationHandler where TOptions : AuthenticationSchemeOptions, new() { - private Task _authenticateTask; + private Task? _authenticateTask; - public AuthenticationScheme Scheme { get; private set; } - public TOptions Options { get; private set; } - protected HttpContext Context { get; private set; } + public AuthenticationScheme Scheme { get; private set; } = default!; + public TOptions Options { get; private set; } = default!; + protected HttpContext Context { get; private set; } = default!; protected HttpRequest Request { @@ -45,7 +45,7 @@ namespace Microsoft.AspNetCore.Authentication /// The handler calls methods on the events which give the application control at certain points where processing is occurring. /// If it is not provided a default instance is supplied which does nothing when the methods are called. /// - protected virtual object Events { get; set; } + protected virtual object? Events { get; set; } protected virtual string ClaimsIssuer => Options.ClaimsIssuer ?? Scheme.Name; @@ -116,7 +116,7 @@ namespace Microsoft.AspNetCore.Authentication protected string BuildRedirectUri(string targetPath) => Request.Scheme + "://" + Request.Host + OriginalPathBase + targetPath; - protected virtual string ResolveTarget(string scheme) + protected virtual string? ResolveTarget(string? scheme) { var target = scheme ?? Options.ForwardDefaultSelector?.Invoke(Context) ?? Options.ForwardDefault; @@ -135,10 +135,10 @@ namespace Microsoft.AspNetCore.Authentication } // Calling Authenticate more than once should always return the original value. - var result = await HandleAuthenticateOnceAsync(); - if (result?.Failure == null) + var result = await HandleAuthenticateOnceAsync() ?? AuthenticateResult.NoResult(); + if (result.Failure == null) { - var ticket = result?.Ticket; + var ticket = result.Ticket; if (ticket?.Principal != null) { Logger.AuthenticationSchemeAuthenticated(Scheme.Name); @@ -212,7 +212,7 @@ namespace Microsoft.AspNetCore.Authentication return Task.CompletedTask; } - public async Task ChallengeAsync(AuthenticationProperties properties) + public async Task ChallengeAsync(AuthenticationProperties? properties) { var target = ResolveTarget(Options.ForwardChallenge); if (target != null) @@ -221,12 +221,12 @@ namespace Microsoft.AspNetCore.Authentication return; } - properties = properties ?? new AuthenticationProperties(); + properties ??= new AuthenticationProperties(); await HandleChallengeAsync(properties); Logger.AuthenticationSchemeChallenged(Scheme.Name); } - public async Task ForbidAsync(AuthenticationProperties properties) + public async Task ForbidAsync(AuthenticationProperties? properties) { var target = ResolveTarget(Options.ForwardForbid); if (target != null) @@ -235,7 +235,7 @@ namespace Microsoft.AspNetCore.Authentication return; } - properties = properties ?? new AuthenticationProperties(); + properties ??= new AuthenticationProperties(); await HandleForbiddenAsync(properties); Logger.AuthenticationSchemeForbidden(Scheme.Name); } diff --git a/src/Security/Authentication/Core/src/AuthenticationSchemeOptions.cs b/src/Security/Authentication/Core/src/AuthenticationSchemeOptions.cs index 0f1e1b9814..1cfe428cf5 100644 --- a/src/Security/Authentication/Core/src/AuthenticationSchemeOptions.cs +++ b/src/Security/Authentication/Core/src/AuthenticationSchemeOptions.cs @@ -26,17 +26,17 @@ namespace Microsoft.AspNetCore.Authentication /// /// Gets or sets the issuer that should be used for any claims that are created /// - public string ClaimsIssuer { get; set; } + public string? ClaimsIssuer { get; set; } /// /// Instance used for events /// - public object Events { get; set; } + public object? Events { get; set; } /// /// If set, will be used as the service type to get the Events instance instead of the property. /// - public Type EventsType { get; set; } + public Type? EventsType { get; set; } /// /// If set, this specifies a default scheme that authentication handlers should forward all authentication operations to @@ -44,42 +44,42 @@ namespace Microsoft.AspNetCore.Authentication /// setting first, followed by checking the ForwardDefaultSelector, followed by ForwardDefault. The first non null result /// will be used as the target scheme to forward to. /// - public string ForwardDefault { get; set; } + public string? ForwardDefault { get; set; } /// /// If set, this specifies the target scheme that this scheme should forward AuthenticateAsync calls to. /// For example Context.AuthenticateAsync("ThisScheme") => Context.AuthenticateAsync("ForwardAuthenticateValue"); /// Set the target to the current scheme to disable forwarding and allow normal processing. /// - public string ForwardAuthenticate { get; set; } + public string? ForwardAuthenticate { get; set; } /// /// If set, this specifies the target scheme that this scheme should forward ChallengeAsync calls to. /// For example Context.ChallengeAsync("ThisScheme") => Context.ChallengeAsync("ForwardChallengeValue"); /// Set the target to the current scheme to disable forwarding and allow normal processing. /// - public string ForwardChallenge { get; set; } + public string? ForwardChallenge { get; set; } /// /// If set, this specifies the target scheme that this scheme should forward ForbidAsync calls to. /// For example Context.ForbidAsync("ThisScheme") => Context.ForbidAsync("ForwardForbidValue"); /// Set the target to the current scheme to disable forwarding and allow normal processing. /// - public string ForwardForbid { get; set; } + public string? ForwardForbid { get; set; } /// /// If set, this specifies the target scheme that this scheme should forward SignInAsync calls to. /// For example Context.SignInAsync("ThisScheme") => Context.SignInAsync("ForwardSignInValue"); /// Set the target to the current scheme to disable forwarding and allow normal processing. /// - public string ForwardSignIn { get; set; } + public string? ForwardSignIn { get; set; } /// /// If set, this specifies the target scheme that this scheme should forward SignOutAsync calls to. /// For example Context.SignOutAsync("ThisScheme") => Context.SignOutAsync("ForwardSignOutValue"); /// Set the target to the current scheme to disable forwarding and allow normal processing. /// - public string ForwardSignOut { get; set; } + public string? ForwardSignOut { get; set; } /// /// Used to select a default scheme for the current request that authentication handlers should forward all authentication operations to @@ -87,7 +87,7 @@ namespace Microsoft.AspNetCore.Authentication /// setting first, followed by checking the ForwardDefaultSelector, followed by ForwardDefault. The first non null result /// will be used as the target scheme to forward to. /// - public Func ForwardDefaultSelector { get; set; } + public Func? ForwardDefaultSelector { get; set; } } } diff --git a/src/Security/Authentication/Core/src/AuthenticationServiceCollectionExtensions.cs b/src/Security/Authentication/Core/src/AuthenticationServiceCollectionExtensions.cs index 6c381b84ab..70e707f34d 100644 --- a/src/Security/Authentication/Core/src/AuthenticationServiceCollectionExtensions.cs +++ b/src/Security/Authentication/Core/src/AuthenticationServiceCollectionExtensions.cs @@ -58,7 +58,7 @@ namespace Microsoft.Extensions.DependencyInjection public void PostConfigure(string name, TOptions options) { - options.SignInScheme = options.SignInScheme ?? _authOptions.DefaultSignInScheme; + options.SignInScheme ??= _authOptions.DefaultSignInScheme; } } diff --git a/src/Security/Authentication/Core/src/Events/AccessDeniedContext.cs b/src/Security/Authentication/Core/src/Events/AccessDeniedContext.cs index f01d69453b..30cfee4e69 100644 --- a/src/Security/Authentication/Core/src/Events/AccessDeniedContext.cs +++ b/src/Security/Authentication/Core/src/Events/AccessDeniedContext.cs @@ -27,18 +27,18 @@ namespace Microsoft.AspNetCore.Authentication /// /// Additional state values for the authentication session. /// - public AuthenticationProperties Properties { get; set; } + public AuthenticationProperties? Properties { get; set; } /// /// Gets or sets the return URL that will be flowed up to the access denied page. /// If is not set, this property is not used. /// - public string ReturnUrl { get; set; } + public string? ReturnUrl { get; set; } /// /// Gets or sets the parameter name that will be used to flow the return URL. /// By default, this property is set to . /// - public string ReturnUrlParameter { get; set; } + public string ReturnUrlParameter { get; set; } = default!; } } diff --git a/src/Security/Authentication/Core/src/Events/HandleRequestContext.cs b/src/Security/Authentication/Core/src/Events/HandleRequestContext.cs index 52dd9ce12f..d31cc921e2 100644 --- a/src/Security/Authentication/Core/src/Events/HandleRequestContext.cs +++ b/src/Security/Authentication/Core/src/Events/HandleRequestContext.cs @@ -16,7 +16,7 @@ namespace Microsoft.AspNetCore.Authentication /// /// The which is used by the handler. /// - public HandleRequestResult Result { get; protected set; } + public HandleRequestResult Result { get; protected set; } = default!; /// /// Discontinue all processing for this request and return to the client. @@ -29,4 +29,4 @@ namespace Microsoft.AspNetCore.Authentication /// public void SkipHandler() => Result = HandleRequestResult.SkipHandler(); } -} \ No newline at end of file +} diff --git a/src/Security/Authentication/Core/src/Events/PrincipalContext.cs b/src/Security/Authentication/Core/src/Events/PrincipalContext.cs index 8bf40760a1..f2585fdfbc 100644 --- a/src/Security/Authentication/Core/src/Events/PrincipalContext.cs +++ b/src/Security/Authentication/Core/src/Events/PrincipalContext.cs @@ -19,12 +19,12 @@ namespace Microsoft.AspNetCore.Authentication /// The authentication scheme. /// The authentication options associated with the scheme. /// The authentication properties. - protected PrincipalContext(HttpContext context, AuthenticationScheme scheme, TOptions options, AuthenticationProperties properties) + protected PrincipalContext(HttpContext context, AuthenticationScheme scheme, TOptions options, AuthenticationProperties? properties) : base(context, scheme, options, properties) { } /// /// Gets the containing the user claims. /// - public virtual ClaimsPrincipal Principal { get; set; } + public virtual ClaimsPrincipal? Principal { get; set; } } } diff --git a/src/Security/Authentication/Core/src/Events/PropertiesContext.cs b/src/Security/Authentication/Core/src/Events/PropertiesContext.cs index f1730d0d7f..f803d248b5 100644 --- a/src/Security/Authentication/Core/src/Events/PropertiesContext.cs +++ b/src/Security/Authentication/Core/src/Events/PropertiesContext.cs @@ -17,7 +17,7 @@ namespace Microsoft.AspNetCore.Authentication /// The authentication scheme. /// The authentication options associated with the scheme. /// The authentication properties. - protected PropertiesContext(HttpContext context, AuthenticationScheme scheme, TOptions options, AuthenticationProperties properties) + protected PropertiesContext(HttpContext context, AuthenticationScheme scheme, TOptions options, AuthenticationProperties? properties) : base(context, scheme, options) { Properties = properties ?? new AuthenticationProperties(); diff --git a/src/Security/Authentication/Core/src/Events/RemoteAuthenticationContext.cs b/src/Security/Authentication/Core/src/Events/RemoteAuthenticationContext.cs index b7a0168798..76b42239bc 100644 --- a/src/Security/Authentication/Core/src/Events/RemoteAuthenticationContext.cs +++ b/src/Security/Authentication/Core/src/Events/RemoteAuthenticationContext.cs @@ -23,14 +23,14 @@ namespace Microsoft.AspNetCore.Authentication HttpContext context, AuthenticationScheme scheme, TOptions options, - AuthenticationProperties properties) + AuthenticationProperties? properties) : base(context, scheme, options) => Properties = properties ?? new AuthenticationProperties(); /// /// Gets the containing the user claims. /// - public ClaimsPrincipal Principal { get; set; } + public ClaimsPrincipal? Principal { get; set; } /// /// Gets or sets the . @@ -40,10 +40,10 @@ namespace Microsoft.AspNetCore.Authentication /// /// Calls success creating a ticket with the and . /// - public void Success() => Result = HandleRequestResult.Success(new AuthenticationTicket(Principal, Properties, Scheme.Name)); + public void Success() => Result = HandleRequestResult.Success(new AuthenticationTicket(Principal!, Properties, Scheme.Name)); public void Fail(Exception failure) => Result = HandleRequestResult.Fail(failure); public void Fail(string failureMessage) => Result = HandleRequestResult.Fail(failureMessage); } -} \ No newline at end of file +} diff --git a/src/Security/Authentication/Core/src/Events/RemoteFailureContext.cs b/src/Security/Authentication/Core/src/Events/RemoteFailureContext.cs index 6b3598f40a..c39956aa3f 100644 --- a/src/Security/Authentication/Core/src/Events/RemoteFailureContext.cs +++ b/src/Security/Authentication/Core/src/Events/RemoteFailureContext.cs @@ -24,11 +24,11 @@ namespace Microsoft.AspNetCore.Authentication /// /// User friendly error message for the error. /// - public Exception Failure { get; set; } + public Exception? Failure { get; set; } /// /// Additional state values for the authentication session. /// - public AuthenticationProperties Properties { get; set; } + public AuthenticationProperties? Properties { get; set; } } } diff --git a/src/Security/Authentication/Core/src/Events/ResultContext.cs b/src/Security/Authentication/Core/src/Events/ResultContext.cs index 12b21f4bf6..b8ca95b43e 100644 --- a/src/Security/Authentication/Core/src/Events/ResultContext.cs +++ b/src/Security/Authentication/Core/src/Events/ResultContext.cs @@ -12,6 +12,8 @@ namespace Microsoft.AspNetCore.Authentication /// public abstract class ResultContext : BaseContext where TOptions : AuthenticationSchemeOptions { + private AuthenticationProperties? _properties; + /// /// Constructor. /// @@ -24,26 +26,30 @@ namespace Microsoft.AspNetCore.Authentication /// /// Gets or sets the containing the user claims. /// - public ClaimsPrincipal Principal { get; set; } + public ClaimsPrincipal? Principal { get; set; } - private AuthenticationProperties _properties; /// /// Gets or sets the . /// - public AuthenticationProperties Properties { - get => _properties ?? (_properties = new AuthenticationProperties()); + public AuthenticationProperties Properties + { + get + { + _properties ??= new AuthenticationProperties(); + return _properties; + } set => _properties = value; } /// /// Gets the result. /// - public AuthenticateResult Result { get; private set; } + public AuthenticateResult Result { get; private set; } = default!; /// /// Calls success creating a ticket with the and . /// - public void Success() => Result = HandleRequestResult.Success(new AuthenticationTicket(Principal, Properties, Scheme.Name)); + public void Success() => Result = HandleRequestResult.Success(new AuthenticationTicket(Principal!, Properties, Scheme.Name)); /// /// Indicates that there was no information returned for this authentication scheme. diff --git a/src/Security/Authentication/Core/src/Events/TicketReceivedContext.cs b/src/Security/Authentication/Core/src/Events/TicketReceivedContext.cs index 51b77a37fa..665cb2769a 100644 --- a/src/Security/Authentication/Core/src/Events/TicketReceivedContext.cs +++ b/src/Security/Authentication/Core/src/Events/TicketReceivedContext.cs @@ -19,6 +19,6 @@ namespace Microsoft.AspNetCore.Authentication : base(context, scheme, options, ticket?.Properties) => Principal = ticket?.Principal; - public string ReturnUri { get; set; } + public string? ReturnUri { get; set; } } } diff --git a/src/Security/Authentication/Core/src/IDataSerializer.cs b/src/Security/Authentication/Core/src/IDataSerializer.cs index ad9c523005..be1367600c 100644 --- a/src/Security/Authentication/Core/src/IDataSerializer.cs +++ b/src/Security/Authentication/Core/src/IDataSerializer.cs @@ -1,11 +1,15 @@ // 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.Diagnostics.CodeAnalysis; + namespace Microsoft.AspNetCore.Authentication { public interface IDataSerializer { byte[] Serialize(TModel model); + + [return: MaybeNull] TModel Deserialize(byte[] data); } } diff --git a/src/Security/Authentication/Core/src/ISecureDataFormat.cs b/src/Security/Authentication/Core/src/ISecureDataFormat.cs index 73b1b882b5..56b815440b 100644 --- a/src/Security/Authentication/Core/src/ISecureDataFormat.cs +++ b/src/Security/Authentication/Core/src/ISecureDataFormat.cs @@ -1,13 +1,20 @@ // 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.Diagnostics.CodeAnalysis; + namespace Microsoft.AspNetCore.Authentication { public interface ISecureDataFormat { string Protect(TData data); - string Protect(TData data, string purpose); + + string Protect(TData data, string? purpose); + + [return: MaybeNull] TData Unprotect(string protectedText); - TData Unprotect(string protectedText, string purpose); + + [return: MaybeNull] + TData Unprotect(string protectedText, string? purpose); } } diff --git a/src/Security/Authentication/Core/src/JsonDocumentAuthExtensions.cs b/src/Security/Authentication/Core/src/JsonDocumentAuthExtensions.cs index 83784ddfd3..eaa3ea5c30 100644 --- a/src/Security/Authentication/Core/src/JsonDocumentAuthExtensions.cs +++ b/src/Security/Authentication/Core/src/JsonDocumentAuthExtensions.cs @@ -7,7 +7,7 @@ namespace Microsoft.AspNetCore.Authentication { public static class JsonDocumentAuthExtensions { - public static string GetString(this JsonElement element, string key) + public static string? GetString(this JsonElement element, string key) { if (element.TryGetProperty(key, out var property) && property.ValueKind != JsonValueKind.Null) { diff --git a/src/Security/Authentication/Core/src/LoggingExtensions.cs b/src/Security/Authentication/Core/src/LoggingExtensions.cs index 75a1e3e6e3..d8a9d3ef64 100644 --- a/src/Security/Authentication/Core/src/LoggingExtensions.cs +++ b/src/Security/Authentication/Core/src/LoggingExtensions.cs @@ -7,20 +7,20 @@ namespace Microsoft.Extensions.Logging { internal static class LoggingExtensions { - private static readonly Action _authenticationSchemeAuthenticated; - private static readonly Action _authenticationSchemeNotAuthenticated; - private static readonly Action _authenticationSchemeNotAuthenticatedWithFailure; - private static readonly Action _authenticationSchemeChallenged; - private static readonly Action _authenticationSchemeForbidden; - private static readonly Action _remoteAuthenticationError; - private static readonly Action _signInHandled; - private static readonly Action _signInSkipped; - private static readonly Action _correlationPropertyNotFound; - private static readonly Action _correlationCookieNotFound; - private static readonly Action _unexpectedCorrelationCookieValue; - private static readonly Action _accessDeniedError; - private static readonly Action _accessDeniedContextHandled; - private static readonly Action _accessDeniedContextSkipped; + private static readonly Action _authenticationSchemeAuthenticated; + private static readonly Action _authenticationSchemeNotAuthenticated; + private static readonly Action _authenticationSchemeNotAuthenticatedWithFailure; + private static readonly Action _authenticationSchemeChallenged; + private static readonly Action _authenticationSchemeForbidden; + private static readonly Action _remoteAuthenticationError; + private static readonly Action _signInHandled; + private static readonly Action _signInSkipped; + private static readonly Action _correlationPropertyNotFound; + private static readonly Action _correlationCookieNotFound; + private static readonly Action _unexpectedCorrelationCookieValue; + private static readonly Action _accessDeniedError; + private static readonly Action _accessDeniedContextHandled; + private static readonly Action _accessDeniedContextSkipped; static LoggingExtensions() { diff --git a/src/Security/Authentication/Core/src/Microsoft.AspNetCore.Authentication.csproj b/src/Security/Authentication/Core/src/Microsoft.AspNetCore.Authentication.csproj index e81a55f314..5d8135751d 100644 --- a/src/Security/Authentication/Core/src/Microsoft.AspNetCore.Authentication.csproj +++ b/src/Security/Authentication/Core/src/Microsoft.AspNetCore.Authentication.csproj @@ -1,4 +1,4 @@ - + ASP.NET Core common types used by the various authentication middleware components. @@ -8,6 +8,7 @@ true aspnetcore;authentication;security false + enable diff --git a/src/Security/Authentication/Core/src/PolicySchemeHandler.cs b/src/Security/Authentication/Core/src/PolicySchemeHandler.cs index 4dbbb7de2d..3a171f1cf2 100644 --- a/src/Security/Authentication/Core/src/PolicySchemeHandler.cs +++ b/src/Security/Authentication/Core/src/PolicySchemeHandler.cs @@ -18,19 +18,19 @@ namespace Microsoft.AspNetCore.Authentication public PolicySchemeHandler(IOptionsMonitor options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : base(options, logger, encoder, clock) { } - protected override Task HandleChallengeAsync(AuthenticationProperties properties) + protected override Task HandleChallengeAsync(AuthenticationProperties? properties) => throw new NotImplementedException(); - protected override Task HandleForbiddenAsync(AuthenticationProperties properties) + protected override Task HandleForbiddenAsync(AuthenticationProperties? properties) => throw new NotImplementedException(); - protected override Task HandleSignInAsync(ClaimsPrincipal user, AuthenticationProperties properties) + protected override Task HandleSignInAsync(ClaimsPrincipal user, AuthenticationProperties? properties) => throw new NotImplementedException(); - protected override Task HandleSignOutAsync(AuthenticationProperties properties) + protected override Task HandleSignOutAsync(AuthenticationProperties? properties) => throw new NotImplementedException(); protected override Task HandleAuthenticateAsync() => throw new NotImplementedException(); } -} \ No newline at end of file +} diff --git a/src/Security/Authentication/Core/src/PropertiesSerializer.cs b/src/Security/Authentication/Core/src/PropertiesSerializer.cs index c213bc4f60..0789d1e1a1 100644 --- a/src/Security/Authentication/Core/src/PropertiesSerializer.cs +++ b/src/Security/Authentication/Core/src/PropertiesSerializer.cs @@ -26,7 +26,7 @@ namespace Microsoft.AspNetCore.Authentication } } - public virtual AuthenticationProperties Deserialize(byte[] data) + public virtual AuthenticationProperties? Deserialize(byte[] data) { using (var memory = new MemoryStream(data)) { @@ -59,7 +59,7 @@ namespace Microsoft.AspNetCore.Authentication } } - public virtual AuthenticationProperties Read(BinaryReader reader) + public virtual AuthenticationProperties? Read(BinaryReader reader) { if (reader == null) { @@ -72,12 +72,12 @@ namespace Microsoft.AspNetCore.Authentication } var count = reader.ReadInt32(); - var extra = new Dictionary(count); + var extra = new Dictionary(count); for (var index = 0; index != count; ++index) { - string key = reader.ReadString(); - string value = reader.ReadString(); + var key = reader.ReadString(); + var value = reader.ReadString(); extra.Add(key, value); } return new AuthenticationProperties(extra); diff --git a/src/Security/Authentication/Core/src/RemoteAuthenticationHandler.cs b/src/Security/Authentication/Core/src/RemoteAuthenticationHandler.cs index 2f650f0971..ed5e379d66 100644 --- a/src/Security/Authentication/Core/src/RemoteAuthenticationHandler.cs +++ b/src/Security/Authentication/Core/src/RemoteAuthenticationHandler.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Diagnostics; using System.Security.Cryptography; using System.Text.Encodings.Web; using System.Threading.Tasks; @@ -18,7 +19,7 @@ namespace Microsoft.AspNetCore.Authentication private const string CorrelationMarker = "N"; private const string AuthSchemeKey = ".AuthScheme"; - protected string SignInScheme => Options.SignInScheme; + protected string? SignInScheme => Options.SignInScheme; /// /// The handler calls methods on the events which give the application control at certain points where processing is occurring. @@ -26,7 +27,7 @@ namespace Microsoft.AspNetCore.Authentication /// protected new RemoteAuthenticationEvents Events { - get { return (RemoteAuthenticationEvents)base.Events; } + get { return (RemoteAuthenticationEvents)base.Events!; } set { base.Events = value; } } @@ -46,9 +47,9 @@ namespace Microsoft.AspNetCore.Authentication return false; } - AuthenticationTicket ticket = null; - Exception exception = null; - AuthenticationProperties properties = null; + AuthenticationTicket? ticket = null; + Exception? exception = null; + AuthenticationProperties? properties = null; try { var authResult = await HandleRemoteAuthenticateAsync(); @@ -109,6 +110,7 @@ namespace Microsoft.AspNetCore.Authentication } // We have a ticket if we get here + Debug.Assert(ticket != null); var ticketContext = new TicketReceivedContext(Context, Scheme, Options, ticket) { ReturnUri = ticket.Properties.RedirectUri @@ -135,7 +137,7 @@ namespace Microsoft.AspNetCore.Authentication } } - await Context.SignInAsync(SignInScheme, ticketContext.Principal, ticketContext.Properties); + await Context.SignInAsync(SignInScheme, ticketContext.Principal!, ticketContext.Properties); // Default redirect path is the base path if (string.IsNullOrEmpty(ticketContext.ReturnUri)) @@ -165,10 +167,9 @@ namespace Microsoft.AspNetCore.Authentication } // The SignInScheme may be shared with multiple providers, make sure this provider issued the identity. - string authenticatedScheme; var ticket = result.Ticket; if (ticket != null && ticket.Principal != null && ticket.Properties != null - && ticket.Properties.Items.TryGetValue(AuthSchemeKey, out authenticatedScheme) + && ticket.Properties.Items.TryGetValue(AuthSchemeKey, out var authenticatedScheme) && string.Equals(Scheme.Name, authenticatedScheme, StringComparison.Ordinal)) { return AuthenticateResult.Success(new AuthenticationTicket(ticket.Principal, @@ -211,9 +212,9 @@ namespace Microsoft.AspNetCore.Authentication throw new ArgumentNullException(nameof(properties)); } - if (!properties.Items.TryGetValue(CorrelationProperty, out string correlationId)) + if (!properties.Items.TryGetValue(CorrelationProperty, out var correlationId)) { - Logger.CorrelationPropertyNotFound(Options.CorrelationCookie.Name); + Logger.CorrelationPropertyNotFound(Options.CorrelationCookie.Name!); return false; } diff --git a/src/Security/Authentication/Core/src/RemoteAuthenticationOptions.cs b/src/Security/Authentication/Core/src/RemoteAuthenticationOptions.cs index 4dd39ca16e..933d6e000d 100644 --- a/src/Security/Authentication/Core/src/RemoteAuthenticationOptions.cs +++ b/src/Security/Authentication/Core/src/RemoteAuthenticationOptions.cs @@ -70,17 +70,17 @@ namespace Microsoft.AspNetCore.Authentication /// This cannot be set at the same time as BackchannelCertificateValidator unless the value /// can be downcast to a WebRequestHandler. /// - public HttpMessageHandler BackchannelHttpHandler { get; set; } + public HttpMessageHandler? BackchannelHttpHandler { get; set; } /// /// Used to communicate with the remote identity provider. /// - public HttpClient Backchannel { get; set; } + public HttpClient Backchannel { get; set; } = default!; /// /// Gets or sets the type used to secure data. /// - public IDataProtectionProvider DataProtectionProvider { get; set; } + public IDataProtectionProvider? DataProtectionProvider { get; set; } /// /// The request path within the application's base path where the user-agent will be returned. @@ -110,7 +110,7 @@ namespace Microsoft.AspNetCore.Authentication /// This value typically corresponds to a cookie middleware registered in the Startup class. /// When omitted, is used as a fallback value. /// - public string SignInScheme { get; set; } + public string? SignInScheme { get; set; } /// /// Gets or sets the time limit for completing the authentication flow (15 minutes by default). @@ -119,7 +119,7 @@ namespace Microsoft.AspNetCore.Authentication public new RemoteAuthenticationEvents Events { - get => (RemoteAuthenticationEvents)base.Events; + get => (RemoteAuthenticationEvents)base.Events!; set => base.Events = value; } diff --git a/src/Security/Authentication/Core/src/RequestPathBaseCookieBuilder.cs b/src/Security/Authentication/Core/src/RequestPathBaseCookieBuilder.cs index 2efc05c155..d4f81c85ca 100644 --- a/src/Security/Authentication/Core/src/RequestPathBaseCookieBuilder.cs +++ b/src/Security/Authentication/Core/src/RequestPathBaseCookieBuilder.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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; @@ -14,7 +14,7 @@ namespace Microsoft.AspNetCore.Authentication /// /// Gets an optional value that is appended to the request path base. /// - protected virtual string AdditionalPath { get; } + protected virtual string? AdditionalPath { get; } public override CookieOptions Build(HttpContext context, DateTimeOffset expiresFrom) { diff --git a/src/Security/Authentication/Core/src/SecureDataFormat.cs b/src/Security/Authentication/Core/src/SecureDataFormat.cs index f35025d8bb..e53a51e71a 100644 --- a/src/Security/Authentication/Core/src/SecureDataFormat.cs +++ b/src/Security/Authentication/Core/src/SecureDataFormat.cs @@ -1,6 +1,7 @@ // 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.Diagnostics.CodeAnalysis; using Microsoft.AspNetCore.DataProtection; namespace Microsoft.AspNetCore.Authentication @@ -21,7 +22,7 @@ namespace Microsoft.AspNetCore.Authentication return Protect(data, purpose: null); } - public string Protect(TData data, string purpose) + public string Protect(TData data, string? purpose) { var userData = _serializer.Serialize(data); @@ -35,12 +36,14 @@ namespace Microsoft.AspNetCore.Authentication return Base64UrlTextEncoder.Encode(protectedData); } + [return: MaybeNull] public TData Unprotect(string protectedText) { return Unprotect(protectedText, purpose: null); } - public TData Unprotect(string protectedText, string purpose) + [return: MaybeNull] + public TData Unprotect(string protectedText, string? purpose) { try { @@ -76,4 +79,4 @@ namespace Microsoft.AspNetCore.Authentication } } } -} \ No newline at end of file +} diff --git a/src/Security/Authentication/Core/src/SignInAuthenticationHandler.cs b/src/Security/Authentication/Core/src/SignInAuthenticationHandler.cs index dbd612dc10..064ea47ae0 100644 --- a/src/Security/Authentication/Core/src/SignInAuthenticationHandler.cs +++ b/src/Security/Authentication/Core/src/SignInAuthenticationHandler.cs @@ -19,7 +19,7 @@ namespace Microsoft.AspNetCore.Authentication public SignInAuthenticationHandler(IOptionsMonitor options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : base(options, logger, encoder, clock) { } - public virtual Task SignInAsync(ClaimsPrincipal user, AuthenticationProperties properties) + public virtual Task SignInAsync(ClaimsPrincipal user, AuthenticationProperties? properties) { var target = ResolveTarget(Options.ForwardSignIn); return (target != null) @@ -33,7 +33,7 @@ namespace Microsoft.AspNetCore.Authentication /// /// /// A Task. - protected abstract Task HandleSignInAsync(ClaimsPrincipal user, AuthenticationProperties properties); + protected abstract Task HandleSignInAsync(ClaimsPrincipal user, AuthenticationProperties? properties); } -} \ No newline at end of file +} diff --git a/src/Security/Authentication/Core/src/SignOutAuthenticationHandler.cs b/src/Security/Authentication/Core/src/SignOutAuthenticationHandler.cs index 015cb39e05..12b2027fc4 100644 --- a/src/Security/Authentication/Core/src/SignOutAuthenticationHandler.cs +++ b/src/Security/Authentication/Core/src/SignOutAuthenticationHandler.cs @@ -18,7 +18,7 @@ namespace Microsoft.AspNetCore.Authentication public SignOutAuthenticationHandler(IOptionsMonitor options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : base(options, logger, encoder, clock) { } - public virtual Task SignOutAsync(AuthenticationProperties properties) + public virtual Task SignOutAsync(AuthenticationProperties? properties) { var target = ResolveTarget(Options.ForwardSignOut); return (target != null) @@ -31,6 +31,6 @@ namespace Microsoft.AspNetCore.Authentication /// /// /// A Task. - protected abstract Task HandleSignOutAsync(AuthenticationProperties properties); + protected abstract Task HandleSignOutAsync(AuthenticationProperties? properties); } -} \ No newline at end of file +} diff --git a/src/Security/Authentication/Core/src/TicketSerializer.cs b/src/Security/Authentication/Core/src/TicketSerializer.cs index e33ec71725..0ef6664675 100644 --- a/src/Security/Authentication/Core/src/TicketSerializer.cs +++ b/src/Security/Authentication/Core/src/TicketSerializer.cs @@ -28,7 +28,7 @@ namespace Microsoft.AspNetCore.Authentication } } - public virtual AuthenticationTicket Deserialize(byte[] data) + public virtual AuthenticationTicket? Deserialize(byte[] data) { using (var memory = new MemoryStream(data)) { @@ -142,7 +142,7 @@ namespace Microsoft.AspNetCore.Authentication } } - public virtual AuthenticationTicket Read(BinaryReader reader) + public virtual AuthenticationTicket? Read(BinaryReader reader) { if (reader == null) { diff --git a/src/Security/Authentication/JwtBearer/samples/JwtBearerSample/Program.cs b/src/Security/Authentication/JwtBearer/samples/JwtBearerSample/Program.cs index 348d6c560c..a0dec58e23 100644 --- a/src/Security/Authentication/JwtBearer/samples/JwtBearerSample/Program.cs +++ b/src/Security/Authentication/JwtBearer/samples/JwtBearerSample/Program.cs @@ -1,4 +1,4 @@ -using Microsoft.AspNetCore; +using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; @@ -6,13 +6,17 @@ namespace JwtBearerSample { public static class Program { - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = WebHost.CreateDefaultBuilder(args) - .UseStartup() + var host = Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webHostBuilder => + { + webHostBuilder + .UseStartup(); + }) .Build(); - host.Run(); + return host.RunAsync(); } } } diff --git a/src/Security/Authentication/OpenIdConnect/samples/OpenIdConnect.AzureAdSample/Program.cs b/src/Security/Authentication/OpenIdConnect/samples/OpenIdConnect.AzureAdSample/Program.cs index 077f415dfb..1ec249d54e 100644 --- a/src/Security/Authentication/OpenIdConnect/samples/OpenIdConnect.AzureAdSample/Program.cs +++ b/src/Security/Authentication/OpenIdConnect/samples/OpenIdConnect.AzureAdSample/Program.cs @@ -1,17 +1,22 @@ -using Microsoft.AspNetCore; +using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; namespace OpenIdConnect.AzureAdSample { public static class Program { - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = WebHost.CreateDefaultBuilder(args) - .UseStartup() + var host = Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webHostBuilder => + { + webHostBuilder + .UseStartup(); + }) .Build(); - host.Run(); + return host.RunAsync(); } } } diff --git a/src/Security/Authentication/OpenIdConnect/samples/OpenIdConnectSample/Program.cs b/src/Security/Authentication/OpenIdConnect/samples/OpenIdConnectSample/Program.cs index aace6e77ea..34f1798fa3 100644 --- a/src/Security/Authentication/OpenIdConnect/samples/OpenIdConnectSample/Program.cs +++ b/src/Security/Authentication/OpenIdConnect/samples/OpenIdConnectSample/Program.cs @@ -1,18 +1,23 @@ -using Microsoft.AspNetCore; +using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; namespace OpenIdConnectSample { public static class Program { - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = WebHost.CreateDefaultBuilder(args) - .UseStartup() + var host = Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webHostBuilder => + { + webHostBuilder + .UseStartup(); + }) .Build(); - host.Run(); + return host.RunAsync(); } } } diff --git a/src/Security/Authentication/WsFederation/samples/WsFedSample/Program.cs b/src/Security/Authentication/WsFederation/samples/WsFedSample/Program.cs index 40e1945c69..b53b5ab65b 100644 --- a/src/Security/Authentication/WsFederation/samples/WsFedSample/Program.cs +++ b/src/Security/Authentication/WsFederation/samples/WsFedSample/Program.cs @@ -1,24 +1,36 @@ -using System; -using System.Collections.Generic; using System.IO; -using System.Linq; using System.Net; using System.Reflection; using System.Security.Cryptography.X509Certificates; using System.Threading.Tasks; -using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Configuration; using Microsoft.Extensions.FileProviders; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace WsFedSample { public class Program { - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = new WebHostBuilder() + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseKestrel(options => + { + options.Listen(IPAddress.Loopback, 44307, listenOptions => + { + // Configure SSL + var serverCertificate = LoadCertificate(); + listenOptions.UseHttps(serverCertificate); + }); + }) + .UseContentRoot(Directory.GetCurrentDirectory()) + .UseIISIntegration() + .UseStartup(); + }) .ConfigureLogging(factory => { factory.AddConsole(); @@ -26,21 +38,9 @@ namespace WsFedSample factory.AddFilter("Console", level => level >= LogLevel.Information); factory.AddFilter("Debug", level => level >= LogLevel.Information); }) - .UseKestrel(options => - { - options.Listen(IPAddress.Loopback, 44307, listenOptions => - { - // Configure SSL - var serverCertificate = LoadCertificate(); - listenOptions.UseHttps(serverCertificate); - }); - }) - .UseContentRoot(Directory.GetCurrentDirectory()) - .UseIISIntegration() - .UseStartup() .Build(); - host.Run(); + return host.RunAsync(); } private static X509Certificate2 LoadCertificate() diff --git a/src/Security/Authentication/test/OpenIdConnect/OpenIdConnectConfigurationTests.cs b/src/Security/Authentication/test/OpenIdConnect/OpenIdConnectConfigurationTests.cs index af15948874..b18fc70439 100644 --- a/src/Security/Authentication/test/OpenIdConnect/OpenIdConnectConfigurationTests.cs +++ b/src/Security/Authentication/test/OpenIdConnect/OpenIdConnectConfigurationTests.cs @@ -437,7 +437,22 @@ namespace Microsoft.AspNetCore.Authentication.Test.OpenIdConnect [Fact] public async Task MetadataAddressIsGeneratedFromAuthorityWhenMissing() { - var builder = new WebHostBuilder() + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .Configure(app => + { + app.UseAuthentication(); + app.Run(async context => + { + var resolver = context.RequestServices.GetRequiredService(); + var handler = await resolver.GetHandlerAsync(context, OpenIdConnectDefaults.AuthenticationScheme) as OpenIdConnectHandler; + Assert.Equal($"{TestServerBuilder.DefaultAuthority}/.well-known/openid-configuration", handler.Options.MetadataAddress); + }); + }) + .UseTestServer(); + }) .ConfigureServices(services => { services.AddAuthentication() @@ -449,17 +464,11 @@ namespace Microsoft.AspNetCore.Authentication.Test.OpenIdConnect o.SignInScheme = Guid.NewGuid().ToString(); }); }) - .Configure(app => - { - app.UseAuthentication(); - app.Run(async context => - { - var resolver = context.RequestServices.GetRequiredService(); - var handler = await resolver.GetHandlerAsync(context, OpenIdConnectDefaults.AuthenticationScheme) as OpenIdConnectHandler; - Assert.Equal($"{TestServerBuilder.DefaultAuthority}/.well-known/openid-configuration", handler.Options.MetadataAddress); - }); - }); - var server = new TestServer(builder); + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var transaction = await server.SendAsync(@"https://example.com"); Assert.Equal(HttpStatusCode.OK, transaction.Response.StatusCode); } diff --git a/src/Security/Authentication/test/PolicyTests.cs b/src/Security/Authentication/test/PolicyTests.cs index 77d764e14b..5049635b1a 100644 --- a/src/Security/Authentication/test/PolicyTests.cs +++ b/src/Security/Authentication/test/PolicyTests.cs @@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.TestHost; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Xunit; namespace Microsoft.AspNetCore.Authentication @@ -17,7 +18,7 @@ namespace Microsoft.AspNetCore.Authentication [Fact] public async Task CanDispatch() { - var server = CreateServer(services => + using var server = await CreateServer(services => { services.AddLogging().AddAuthentication(o => { @@ -333,7 +334,7 @@ namespace Microsoft.AspNetCore.Authentication [Fact] public async Task CanDynamicTargetBasedOnQueryString() { - var server = CreateServer(services => + using var server = await CreateServer(services => { services.AddAuthentication(o => { @@ -455,33 +456,44 @@ namespace Microsoft.AspNetCore.Authentication } } - private static TestServer CreateServer(Action configure = null, string defaultScheme = null) + private static async Task CreateServer(Action configure = null, string defaultScheme = null) { - var builder = new WebHostBuilder() - .Configure(app => + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - app.UseAuthentication(); - app.Use(async (context, next) => - { - var req = context.Request; - var res = context.Response; - if (req.Path.StartsWithSegments(new PathString("/auth"), out var remainder)) + webHostBuilder + .Configure(app => { - var name = (remainder.Value.Length > 0) ? remainder.Value.Substring(1) : null; - var result = await context.AuthenticateAsync(name); - await res.DescribeAsync(result?.Ticket?.Principal); - } - else - { - await next(); - } - }); + app.UseAuthentication(); + app.Use(async (context, next) => + { + var req = context.Request; + var res = context.Response; + if (req.Path.StartsWithSegments(new PathString("/auth"), out var remainder)) + { + var name = (remainder.Value.Length > 0) ? remainder.Value.Substring(1) : null; + var result = await context.AuthenticateAsync(name); + await res.DescribeAsync(result?.Ticket?.Principal); + } + else + { + await next(); + } + }); + }) + .UseTestServer(); }) .ConfigureServices(services => { configure?.Invoke(services); - }); - return new TestServer(builder); + }) + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); + + return server; } } } diff --git a/src/Security/CookiePolicy/samples/CookiePolicySample/Program.cs b/src/Security/CookiePolicy/samples/CookiePolicySample/Program.cs index 3fc09a3db2..14c40d95be 100644 --- a/src/Security/CookiePolicy/samples/CookiePolicySample/Program.cs +++ b/src/Security/CookiePolicy/samples/CookiePolicySample/Program.cs @@ -1,26 +1,32 @@ -using System.IO; +using System.IO; +using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace CookiePolicySample { public static class Program { - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = new WebHostBuilder() + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseKestrel() + .UseContentRoot(Directory.GetCurrentDirectory()) + .UseIISIntegration() + .UseStartup(); + }) .ConfigureLogging(factory => { factory.AddConsole(); factory.AddFilter("Microsoft", LogLevel.Trace); }) - .UseKestrel() - .UseContentRoot(Directory.GetCurrentDirectory()) - .UseIISIntegration() - .UseStartup() .Build(); - host.Run(); + return host.RunAsync(); } } } diff --git a/src/Security/CookiePolicy/test/CookieConsentTests.cs b/src/Security/CookiePolicy/test/CookieConsentTests.cs index cda7e7d93c..6980935d54 100644 --- a/src/Security/CookiePolicy/test/CookieConsentTests.cs +++ b/src/Security/CookiePolicy/test/CookieConsentTests.cs @@ -10,6 +10,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.TestHost; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Microsoft.Net.Http.Headers; using Xunit; @@ -641,20 +642,30 @@ namespace Microsoft.AspNetCore.CookiePolicy.Test Assert.NotNull(manualCookie.Expires); // Expires may not exactly match to the second. } - private Task RunTestAsync(Action configureOptions, Action configureRequest, RequestDelegate handleRequest) + private async Task RunTestAsync(Action configureOptions, Action configureRequest, RequestDelegate handleRequest) { - var builder = new WebHostBuilder() + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .Configure(app => + { + app.UseCookiePolicy(); + app.Run(handleRequest); + }) + .UseTestServer(); + }) .ConfigureServices(services => { services.Configure(configureOptions); }) - .Configure(app => - { - app.UseCookiePolicy(); - app.Run(handleRequest); - }); - var server = new TestServer(builder); - return server.SendAsync(configureRequest); + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); + + return await server.SendAsync(configureRequest); } } } diff --git a/src/Security/CookiePolicy/test/CookiePolicyTests.cs b/src/Security/CookiePolicy/test/CookiePolicyTests.cs index 783c29e4e0..6f5c940c7d 100644 --- a/src/Security/CookiePolicy/test/CookiePolicyTests.cs +++ b/src/Security/CookiePolicy/test/CookiePolicyTests.cs @@ -13,6 +13,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.TestHost; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Microsoft.Net.Http.Headers; using Xunit; @@ -244,23 +245,32 @@ namespace Microsoft.AspNetCore.CookiePolicy.Test [Fact] public async Task CookiePolicyCanHijackAppend() { - var builder = new WebHostBuilder() - .Configure(app => + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - app.UseCookiePolicy(new CookiePolicyOptions - { - OnAppendCookie = ctx => ctx.CookieName = ctx.CookieValue = "Hao" - }); - app.Run(context => - { - context.Response.Cookies.Append("A", "A"); - context.Response.Cookies.Append("B", "B", new CookieOptions { Secure = false }); - context.Response.Cookies.Append("C", "C", new CookieOptions() { SameSite = Http.SameSiteMode.Strict }); - context.Response.Cookies.Append("D", "D", new CookieOptions { Secure = true }); - return Task.FromResult(0); - }); - }); - var server = new TestServer(builder); + webHostBuilder + .Configure(app => + { + app.UseCookiePolicy(new CookiePolicyOptions + { + OnAppendCookie = ctx => ctx.CookieName = ctx.CookieValue = "Hao" + }); + app.Run(context => + { + context.Response.Cookies.Append("A", "A"); + context.Response.Cookies.Append("B", "B", new CookieOptions { Secure = false }); + context.Response.Cookies.Append("C", "C", new CookieOptions() { SameSite = Http.SameSiteMode.Strict }); + context.Response.Cookies.Append("D", "D", new CookieOptions { Secure = true }); + return Task.FromResult(0); + }); + }) + .UseTestServer(); + }) + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var transaction = await server.SendAsync("http://example.com/login"); @@ -274,23 +284,32 @@ namespace Microsoft.AspNetCore.CookiePolicy.Test [Fact] public async Task CookiePolicyCanHijackDelete() { - var builder = new WebHostBuilder() - .Configure(app => - { - app.UseCookiePolicy(new CookiePolicyOptions + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - OnDeleteCookie = ctx => ctx.CookieName = "A" - }); - app.Run(context => - { - context.Response.Cookies.Delete("A"); - context.Response.Cookies.Delete("B", new CookieOptions { Secure = false }); - context.Response.Cookies.Delete("C", new CookieOptions()); - context.Response.Cookies.Delete("D", new CookieOptions { Secure = true }); - return Task.FromResult(0); - }); - }); - var server = new TestServer(builder); + webHostBuilder + .Configure(app => + { + app.UseCookiePolicy(new CookiePolicyOptions + { + OnDeleteCookie = ctx => ctx.CookieName = "A" + }); + app.Run(context => + { + context.Response.Cookies.Delete("A"); + context.Response.Cookies.Delete("B", new CookieOptions { Secure = false }); + context.Response.Cookies.Delete("C", new CookieOptions()); + context.Response.Cookies.Delete("D", new CookieOptions { Secure = true }); + return Task.FromResult(0); + }); + }) + .UseTestServer(); + }) + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var transaction = await server.SendAsync("http://example.com/login"); @@ -302,28 +321,37 @@ namespace Microsoft.AspNetCore.CookiePolicy.Test [Fact] public async Task CookiePolicyCallsCookieFeature() { - var builder = new WebHostBuilder() - .Configure(app => - { - app.Use(next => context => + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - context.Features.Set(new TestCookieFeature()); - return next(context); - }); - app.UseCookiePolicy(new CookiePolicyOptions - { - OnDeleteCookie = ctx => ctx.CookieName = "A" - }); - app.Run(context => - { - Assert.Throws(() => context.Response.Cookies.Delete("A")); - Assert.Throws(() => context.Response.Cookies.Delete("A", new CookieOptions())); - Assert.Throws(() => context.Response.Cookies.Append("A", "A")); - Assert.Throws(() => context.Response.Cookies.Append("A", "A", new CookieOptions())); - return context.Response.WriteAsync("Done"); - }); - }); - var server = new TestServer(builder); + webHostBuilder + .Configure(app => + { + app.Use(next => context => + { + context.Features.Set(new TestCookieFeature()); + return next(context); + }); + app.UseCookiePolicy(new CookiePolicyOptions + { + OnDeleteCookie = ctx => ctx.CookieName = "A" + }); + app.Run(context => + { + Assert.Throws(() => context.Response.Cookies.Delete("A")); + Assert.Throws(() => context.Response.Cookies.Delete("A", new CookieOptions())); + Assert.Throws(() => context.Response.Cookies.Append("A", "A")); + Assert.Throws(() => context.Response.Cookies.Append("A", "A", new CookieOptions())); + return context.Response.WriteAsync("Done"); + }); + }) + .UseTestServer(); + }) + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var transaction = await server.SendAsync("http://example.com/login"); Assert.Equal("Done", transaction.ResponseText); @@ -332,7 +360,26 @@ namespace Microsoft.AspNetCore.CookiePolicy.Test [Fact] public async Task CookiePolicyAppliesToCookieAuth() { - var builder = new WebHostBuilder() + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .Configure(app => + { + app.UseCookiePolicy(new CookiePolicyOptions + { + HttpOnly = HttpOnlyPolicy.Always, + Secure = CookieSecurePolicy.Always, + }); + app.UseAuthentication(); + app.Run(context => + { + return context.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, + new ClaimsPrincipal(new ClaimsIdentity(new GenericIdentity("TestUser", "Cookies")))); + }); + }) + .UseTestServer(); + }) .ConfigureServices(services => { services.AddAuthentication().AddCookie(o => @@ -342,21 +389,11 @@ namespace Microsoft.AspNetCore.CookiePolicy.Test o.Cookie.SecurePolicy = CookieSecurePolicy.None; }); }) - .Configure(app => - { - app.UseCookiePolicy(new CookiePolicyOptions - { - HttpOnly = HttpOnlyPolicy.Always, - Secure = CookieSecurePolicy.Always, - }); - app.UseAuthentication(); - app.Run(context => - { - return context.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, - new ClaimsPrincipal(new ClaimsIdentity(new GenericIdentity("TestUser", "Cookies")))); - }); - }); - var server = new TestServer(builder); + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var transaction = await server.SendAsync("http://example.com/login"); @@ -372,7 +409,26 @@ namespace Microsoft.AspNetCore.CookiePolicy.Test [Fact] public async Task CookiePolicyAppliesToCookieAuthChunks() { - var builder = new WebHostBuilder() + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .Configure(app => + { + app.UseCookiePolicy(new CookiePolicyOptions + { + HttpOnly = HttpOnlyPolicy.Always, + Secure = CookieSecurePolicy.Always, + }); + app.UseAuthentication(); + app.Run(context => + { + return context.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, + new ClaimsPrincipal(new ClaimsIdentity(new GenericIdentity(new string('c', 1024 * 5), "Cookies")))); + }); + }) + .UseTestServer(); + }) .ConfigureServices(services => { services.AddAuthentication().AddCookie(o => @@ -382,21 +438,11 @@ namespace Microsoft.AspNetCore.CookiePolicy.Test o.Cookie.SecurePolicy = CookieSecurePolicy.None; }); }) - .Configure(app => - { - app.UseCookiePolicy(new CookiePolicyOptions - { - HttpOnly = HttpOnlyPolicy.Always, - Secure = CookieSecurePolicy.Always, - }); - app.UseAuthentication(); - app.Run(context => - { - return context.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, - new ClaimsPrincipal(new ClaimsIdentity(new GenericIdentity(new string('c', 1024 * 5), "Cookies")))); - }); - }); - var server = new TestServer(builder); + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var transaction = await server.SendAsync("http://example.com/login"); @@ -475,16 +521,26 @@ namespace Microsoft.AspNetCore.CookiePolicy.Test RequestDelegate configureSetup, params RequestTest[] tests) { - var builder = new WebHostBuilder() - .Configure(app => + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - app.Map(path, map => - { - map.UseCookiePolicy(cookiePolicy); - map.Run(configureSetup); - }); - }); - var server = new TestServer(builder); + webHostBuilder + .Configure(app => + { + app.Map(path, map => + { + map.UseCookiePolicy(cookiePolicy); + map.Run(configureSetup); + }); + }) + .UseTestServer(); + }) + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); + foreach (var test in tests) { await test.Execute(server); diff --git a/src/Security/build.cmd b/src/Security/build.cmd new file mode 100644 index 0000000000..2406296662 --- /dev/null +++ b/src/Security/build.cmd @@ -0,0 +1,3 @@ +@ECHO OFF +SET RepoRoot=%~dp0..\.. +%RepoRoot%\build.cmd -projects %~dp0**\*.*proj %* diff --git a/src/Servers/Connections.Abstractions/src/ConnectionBuilderExtensions.cs b/src/Servers/Connections.Abstractions/src/ConnectionBuilderExtensions.cs index 55b0311eb9..937f36b574 100644 --- a/src/Servers/Connections.Abstractions/src/ConnectionBuilderExtensions.cs +++ b/src/Servers/Connections.Abstractions/src/ConnectionBuilderExtensions.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Diagnostics.CodeAnalysis; using System.Threading.Tasks; using Microsoft.Extensions.Internal; @@ -9,7 +10,7 @@ namespace Microsoft.AspNetCore.Connections { public static class ConnectionBuilderExtensions { - public static IConnectionBuilder UseConnectionHandler(this IConnectionBuilder connectionBuilder) where TConnectionHandler : ConnectionHandler + public static IConnectionBuilder UseConnectionHandler<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)]TConnectionHandler>(this IConnectionBuilder connectionBuilder) where TConnectionHandler : ConnectionHandler { var handler = ActivatorUtilities.GetServiceOrCreateInstance(connectionBuilder.ApplicationServices); diff --git a/src/Servers/Connections.Abstractions/src/Microsoft.AspNetCore.Connections.Abstractions.csproj b/src/Servers/Connections.Abstractions/src/Microsoft.AspNetCore.Connections.Abstractions.csproj index fcea395964..e83b0142a0 100644 --- a/src/Servers/Connections.Abstractions/src/Microsoft.AspNetCore.Connections.Abstractions.csproj +++ b/src/Servers/Connections.Abstractions/src/Microsoft.AspNetCore.Connections.Abstractions.csproj @@ -17,6 +17,7 @@ + diff --git a/src/Servers/HttpSys/samples/HotAddSample/Startup.cs b/src/Servers/HttpSys/samples/HotAddSample/Startup.cs index 58975d6aa6..a0efd408f1 100644 --- a/src/Servers/HttpSys/samples/HotAddSample/Startup.cs +++ b/src/Servers/HttpSys/samples/HotAddSample/Startup.cs @@ -1,9 +1,11 @@ using System; +using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Server.HttpSys; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace HotAddSample @@ -96,15 +98,19 @@ namespace HotAddSample }); } - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = new WebHostBuilder() + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseStartup() + .UseHttpSys(); + }) .ConfigureLogging(factory => factory.AddConsole()) - .UseStartup() - .UseHttpSys() .Build(); - host.Run(); + return host.RunAsync(); } } } diff --git a/src/Servers/HttpSys/src/NativeInterop/SafeLibraryHandle.cs b/src/Servers/HttpSys/src/NativeInterop/SafeLibraryHandle.cs index bf3254c6d6..0e16996fcf 100644 --- a/src/Servers/HttpSys/src/NativeInterop/SafeLibraryHandle.cs +++ b/src/Servers/HttpSys/src/NativeInterop/SafeLibraryHandle.cs @@ -76,7 +76,6 @@ namespace Microsoft.AspNetCore.Server.HttpSys { // http://msdn.microsoft.com/en-us/library/ms683152(v=vs.85).aspx [return: MarshalAs(UnmanagedType.Bool)] - [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] [DllImport("kernel32.dll", CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Unicode)] internal static extern bool FreeLibrary(IntPtr hModule); diff --git a/src/Servers/HttpSys/src/RequestProcessing/RequestContext.cs b/src/Servers/HttpSys/src/RequestProcessing/RequestContext.cs index de0cefb72d..997339ac14 100644 --- a/src/Servers/HttpSys/src/RequestProcessing/RequestContext.cs +++ b/src/Servers/HttpSys/src/RequestProcessing/RequestContext.cs @@ -289,7 +289,15 @@ namespace Microsoft.AspNetCore.Server.HttpSys Response.Trailers.IsReadOnly = false; Response.Headers.Clear(); Response.Trailers.Clear(); - SetFatalResponse(500); + + if (ex is BadHttpRequestException badHttpRequestException) + { + SetFatalResponse(badHttpRequestException.StatusCode); + } + else + { + SetFatalResponse(StatusCodes.Status500InternalServerError); + } } } finally diff --git a/src/Servers/HttpSys/src/RequestProcessing/RequestStream.cs b/src/Servers/HttpSys/src/RequestProcessing/RequestStream.cs index 758a060b94..c5e00a9239 100644 --- a/src/Servers/HttpSys/src/RequestProcessing/RequestStream.cs +++ b/src/Servers/HttpSys/src/RequestProcessing/RequestStream.cs @@ -7,6 +7,7 @@ using System.IO; using System.Runtime.InteropServices; using System.Threading; using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.HttpSys.Internal; using Microsoft.Extensions.Logging; @@ -432,8 +433,9 @@ namespace Microsoft.AspNetCore.Server.HttpSys var contentLength = RequestContext.Request.ContentLength; if (contentLength.HasValue && _maxSize.HasValue && contentLength.Value > _maxSize.Value) { - throw new IOException( - $"The request's Content-Length {contentLength.Value} is larger than the request body size limit {_maxSize.Value}."); + throw new BadHttpRequestException( + $"The request's Content-Length {contentLength.Value} is larger than the request body size limit {_maxSize.Value}.", + StatusCodes.Status413PayloadTooLarge); } HasStarted = true; @@ -450,7 +452,9 @@ namespace Microsoft.AspNetCore.Server.HttpSys _totalRead += bytesRead; if (_maxSize.HasValue && _totalRead > _maxSize.Value) { - exception = new IOException($"The total number of bytes read {_totalRead} has exceeded the request body size limit {_maxSize.Value}."); + exception = new BadHttpRequestException( + $"The total number of bytes read {_totalRead} has exceeded the request body size limit {_maxSize.Value}.", + StatusCodes.Status413PayloadTooLarge); return true; } exception = null; diff --git a/src/Servers/HttpSys/test/FunctionalTests/RequestBodyLimitTests.cs b/src/Servers/HttpSys/test/FunctionalTests/RequestBodyLimitTests.cs index fa4ae52632..4f825d8ae6 100644 --- a/src/Servers/HttpSys/test/FunctionalTests/RequestBodyLimitTests.cs +++ b/src/Servers/HttpSys/test/FunctionalTests/RequestBodyLimitTests.cs @@ -7,6 +7,7 @@ using System.Net; using System.Net.Http; using System.Threading; using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Testing; using Xunit; @@ -159,10 +160,12 @@ namespace Microsoft.AspNetCore.Server.HttpSys Assert.False(feature.IsReadOnly); Assert.Equal(11, httpContext.Request.ContentLength); byte[] input = new byte[100]; - var ex = Assert.Throws(() => httpContext.Request.Body.Read(input, 0, input.Length)); + var ex = Assert.Throws(() => httpContext.Request.Body.Read(input, 0, input.Length)); Assert.Equal("The request's Content-Length 11 is larger than the request body size limit 10.", ex.Message); - ex = Assert.Throws(() => httpContext.Request.Body.Read(input, 0, input.Length)); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); + ex = Assert.Throws(() => httpContext.Request.Body.Read(input, 0, input.Length)); Assert.Equal("The request's Content-Length 11 is larger than the request body size limit 10.", ex.Message); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); return Task.FromResult(0); }, options => options.MaxRequestBodySize = 10)) { @@ -182,10 +185,12 @@ namespace Microsoft.AspNetCore.Server.HttpSys Assert.False(feature.IsReadOnly); Assert.Equal(11, httpContext.Request.ContentLength); byte[] input = new byte[100]; - var ex = Assert.Throws(() => { var t = httpContext.Request.Body.ReadAsync(input, 0, input.Length); }); + var ex = Assert.Throws(() => { var t = httpContext.Request.Body.ReadAsync(input, 0, input.Length); }); Assert.Equal("The request's Content-Length 11 is larger than the request body size limit 10.", ex.Message); - ex = Assert.Throws(() => { var t = httpContext.Request.Body.ReadAsync(input, 0, input.Length); }); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); + ex = Assert.Throws(() => { var t = httpContext.Request.Body.ReadAsync(input, 0, input.Length); }); Assert.Equal("The request's Content-Length 11 is larger than the request body size limit 10.", ex.Message); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); return Task.FromResult(0); }, options => options.MaxRequestBodySize = 10)) { @@ -205,10 +210,12 @@ namespace Microsoft.AspNetCore.Server.HttpSys Assert.False(feature.IsReadOnly); Assert.Equal(11, httpContext.Request.ContentLength); byte[] input = new byte[100]; - var ex = Assert.Throws(() => httpContext.Request.Body.BeginRead(input, 0, input.Length, null, null)); + var ex = Assert.Throws(() => httpContext.Request.Body.BeginRead(input, 0, input.Length, null, null)); Assert.Equal("The request's Content-Length 11 is larger than the request body size limit 10.", ex.Message); - ex = Assert.Throws(() => httpContext.Request.Body.BeginRead(input, 0, input.Length, null, null)); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); + ex = Assert.Throws(() => httpContext.Request.Body.BeginRead(input, 0, input.Length, null, null)); Assert.Equal("The request's Content-Length 11 is larger than the request body size limit 10.", ex.Message); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); return Task.FromResult(0); }, options => options.MaxRequestBodySize = 10)) { @@ -229,10 +236,12 @@ namespace Microsoft.AspNetCore.Server.HttpSys Assert.False(feature.IsReadOnly); Assert.Null(httpContext.Request.ContentLength); byte[] input = new byte[100]; - var ex = Assert.Throws(() => httpContext.Request.Body.Read(input, 0, input.Length)); + var ex = Assert.Throws(() => httpContext.Request.Body.Read(input, 0, input.Length)); Assert.Equal("The total number of bytes read 11 has exceeded the request body size limit 10.", ex.Message); - ex = Assert.Throws(() => httpContext.Request.Body.Read(input, 0, input.Length)); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); + ex = Assert.Throws(() => httpContext.Request.Body.Read(input, 0, input.Length)); Assert.Equal("The total number of bytes read 11 has exceeded the request body size limit 10.", ex.Message); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); return Task.FromResult(0); }, options => options.MaxRequestBodySize = 10)) { @@ -252,9 +261,11 @@ namespace Microsoft.AspNetCore.Server.HttpSys Assert.False(feature.IsReadOnly); Assert.Null(httpContext.Request.ContentLength); byte[] input = new byte[100]; - var ex = await Assert.ThrowsAsync(() => httpContext.Request.Body.ReadAsync(input, 0, input.Length)); + var ex = await Assert.ThrowsAsync(() => httpContext.Request.Body.ReadAsync(input, 0, input.Length)); Assert.Equal("The total number of bytes read 11 has exceeded the request body size limit 10.", ex.Message); - ex = await Assert.ThrowsAsync(() => httpContext.Request.Body.ReadAsync(input, 0, input.Length)); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); + ex = await Assert.ThrowsAsync(() => httpContext.Request.Body.ReadAsync(input, 0, input.Length)); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); Assert.Equal("The total number of bytes read 11 has exceeded the request body size limit 10.", ex.Message); }, options => options.MaxRequestBodySize = 10)) { @@ -275,10 +286,12 @@ namespace Microsoft.AspNetCore.Server.HttpSys Assert.Null(httpContext.Request.ContentLength); byte[] input = new byte[100]; var body = httpContext.Request.Body; - var ex = Assert.Throws(() => body.EndRead(body.BeginRead(input, 0, input.Length, null, null))); + var ex = Assert.Throws(() => body.EndRead(body.BeginRead(input, 0, input.Length, null, null))); Assert.Equal("The total number of bytes read 11 has exceeded the request body size limit 10.", ex.Message); - ex = Assert.Throws(() => body.EndRead(body.BeginRead(input, 0, input.Length, null, null))); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); + ex = Assert.Throws(() => body.EndRead(body.BeginRead(input, 0, input.Length, null, null))); Assert.Equal("The total number of bytes read 11 has exceeded the request body size limit 10.", ex.Message); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); return Task.FromResult(0); }, options => options.MaxRequestBodySize = 10)) { @@ -303,8 +316,9 @@ namespace Microsoft.AspNetCore.Server.HttpSys int read = httpContext.Request.Body.Read(input, 0, input.Length); Assert.Equal(10, read); content.Block.Release(); - var ex = Assert.Throws(() => httpContext.Request.Body.Read(input, 0, input.Length)); + var ex = Assert.Throws(() => httpContext.Request.Body.Read(input, 0, input.Length)); Assert.Equal("The total number of bytes read 20 has exceeded the request body size limit 10.", ex.Message); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); return Task.FromResult(0); }, options => options.MaxRequestBodySize = 10)) { @@ -328,8 +342,9 @@ namespace Microsoft.AspNetCore.Server.HttpSys int read = await httpContext.Request.Body.ReadAsync(input, 0, input.Length); Assert.Equal(10, read); content.Block.Release(); - var ex = await Assert.ThrowsAsync(() => httpContext.Request.Body.ReadAsync(input, 0, input.Length)); + var ex = await Assert.ThrowsAsync(() => httpContext.Request.Body.ReadAsync(input, 0, input.Length)); Assert.Equal("The total number of bytes read 20 has exceeded the request body size limit 10.", ex.Message); + Assert.Equal(StatusCodes.Status413PayloadTooLarge, ex.StatusCode); }, options => options.MaxRequestBodySize = 10)) { string response = await SendRequestAsync(address, content, chunked: true); diff --git a/src/Servers/HttpSys/test/FunctionalTests/ServerTests.cs b/src/Servers/HttpSys/test/FunctionalTests/ServerTests.cs index fbea889de4..5fc71a2047 100644 --- a/src/Servers/HttpSys/test/FunctionalTests/ServerTests.cs +++ b/src/Servers/HttpSys/test/FunctionalTests/ServerTests.cs @@ -204,11 +204,33 @@ namespace Microsoft.AspNetCore.Server.HttpSys })) { Task requestTask = SendRequestAsync(address); - await Assert.ThrowsAsync(async () => await requestTask); + var ex = await Assert.ThrowsAsync(async () => await requestTask); + Assert.Equal(StatusCodes.Status500InternalServerError, (int)ex.StatusCode); // Do it again to make sure the server didn't crash requestTask = SendRequestAsync(address); - await Assert.ThrowsAsync(async () => await requestTask); + ex = await Assert.ThrowsAsync(async () => await requestTask); + Assert.Equal(StatusCodes.Status500InternalServerError, (int)ex.StatusCode); + } + } + + [ConditionalFact] + public async Task Server_BadHttpRequestException_SetStatusCode() + { + string address; + using (Utilities.CreateHttpServer(out address, httpContext => + { + throw new BadHttpRequestException("Something happened", StatusCodes.Status418ImATeapot); + })) + { + Task requestTask = SendRequestAsync(address); + var ex = await Assert.ThrowsAsync(async () => await requestTask); + Assert.Equal(StatusCodes.Status418ImATeapot, (int)ex.StatusCode); + + // Do it again to make sure the server didn't crash + requestTask = SendRequestAsync(address); + ex = await Assert.ThrowsAsync(async () => await requestTask); + Assert.Equal(StatusCodes.Status418ImATeapot, (int)ex.StatusCode); } } diff --git a/src/Servers/HttpSys/test/FunctionalTests/Utilities.cs b/src/Servers/HttpSys/test/FunctionalTests/Utilities.cs index a347ce427f..4aa56ccabf 100644 --- a/src/Servers/HttpSys/test/FunctionalTests/Utilities.cs +++ b/src/Servers/HttpSys/test/FunctionalTests/Utilities.cs @@ -13,6 +13,7 @@ using Microsoft.AspNetCore.Hosting.Server.Features; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; @@ -66,7 +67,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys }, app); } - internal static IWebHost CreateDynamicHost(AuthenticationSchemes authType, bool allowAnonymous, out string root, RequestDelegate app) + internal static IHost CreateDynamicHost(AuthenticationSchemes authType, bool allowAnonymous, out string root, RequestDelegate app) { return CreateDynamicHost(string.Empty, out root, out var baseAddress, options => { @@ -75,22 +76,26 @@ namespace Microsoft.AspNetCore.Server.HttpSys }, app); } - internal static IWebHost CreateDynamicHost(out string baseAddress, Action configureOptions, RequestDelegate app) + internal static IHost CreateDynamicHost(out string baseAddress, Action configureOptions, RequestDelegate app) { return CreateDynamicHost(string.Empty, out var root, out baseAddress, configureOptions, app); } - internal static IWebHost CreateDynamicHost(string basePath, out string root, out string baseAddress, Action configureOptions, RequestDelegate app) + internal static IHost CreateDynamicHost(string basePath, out string root, out string baseAddress, Action configureOptions, RequestDelegate app) { var prefix = UrlPrefix.Create("http", "localhost", "0", basePath); - var builder = new WebHostBuilder() - .UseHttpSys(options => + var builder = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - options.UrlPrefixes.Add(prefix); - configureOptions(options); - }) - .Configure(appBuilder => appBuilder.Run(app)); + webHostBuilder + .UseHttpSys(options => + { + options.UrlPrefixes.Add(prefix); + configureOptions(options); + }) + .Configure(appBuilder => appBuilder.Run(app)); + }); var host = builder.Build(); diff --git a/src/Servers/IIS/IIS/samples/NativeIISSample/Startup.cs b/src/Servers/IIS/IIS/samples/NativeIISSample/Startup.cs index 96c77e15cb..2535f3a247 100644 --- a/src/Servers/IIS/IIS/samples/NativeIISSample/Startup.cs +++ b/src/Servers/IIS/IIS/samples/NativeIISSample/Startup.cs @@ -3,6 +3,7 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; @@ -12,6 +13,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Server.IIS; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; namespace NativeIISSample { @@ -115,16 +117,20 @@ namespace NativeIISSample "WEBSOCKET_VERSION" }; - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = new WebHostBuilder() - .UseKestrel() - .UseIIS() - .UseIISIntegration() - .UseStartup() + var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseKestrel() + .UseIIS() + .UseIISIntegration() + .UseStartup(); + }) .Build(); - host.Run(); + return host.RunAsync(); } } } diff --git a/src/Servers/IIS/IIS/src/Core/WrappingStream.cs b/src/Servers/IIS/IIS/src/Core/WrappingStream.cs index e765550b8f..d9d3b9bc37 100644 --- a/src/Servers/IIS/IIS/src/Core/WrappingStream.cs +++ b/src/Servers/IIS/IIS/src/Core/WrappingStream.cs @@ -107,6 +107,7 @@ namespace Microsoft.AspNetCore.Server.IIS.Core public override void EndWrite(IAsyncResult asyncResult) => _inner.EndWrite(asyncResult); + [Obsolete("This Remoting API is not supported and throws PlatformNotSupportedException.", DiagnosticId = "SYSLIB0010", UrlFormat = "https://aka.ms/dotnet-warnings/{0}")] public override object InitializeLifetimeService() => _inner.InitializeLifetimeService(); diff --git a/src/Servers/IIS/IIS/test/IIS.Tests/Utilities/TestServer.cs b/src/Servers/IIS/IIS/test/IIS.Tests/Utilities/TestServer.cs index 64415084d1..5943a18382 100644 --- a/src/Servers/IIS/IIS/test/IIS.Tests/Utilities/TestServer.cs +++ b/src/Servers/IIS/IIS/test/IIS.Tests/Utilities/TestServer.cs @@ -23,7 +23,7 @@ using Microsoft.Extensions.Logging; namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests { - public class TestServer: IDisposable, IStartup + public class TestServer : IDisposable { private const string InProcessHandlerDll = "aspnetcorev2_inprocess.dll"; private const string AspNetCoreModuleDll = "aspnetcorev2.dll"; @@ -51,7 +51,7 @@ namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests public TestConnection CreateConnection() => new TestConnection(_currentPort); private static IISServerOptions _options; - private IWebHost _host; + private IHost _host; private string _appHostConfigPath; private int _currentPort; @@ -131,16 +131,24 @@ namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests private int Main(IntPtr argc, IntPtr argv) { - var builder = new WebHostBuilder() - .UseIIS() - .ConfigureServices(services => + _host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - services.Configure(options => options.MaxRequestBodySize = _options.MaxRequestBodySize); - services.AddSingleton(this); - services.AddSingleton(_loggerFactory); + webHostBuilder + .UseIIS() + .UseSetting(WebHostDefaults.ApplicationKey, typeof(TestServer).GetTypeInfo().Assembly.FullName) + .Configure(app => + { + app.Map("/start", builder => builder.Run(context => context.Response.WriteAsync("Done"))); + _appBuilder(app); + }) + .ConfigureServices(services => + { + services.Configure(options => options.MaxRequestBodySize = _options.MaxRequestBodySize); + services.AddSingleton(_loggerFactory); + }); }) - .UseSetting(WebHostDefaults.ApplicationKey, typeof(TestServer).GetTypeInfo().Assembly.FullName); - _host = builder.Build(); + .Build(); var doneEvent = new ManualResetEventSlim(); var lifetime = _host.Services.GetService(); @@ -167,17 +175,6 @@ namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests WebCoreLock.Release(); } - public IServiceProvider ConfigureServices(IServiceCollection services) - { - return services.BuildServiceProvider(); - } - - public void Configure(IApplicationBuilder app) - { - app.Map("/start", builder => builder.Run(context => context.Response.WriteAsync("Done"))); - _appBuilder(app); - } - private delegate int hostfxr_main_fn(IntPtr argc, IntPtr argv); [DllImport(HWebCoreDll)] @@ -195,7 +192,7 @@ namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests [DllImport(InProcessHandlerDll)] private static extern int set_main_handler(hostfxr_main_fn main); - [DllImport("kernel32", SetLastError=true, CharSet = CharSet.Ansi)] + [DllImport("kernel32", SetLastError = true, CharSet = CharSet.Ansi)] private static extern IntPtr LoadLibrary([MarshalAs(UnmanagedType.LPStr)] string lpFileName); private void Retry(Action func, int attempts) diff --git a/src/Servers/IIS/IIS/test/IISExpress.FunctionalTests/IISExpress.FunctionalTests.csproj b/src/Servers/IIS/IIS/test/IISExpress.FunctionalTests/IISExpress.FunctionalTests.csproj index f5a90fc3f3..28d78f1f47 100644 --- a/src/Servers/IIS/IIS/test/IISExpress.FunctionalTests/IISExpress.FunctionalTests.csproj +++ b/src/Servers/IIS/IIS/test/IISExpress.FunctionalTests/IISExpress.FunctionalTests.csproj @@ -11,7 +11,7 @@ - + diff --git a/src/Servers/IIS/IISIntegration/samples/IISSample/Startup.cs b/src/Servers/IIS/IISIntegration/samples/IISSample/Startup.cs index f99b6ad729..401e4748ed 100644 --- a/src/Servers/IIS/IISIntegration/samples/IISSample/Startup.cs +++ b/src/Servers/IIS/IISIntegration/samples/IISSample/Startup.cs @@ -3,6 +3,7 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; @@ -10,6 +11,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Server.IISIntegration; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace IISSample @@ -88,19 +90,23 @@ namespace IISSample }); } - public static void Main(string[] args) + public static Task Main(string[] args) { - var host = new WebHostBuilder() + var host = new HostBuilder() + .ConfigureWebHost(webHostBuidler => + { + webHostBuidler + .UseKestrel() + .UseStartup(); + }) .ConfigureLogging((_, factory) => { factory.AddConsole(); factory.AddFilter("Console", level => level >= LogLevel.Debug); }) - .UseKestrel() - .UseStartup() .Build(); - host.Run(); + return host.RunAsync(); } } } diff --git a/src/Servers/IIS/IISIntegration/test/Tests/IISExtensionTests.cs b/src/Servers/IIS/IISIntegration/test/Tests/IISExtensionTests.cs index 772fbde2c3..27e6404c3d 100644 --- a/src/Servers/IIS/IISIntegration/test/Tests/IISExtensionTests.cs +++ b/src/Servers/IIS/IISIntegration/test/Tests/IISExtensionTests.cs @@ -2,9 +2,11 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Linq; +using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.TestHost; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Xunit; namespace Microsoft.AspNetCore.Server.IISIntegration @@ -12,19 +14,27 @@ namespace Microsoft.AspNetCore.Server.IISIntegration public class IISExtensionTests { [Fact] - public void CallingUseIISIntegrationMultipleTimesWorks() + public async Task CallingUseIISIntegrationMultipleTimesWorks() { + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .UseIISIntegration() + .Configure(app => { }) + .UseTestServer(); + }) + .Build(); - var builder = new WebHostBuilder() - .UseSetting("TOKEN", "TestToken") - .UseSetting("PORT", "12345") - .UseSetting("APPL_PATH", "/") - .UseIISIntegration() - .UseIISIntegration() - .Configure(app => { }); - var server = new TestServer(builder); + var server = host.GetTestServer(); - var filters = server.Host.Services.GetServices() + await host.StartAsync(); + + var filters = server.Services.GetServices() .OfType(); Assert.Single(filters); diff --git a/src/Servers/IIS/IISIntegration/test/Tests/IISMiddlewareTests.cs b/src/Servers/IIS/IISIntegration/test/Tests/IISMiddlewareTests.cs index 890ce500e9..124b9b6c76 100644 --- a/src/Servers/IIS/IISIntegration/test/Tests/IISMiddlewareTests.cs +++ b/src/Servers/IIS/IISIntegration/test/Tests/IISMiddlewareTests.cs @@ -4,7 +4,6 @@ using System; using System.Net; using System.Net.Http; -using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Builder; @@ -12,6 +11,7 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http.Features.Authentication; using Microsoft.AspNetCore.TestHost; using Microsoft.AspNetCore.Testing; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Xunit; @@ -25,21 +25,30 @@ namespace Microsoft.AspNetCore.Server.IISIntegration { var assertsExecuted = false; - var builder = new WebHostBuilder() - .UseSetting("PORT", "12345") - .UseSetting("APPL_PATH", "/") - .UseIISIntegration() - .Configure(app => + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - app.Run(context => - { - var auth = context.Features.Get(); - Assert.Null(auth); - assertsExecuted = true; - return Task.FromResult(0); - }); - }); - var server = new TestServer(builder); + webHostBuilder + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .Configure(app => + { + app.Run(context => + { + var auth = context.Features.Get(); + Assert.Null(auth); + assertsExecuted = true; + return Task.FromResult(0); + }); + }) + .UseTestServer(); + }) + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var req = new HttpRequestMessage(HttpMethod.Get, ""); req.Headers.TryAddWithoutValidation("MS-ASPNETCORE-TOKEN", "TestToken"); @@ -53,22 +62,31 @@ namespace Microsoft.AspNetCore.Server.IISIntegration { var assertsExecuted = false; - var builder = new WebHostBuilder() - .UseSetting("TOKEN", "TestToken") - .UseSetting("PORT", "12345") - .UseSetting("APPL_PATH", "/") - .UseIISIntegration() - .Configure(app => + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - app.Run(context => - { - var auth = context.Features.Get(); - Assert.Null(auth); - assertsExecuted = true; - return Task.FromResult(0); - }); - }); - var server = new TestServer(builder); + webHostBuilder + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .Configure(app => + { + app.Run(context => + { + var auth = context.Features.Get(); + Assert.Null(auth); + assertsExecuted = true; + return Task.FromResult(0); + }); + }) + .UseTestServer(); + }) + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var req = new HttpRequestMessage(HttpMethod.Get, ""); var response = await server.CreateClient().SendAsync(req); @@ -85,23 +103,32 @@ namespace Microsoft.AspNetCore.Server.IISIntegration { var requestExecuted = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); var applicationStoppingFired = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - var builder = new WebHostBuilder() - .UseSetting("TOKEN", "TestToken") - .UseSetting("PORT", "12345") - .UseSetting("APPL_PATH", pathBase) - .UseIISIntegration() - .Configure(app => + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - var appLifetime = app.ApplicationServices.GetRequiredService(); - appLifetime.ApplicationStopping.Register(() => applicationStoppingFired.SetResult(0)); + webHostBuilder + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", pathBase) + .UseIISIntegration() + .Configure(app => + { + var appLifetime = app.ApplicationServices.GetRequiredService(); + appLifetime.ApplicationStopping.Register(() => applicationStoppingFired.SetResult(0)); - app.Run(context => - { - requestExecuted.SetResult(0); - return Task.FromResult(0); - }); - }); - var server = new TestServer(builder); + app.Run(context => + { + requestExecuted.SetResult(0); + return Task.FromResult(0); + }); + }) + .UseTestServer(); + }) + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var request = new HttpRequestMessage(HttpMethod.Post, requestPath); request.Headers.TryAddWithoutValidation("MS-ASPNETCORE-TOKEN", "TestToken"); @@ -135,23 +162,32 @@ namespace Microsoft.AspNetCore.Server.IISIntegration { var requestExecuted = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); var applicationStoppingFired = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - var builder = new WebHostBuilder() - .UseSetting("TOKEN", "TestToken") - .UseSetting("PORT", "12345") - .UseSetting("APPL_PATH", "/") - .UseIISIntegration() - .Configure(app => + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - var appLifetime = app.ApplicationServices.GetRequiredService(); - appLifetime.ApplicationStopping.Register(() => applicationStoppingFired.SetResult(0)); + webHostBuilder + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .Configure(app => + { + var appLifetime = app.ApplicationServices.GetRequiredService(); + appLifetime.ApplicationStopping.Register(() => applicationStoppingFired.SetResult(0)); - app.Run(context => - { - requestExecuted.SetResult(0); - return Task.FromResult(0); - }); - }); - var server = new TestServer(builder); + app.Run(context => + { + requestExecuted.SetResult(0); + return Task.FromResult(0); + }); + }) + .UseTestServer(); + }) + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var request = new HttpRequestMessage(method, "/iisintegration"); request.Headers.TryAddWithoutValidation("MS-ASPNETCORE-TOKEN", "TestToken"); @@ -171,23 +207,32 @@ namespace Microsoft.AspNetCore.Server.IISIntegration { var requestExecuted = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); var applicationStoppingFired = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - var builder = new WebHostBuilder() - .UseSetting("TOKEN", "TestToken") - .UseSetting("PORT", "12345") - .UseSetting("APPL_PATH", "/") - .UseIISIntegration() - .Configure(app => + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - var appLifetime = app.ApplicationServices.GetRequiredService(); - appLifetime.ApplicationStopping.Register(() => applicationStoppingFired.SetResult(0)); + webHostBuilder + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .Configure(app => + { + var appLifetime = app.ApplicationServices.GetRequiredService(); + appLifetime.ApplicationStopping.Register(() => applicationStoppingFired.SetResult(0)); - app.Run(context => - { - requestExecuted.SetResult(0); - return Task.FromResult(0); - }); - }); - var server = new TestServer(builder); + app.Run(context => + { + requestExecuted.SetResult(0); + return Task.FromResult(0); + }); + }) + .UseTestServer(); + }) + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var request = new HttpRequestMessage(HttpMethod.Post, path); request.Headers.TryAddWithoutValidation("MS-ASPNETCORE-TOKEN", "TestToken"); @@ -207,23 +252,32 @@ namespace Microsoft.AspNetCore.Server.IISIntegration { var requestExecuted = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); var applicationStoppingFired = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - var builder = new WebHostBuilder() - .UseSetting("TOKEN", "TestToken") - .UseSetting("PORT", "12345") - .UseSetting("APPL_PATH", "/") - .UseIISIntegration() - .Configure(app => + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - var appLifetime = app.ApplicationServices.GetRequiredService(); - appLifetime.ApplicationStopping.Register(() => applicationStoppingFired.SetResult(0)); + webHostBuilder + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .Configure(app => + { + var appLifetime = app.ApplicationServices.GetRequiredService(); + appLifetime.ApplicationStopping.Register(() => applicationStoppingFired.SetResult(0)); - app.Run(context => - { - requestExecuted.SetResult(0); - return Task.FromResult(0); - }); - }); - var server = new TestServer(builder); + app.Run(context => + { + requestExecuted.SetResult(0); + return Task.FromResult(0); + }); + }) + .UseTestServer(); + }) + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var request = new HttpRequestMessage(HttpMethod.Post, "/iisintegration"); request.Headers.TryAddWithoutValidation("MS-ASPNETCORE-TOKEN", "TestToken"); @@ -236,43 +290,63 @@ namespace Microsoft.AspNetCore.Server.IISIntegration } [Fact] - public void UrlDelayRegisteredAndPreferHostingUrlsSet() + public async Task UrlDelayRegisteredAndPreferHostingUrlsSet() { - var builder = new WebHostBuilder() - .UseSetting("TOKEN", "TestToken") - .UseSetting("PORT", "12345") - .UseSetting("APPL_PATH", "/") - .UseIISIntegration() - .Configure(app => + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - app.Run(context => Task.FromResult(0)); - }); + webHostBuilder + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .Configure(app => + { + app.Run(context => Task.FromResult(0)); + }); - Assert.Null(builder.GetSetting(WebHostDefaults.ServerUrlsKey)); - Assert.Null(builder.GetSetting(WebHostDefaults.PreferHostingUrlsKey)); + Assert.Null(webHostBuilder.GetSetting(WebHostDefaults.ServerUrlsKey)); + Assert.Null(webHostBuilder.GetSetting(WebHostDefaults.PreferHostingUrlsKey)); - // Adds a server and calls Build() - var server = new TestServer(builder); + webHostBuilder.UseTestServer(); + }) + .Build(); - Assert.Equal("http://127.0.0.1:12345", builder.GetSetting(WebHostDefaults.ServerUrlsKey)); - Assert.Equal("true", builder.GetSetting(WebHostDefaults.PreferHostingUrlsKey)); + var server = host.GetTestServer(); + + await host.StartAsync(); + + var configuration = host.Services.GetService(); + + Assert.Equal("http://127.0.0.1:12345", configuration[WebHostDefaults.ServerUrlsKey]); + Assert.Equal("true", configuration[WebHostDefaults.PreferHostingUrlsKey]); } [Fact] - public void PathBaseHiddenFromServer() + public async Task PathBaseHiddenFromServer() { - var builder = new WebHostBuilder() - .UseSetting("TOKEN", "TestToken") - .UseSetting("PORT", "12345") - .UseSetting("APPL_PATH", "/pathBase") - .UseIISIntegration() - .Configure(app => + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - app.Run(context => Task.FromResult(0)); - }); - new TestServer(builder); + webHostBuilder + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/pathBase") + .UseIISIntegration() + .Configure(app => + { + app.Run(context => Task.FromResult(0)); + }) + .UseTestServer(); + }) + .Build(); - Assert.Equal("http://127.0.0.1:12345", builder.GetSetting(WebHostDefaults.ServerUrlsKey)); + host.GetTestServer(); + + await host.StartAsync(); + + var configuration = host.Services.GetService(); + Assert.Equal("http://127.0.0.1:12345", configuration[WebHostDefaults.ServerUrlsKey]); } [Fact] @@ -280,21 +354,30 @@ namespace Microsoft.AspNetCore.Server.IISIntegration { var requestPathBase = string.Empty; var requestPath = string.Empty; - var builder = new WebHostBuilder() - .UseSetting("TOKEN", "TestToken") - .UseSetting("PORT", "12345") - .UseSetting("APPL_PATH", "/pathbase") - .UseIISIntegration() - .Configure(app => + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - app.Run(context => - { - requestPathBase = context.Request.PathBase.Value; - requestPath = context.Request.Path.Value; - return Task.FromResult(0); - }); - }); - var server = new TestServer(builder); + webHostBuilder + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/pathbase") + .UseIISIntegration() + .Configure(app => + { + app.Run(context => + { + requestPathBase = context.Request.PathBase.Value; + requestPath = context.Request.Path.Value; + return Task.FromResult(0); + }); + }) + .UseTestServer(); + }) + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var request = new HttpRequestMessage(HttpMethod.Get, "/PathBase/Path"); request.Headers.TryAddWithoutValidation("MS-ASPNETCORE-TOKEN", "TestToken"); @@ -309,24 +392,33 @@ namespace Microsoft.AspNetCore.Server.IISIntegration { var assertsExecuted = false; - var builder = new WebHostBuilder() - .UseSetting("TOKEN", "TestToken") - .UseSetting("PORT", "12345") - .UseSetting("APPL_PATH", "/") - .UseIISIntegration() - .Configure(app => + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => { - app.Run(async context => - { - var auth = context.RequestServices.GetRequiredService(); - var windows = await auth.GetSchemeAsync(IISDefaults.AuthenticationScheme); - Assert.NotNull(windows); - Assert.Null(windows.DisplayName); - Assert.Equal("Microsoft.AspNetCore.Server.IISIntegration.AuthenticationHandler", windows.HandlerType.FullName); - assertsExecuted = true; - }); - }); - var server = new TestServer(builder); + webHostBuilder + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .Configure(app => + { + app.Run(async context => + { + var auth = context.RequestServices.GetRequiredService(); + var windows = await auth.GetSchemeAsync(IISDefaults.AuthenticationScheme); + Assert.NotNull(windows); + Assert.Null(windows.DisplayName); + Assert.Equal("Microsoft.AspNetCore.Server.IISIntegration.AuthenticationHandler", windows.HandlerType.FullName); + assertsExecuted = true; + }); + }) + .UseTestServer(); + }) + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var req = new HttpRequestMessage(HttpMethod.Get, ""); req.Headers.TryAddWithoutValidation("MS-ASPNETCORE-TOKEN", "TestToken"); @@ -342,11 +434,36 @@ namespace Microsoft.AspNetCore.Server.IISIntegration { var assertsExecuted = false; - var builder = new WebHostBuilder() - .UseSetting("TOKEN", "TestToken") - .UseSetting("PORT", "12345") - .UseSetting("APPL_PATH", "/") - .UseIISIntegration() + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .Configure(app => + { + app.Run(async context => + { + var auth = context.RequestServices.GetService(); + Assert.NotNull(auth); + var windowsAuth = await auth.GetSchemeAsync(IISDefaults.AuthenticationScheme); + if (forward) + { + Assert.NotNull(windowsAuth); + Assert.Null(windowsAuth.DisplayName); + Assert.Equal("AuthenticationHandler", windowsAuth.HandlerType.Name); + } + else + { + Assert.Null(windowsAuth); + } + assertsExecuted = true; + }); + }) + .UseTestServer(); + }) .ConfigureServices(services => { services.Configure(options => @@ -354,27 +471,11 @@ namespace Microsoft.AspNetCore.Server.IISIntegration options.ForwardWindowsAuthentication = forward; }); }) - .Configure(app => - { - app.Run(async context => - { - var auth = context.RequestServices.GetService(); - Assert.NotNull(auth); - var windowsAuth = await auth.GetSchemeAsync(IISDefaults.AuthenticationScheme); - if (forward) - { - Assert.NotNull(windowsAuth); - Assert.Null(windowsAuth.DisplayName); - Assert.Equal("AuthenticationHandler", windowsAuth.HandlerType.Name); - } - else - { - Assert.Null(windowsAuth); - } - assertsExecuted = true; - }); - }); - var server = new TestServer(builder); + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var req = new HttpRequestMessage(HttpMethod.Get, ""); req.Headers.TryAddWithoutValidation("MS-ASPNETCORE-TOKEN", "TestToken"); @@ -390,11 +491,24 @@ namespace Microsoft.AspNetCore.Server.IISIntegration { var assertsExecuted = false; - var builder = new WebHostBuilder() - .UseSetting("TOKEN", "TestToken") - .UseSetting("PORT", "12345") - .UseSetting("APPL_PATH", "/") - .UseIISIntegration() + using var host = new HostBuilder() + .ConfigureWebHost(webHostBuilder => + { + webHostBuilder + .UseSetting("TOKEN", "TestToken") + .UseSetting("PORT", "12345") + .UseSetting("APPL_PATH", "/") + .UseIISIntegration() + .Configure(app => + { + app.Run(context => + { + assertsExecuted = true; + return Task.FromResult(0); + }); + }) + .UseTestServer(); + }) .ConfigureServices(services => { services.Configure(options => @@ -402,15 +516,11 @@ namespace Microsoft.AspNetCore.Server.IISIntegration options.ForwardWindowsAuthentication = forward; }); }) - .Configure(app => - { - app.Run(context => - { - assertsExecuted = true; - return Task.FromResult(0); - }); - }); - var server = new TestServer(builder); + .Build(); + + var server = host.GetTestServer(); + + await host.StartAsync(); var req = new HttpRequestMessage(HttpMethod.Get, ""); req.Headers.TryAddWithoutValidation("MS-ASPNETCORE-TOKEN", "TestToken"); diff --git a/src/Servers/Kestrel/Core/src/Http2Limits.cs b/src/Servers/Kestrel/Core/src/Http2Limits.cs index eccf7e0598..99329be0a1 100644 --- a/src/Servers/Kestrel/Core/src/Http2Limits.cs +++ b/src/Servers/Kestrel/Core/src/Http2Limits.cs @@ -19,7 +19,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core private int _maxRequestHeaderFieldSize = (int)Http2PeerSettings.DefaultMaxFrameSize; private int _initialConnectionWindowSize = 1024 * 128; // Larger than the default 64kb, and larger than any one single stream. private int _initialStreamWindowSize = 1024 * 96; // Larger than the default 64kb - private TimeSpan _keepAlivePingInterval = TimeSpan.MaxValue; + private TimeSpan _keepAlivePingDelay = TimeSpan.MaxValue; private TimeSpan _keepAlivePingTimeout = TimeSpan.FromSeconds(20); /// @@ -147,18 +147,18 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core } /// - /// Gets or sets the keep alive ping interval. The server will send a keep alive ping to the client if it - /// doesn't receive any frames for this period of time. This property is used together with + /// Gets or sets the keep alive ping delay. The server will send a keep alive ping to the client if it + /// doesn't receive any frames on a connection for this period of time. This property is used together with /// to close broken connections. /// - /// Interval must be greater than or equal to 1 second. Set to to - /// disable the keep alive ping interval. + /// Delay value must be greater than or equal to 1 second. Set to to + /// disable the keep alive ping. /// Defaults to . /// /// - public TimeSpan KeepAlivePingInterval + public TimeSpan KeepAlivePingDelay { - get => _keepAlivePingInterval; + get => _keepAlivePingDelay; set { // Keep alive uses Kestrel's system clock which has a 1 second resolution. Time is greater or equal to clock resolution. @@ -167,13 +167,13 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core throw new ArgumentOutOfRangeException(nameof(value), CoreStrings.FormatArgumentTimeSpanGreaterOrEqual(Heartbeat.Interval)); } - _keepAlivePingInterval = value != Timeout.InfiniteTimeSpan ? value : TimeSpan.MaxValue; + _keepAlivePingDelay = value != Timeout.InfiniteTimeSpan ? value : TimeSpan.MaxValue; } } /// /// Gets or sets the keep alive ping timeout. Keep alive pings are sent when a period of inactivity exceeds - /// the configured value. The server will close the connection if it + /// the configured value. The server will close the connection if it /// doesn't receive any frames within the timeout. /// /// Timeout must be greater than or equal to 1 second. Set to to diff --git a/src/Servers/Kestrel/Core/src/Internal/ConfigurationReader.cs b/src/Servers/Kestrel/Core/src/Internal/ConfigurationReader.cs index 2843bb014c..894cd0fa01 100644 --- a/src/Servers/Kestrel/Core/src/Internal/ConfigurationReader.cs +++ b/src/Servers/Kestrel/Core/src/Internal/ConfigurationReader.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Security.Authentication; +using Microsoft.AspNetCore.Server.Kestrel.Https; using Microsoft.Extensions.Configuration; namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal @@ -18,6 +19,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal private const string EndpointDefaultsKey = "EndpointDefaults"; private const string EndpointsKey = "Endpoints"; private const string UrlKey = "Url"; + private const string ClientCertificateModeKey = "ClientCertificateMode"; private readonly IConfiguration _configuration; @@ -50,6 +52,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal // "EndpointDefaults": { // "Protocols": "Http1AndHttp2", // "SslProtocols": [ "Tls11", "Tls12", "Tls13"], + // "ClientCertificateMode" : "NoCertificate" // } private EndpointDefaults ReadEndpointDefaults() { @@ -57,7 +60,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal return new EndpointDefaults { Protocols = ParseProtocols(configSection[ProtocolsKey]), - SslProtocols = ParseSslProcotols(configSection.GetSection(SslProtocolsKey)) + SslProtocols = ParseSslProcotols(configSection.GetSection(SslProtocolsKey)), + ClientCertificateMode = ParseClientCertificateMode(configSection[ClientCertificateModeKey]) }; } @@ -75,7 +79,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal // "Certificate": { // "Path": "testCert.pfx", // "Password": "testPassword" - // } + // }, + // "ClientCertificateMode" : "NoCertificate" // } var url = endpointConfig[UrlKey]; @@ -91,7 +96,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal Protocols = ParseProtocols(endpointConfig[ProtocolsKey]), ConfigSection = endpointConfig, Certificate = new CertificateConfig(endpointConfig.GetSection(CertificateKey)), - SslProtocols = ParseSslProcotols(endpointConfig.GetSection(SslProtocolsKey)) + SslProtocols = ParseSslProcotols(endpointConfig.GetSection(SslProtocolsKey)), + ClientCertificateMode = ParseClientCertificateMode(endpointConfig[ClientCertificateModeKey]) }; endpoints.Add(endpoint); @@ -100,6 +106,16 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal return endpoints; } + private ClientCertificateMode? ParseClientCertificateMode(string clientCertificateMode) + { + if (Enum.TryParse(clientCertificateMode, ignoreCase: true, out var result)) + { + return result; + } + + return null; + } + private static HttpProtocols? ParseProtocols(string protocols) { if (Enum.TryParse(protocols, ignoreCase: true, out var result)) @@ -129,11 +145,13 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal // "EndpointDefaults": { // "Protocols": "Http1AndHttp2", // "SslProtocols": [ "Tls11", "Tls12", "Tls13"], + // "ClientCertificateMode" : "NoCertificate" // } internal class EndpointDefaults { public HttpProtocols? Protocols { get; set; } public SslProtocols? SslProtocols { get; set; } + public ClientCertificateMode? ClientCertificateMode { get; set; } } // "EndpointName": { @@ -143,7 +161,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal // "Certificate": { // "Path": "testCert.pfx", // "Password": "testPassword" - // } + // }, + // "ClientCertificateMode" : "NoCertificate" // } internal class EndpointConfig { @@ -155,6 +174,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal public HttpProtocols? Protocols { get; set; } public SslProtocols? SslProtocols { get; set; } public CertificateConfig Certificate { get; set; } + public ClientCertificateMode? ClientCertificateMode { get; set; } // Compare config sections because it's accessible to app developers via an Action callback. // We cannot rely entirely on comparing config sections for equality, because KestrelConfigurationLoader.Reload() sets diff --git a/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Connection.cs b/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Connection.cs index 28002d804a..136e8d3cf4 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Connection.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Http2/Http2Connection.cs @@ -107,10 +107,10 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 var connectionWindow = (uint)http2Limits.InitialConnectionWindowSize; _inputFlowControl = new InputFlowControl(connectionWindow, connectionWindow / 2); - if (http2Limits.KeepAlivePingInterval != TimeSpan.MaxValue) + if (http2Limits.KeepAlivePingDelay != TimeSpan.MaxValue) { _keepAlive = new Http2KeepAlive( - http2Limits.KeepAlivePingInterval, + http2Limits.KeepAlivePingDelay, http2Limits.KeepAlivePingTimeout, context.ServiceContext.SystemClock); } diff --git a/src/Servers/Kestrel/Core/src/Internal/Http3/Http3Connection.cs b/src/Servers/Kestrel/Core/src/Internal/Http3/Http3Connection.cs index b0c85bfcdf..20a500a355 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Http3/Http3Connection.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Http3/Http3Connection.cs @@ -32,7 +32,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http3 private long _highestOpenedStreamId; // TODO lock to access private volatile bool _haveSentGoAway; private readonly object _sync = new object(); - private MultiplexedConnectionContext _multiplexedContext; + private readonly MultiplexedConnectionContext _multiplexedContext; private readonly Http3ConnectionContext _context; private readonly ISystemClock _systemClock; private readonly TimeoutControl _timeoutControl; diff --git a/src/Servers/Kestrel/Core/src/Internal/Http3/Http3ControlStream.cs b/src/Servers/Kestrel/Core/src/Internal/Http3/Http3ControlStream.cs index 0c89d21c0d..a8b0d8d7bc 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Http3/Http3ControlStream.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Http3/Http3ControlStream.cs @@ -20,9 +20,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http3 private const int EncoderStream = 2; private const int DecoderStream = 3; - private Http3FrameWriter _frameWriter; + private readonly Http3FrameWriter _frameWriter; private readonly Http3Connection _http3Connection; - private HttpConnectionContext _context; + private readonly HttpConnectionContext _context; private readonly Http3RawFrame _incomingFrame = new Http3RawFrame(); private volatile int _isClosed; private int _gracefulCloseInitiator; diff --git a/src/Servers/Kestrel/Core/src/Internal/Http3/Http3Stream.cs b/src/Servers/Kestrel/Core/src/Internal/Http3/Http3Stream.cs index c4004372bf..d8530a577a 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Http3/Http3Stream.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Http3/Http3Stream.cs @@ -32,8 +32,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http3 private static ReadOnlySpan TrailersBytes => new byte[8] { (byte)'t', (byte)'r', (byte)'a', (byte)'i', (byte)'l', (byte)'e', (byte)'r', (byte)'s' }; private static ReadOnlySpan ConnectBytes => new byte[7] { (byte)'C', (byte)'O', (byte)'N', (byte)'N', (byte)'E', (byte)'C', (byte)'T' }; - private Http3FrameWriter _frameWriter; - private Http3OutputProducer _http3Output; + private readonly Http3FrameWriter _frameWriter; + private readonly Http3OutputProducer _http3Output; private int _isClosed; private int _gracefulCloseInitiator; private readonly Http3StreamContext _context; diff --git a/src/Servers/Kestrel/Core/src/Internal/Http3/QPack/DecoderStreamReader.cs b/src/Servers/Kestrel/Core/src/Internal/Http3/QPack/DecoderStreamReader.cs index 6b53b79900..621714dac1 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Http3/QPack/DecoderStreamReader.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Http3/QPack/DecoderStreamReader.cs @@ -43,7 +43,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http3.QPack private const byte InsertCountIncrementPrefixMask = 0x3F; private const int InsertCountIncrementPrefix = 6; - private IntegerDecoder _integerDecoder = new IntegerDecoder(); + private readonly IntegerDecoder _integerDecoder = new IntegerDecoder(); private State _state; public DecoderStreamReader() diff --git a/src/Servers/Kestrel/Core/src/Internal/Http3/QPack/EncoderStreamReader.cs b/src/Servers/Kestrel/Core/src/Internal/Http3/QPack/EncoderStreamReader.cs index b235415902..2fd44021d3 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Http3/QPack/EncoderStreamReader.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Http3/QPack/EncoderStreamReader.cs @@ -76,15 +76,15 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http3.QPack private const byte HuffmanMask = 0x80; private bool _s; - private byte[] _stringOctets; - private byte[] _headerNameOctets; - private byte[] _headerValueOctets; + private readonly byte[] _stringOctets; + private readonly byte[] _headerNameOctets; + private readonly byte[] _headerValueOctets; private byte[] _headerName; private int _headerNameLength; private int _headerValueLength; private int _stringLength; private int _stringIndex; - private DynamicTable _dynamicTable = new DynamicTable(1000); // TODO figure out architecture. + private readonly DynamicTable _dynamicTable = new DynamicTable(1000); // TODO figure out architecture. private readonly IntegerDecoder _integerDecoder = new IntegerDecoder(); private State _state = State.Ready; diff --git a/src/Servers/Kestrel/Core/src/Internal/Infrastructure/Heartbeat.cs b/src/Servers/Kestrel/Core/src/Internal/Infrastructure/Heartbeat.cs index e26a2961cb..0e42007907 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Infrastructure/Heartbeat.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Infrastructure/Heartbeat.cs @@ -16,7 +16,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure private readonly IDebugger _debugger; private readonly IKestrelTrace _trace; private readonly TimeSpan _interval; - private Thread _timerThread; + private readonly Thread _timerThread; private volatile bool _stopped; public Heartbeat(IHeartbeatHandler[] callbacks, ISystemClock systemClock, IDebugger debugger, IKestrelTrace trace) diff --git a/src/Servers/Kestrel/Core/src/Internal/Infrastructure/ThreadPoolAwaitable.cs b/src/Servers/Kestrel/Core/src/Internal/Infrastructure/ThreadPoolAwaitable.cs index 69f3cb48d5..b0db58a240 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Infrastructure/ThreadPoolAwaitable.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Infrastructure/ThreadPoolAwaitable.cs @@ -9,7 +9,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 { internal class ThreadPoolAwaitable : ICriticalNotifyCompletion { - public static ThreadPoolAwaitable Instance = new ThreadPoolAwaitable(); + public static readonly ThreadPoolAwaitable Instance = new ThreadPoolAwaitable(); private ThreadPoolAwaitable() { diff --git a/src/Servers/Kestrel/Core/src/Internal/Infrastructure/WrappingStream.cs b/src/Servers/Kestrel/Core/src/Internal/Infrastructure/WrappingStream.cs index c62cda3342..bec06edcb2 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Infrastructure/WrappingStream.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Infrastructure/WrappingStream.cs @@ -107,6 +107,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure public override void EndWrite(IAsyncResult asyncResult) => _inner.EndWrite(asyncResult); + [Obsolete("This Remoting API is not supported and throws PlatformNotSupportedException.", DiagnosticId = "SYSLIB0010", UrlFormat = "https://aka.ms/dotnet-warnings/{0}")] public override object InitializeLifetimeService() => _inner.InitializeLifetimeService(); diff --git a/src/Servers/Kestrel/Core/src/Internal/KestrelServerOptionsSetup.cs b/src/Servers/Kestrel/Core/src/Internal/KestrelServerOptionsSetup.cs index 0c7d0a375f..fd35a67b1d 100644 --- a/src/Servers/Kestrel/Core/src/Internal/KestrelServerOptionsSetup.cs +++ b/src/Servers/Kestrel/Core/src/Internal/KestrelServerOptionsSetup.cs @@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal { internal class KestrelServerOptionsSetup : IConfigureOptions { - private IServiceProvider _services; + private readonly IServiceProvider _services; public KestrelServerOptionsSetup(IServiceProvider services) { diff --git a/src/Servers/Kestrel/Core/src/KestrelConfigurationLoader.cs b/src/Servers/Kestrel/Core/src/KestrelConfigurationLoader.cs index 04349031e2..86e63ddc6a 100644 --- a/src/Servers/Kestrel/Core/src/KestrelConfigurationLoader.cs +++ b/src/Servers/Kestrel/Core/src/KestrelConfigurationLoader.cs @@ -280,6 +280,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel if (https) { httpsOptions.SslProtocols = ConfigurationReader.EndpointDefaults.SslProtocols ?? SslProtocols.None; + httpsOptions.ClientCertificateMode = ConfigurationReader.EndpointDefaults.ClientCertificateMode ?? ClientCertificateMode.NoCertificate; // Defaults Options.ApplyHttpsDefaults(httpsOptions); @@ -289,6 +290,11 @@ namespace Microsoft.AspNetCore.Server.Kestrel httpsOptions.SslProtocols = endpoint.SslProtocols.Value; } + if (endpoint.ClientCertificateMode.HasValue) + { + httpsOptions.ClientCertificateMode = endpoint.ClientCertificateMode.Value; + } + // Specified httpsOptions.ServerCertificate = LoadCertificate(endpoint.Certificate, endpoint.Name) ?? httpsOptions.ServerCertificate; diff --git a/src/Servers/Kestrel/Kestrel/test/ConfigurationReaderTests.cs b/src/Servers/Kestrel/Kestrel/test/ConfigurationReaderTests.cs index 06345cc462..6b24b86b62 100644 --- a/src/Servers/Kestrel/Kestrel/test/ConfigurationReaderTests.cs +++ b/src/Servers/Kestrel/Kestrel/test/ConfigurationReaderTests.cs @@ -7,6 +7,7 @@ using System.Linq; using System.Security.Authentication; using Microsoft.AspNetCore.Server.Kestrel.Core; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal; +using Microsoft.AspNetCore.Server.Kestrel.Https; using Microsoft.Extensions.Configuration; using Xunit; @@ -92,7 +93,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Tests [Fact] public void ReadCertificatesSection_ThrowsOnCaseInsensitiveDuplicate() { - var exception = Assert.Throws(() => + var exception = Assert.Throws(() => new ConfigurationBuilder().AddInMemoryCollection(new[] { new KeyValuePair("Certificates:filecert:Password", "certpassword"), @@ -154,10 +155,13 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Tests { new KeyValuePair("Endpoints:End1:Url", "http://*:5001"), new KeyValuePair("Endpoints:End2:Url", "https://*:5002"), + new KeyValuePair("Endpoints:End2:ClientCertificateMode", "AllowCertificate"), new KeyValuePair("Endpoints:End3:Url", "https://*:5003"), + new KeyValuePair("Endpoints:End3:ClientCertificateMode", "RequireCertificate"), new KeyValuePair("Endpoints:End3:Certificate:Path", "/path/cert.pfx"), new KeyValuePair("Endpoints:End3:Certificate:Password", "certpassword"), new KeyValuePair("Endpoints:End4:Url", "https://*:5004"), + new KeyValuePair("Endpoints:End4:ClientCertificateMode", "NoCertificate"), new KeyValuePair("Endpoints:End4:Certificate:Subject", "certsubject"), new KeyValuePair("Endpoints:End4:Certificate:Store", "certstore"), new KeyValuePair("Endpoints:End4:Certificate:Location", "cetlocation"), @@ -171,6 +175,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Tests var end1 = endpoints.First(); Assert.Equal("End1", end1.Name); Assert.Equal("http://*:5001", end1.Url); + Assert.Null(end1.ClientCertificateMode); Assert.NotNull(end1.ConfigSection); Assert.NotNull(end1.Certificate); Assert.False(end1.Certificate.ConfigSection.Exists()); @@ -178,6 +183,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Tests var end2 = endpoints.Skip(1).First(); Assert.Equal("End2", end2.Name); Assert.Equal("https://*:5002", end2.Url); + Assert.Equal(ClientCertificateMode.AllowCertificate, end2.ClientCertificateMode); Assert.NotNull(end2.ConfigSection); Assert.NotNull(end2.Certificate); Assert.False(end2.Certificate.ConfigSection.Exists()); @@ -185,6 +191,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Tests var end3 = endpoints.Skip(2).First(); Assert.Equal("End3", end3.Name); Assert.Equal("https://*:5003", end3.Url); + Assert.Equal(ClientCertificateMode.RequireCertificate, end3.ClientCertificateMode); Assert.NotNull(end3.ConfigSection); Assert.NotNull(end3.Certificate); Assert.True(end3.Certificate.ConfigSection.Exists()); @@ -197,6 +204,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Tests var end4 = endpoints.Skip(3).First(); Assert.Equal("End4", end4.Name); Assert.Equal("https://*:5004", end4.Url); + Assert.Equal(ClientCertificateMode.NoCertificate, end4.ClientCertificateMode); Assert.NotNull(end4.ConfigSection); Assert.NotNull(end4.Certificate); Assert.True(end4.Certificate.ConfigSection.Exists()); @@ -235,7 +243,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Tests var reader = new ConfigurationReader(config); var endpoint = reader.Endpoints.First(); - Assert.Equal(SslProtocols.Tls11|SslProtocols.Tls12, endpoint.SslProtocols); + Assert.Equal(SslProtocols.Tls11 | SslProtocols.Tls12, endpoint.SslProtocols); } [Fact] @@ -287,5 +295,41 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Tests var endpoint = reader.EndpointDefaults; Assert.Null(endpoint.SslProtocols); } + + [Fact] + public void ReadEndpointWithNoClientCertificateModeSettings_ReturnsNull() + { + var config = new ConfigurationBuilder().AddInMemoryCollection(new[] + { + new KeyValuePair("Endpoints:End1:Url", "http://*:5001"), + }).Build(); + var reader = new ConfigurationReader(config); + + var endpoint = reader.Endpoints.First(); + Assert.Null(endpoint.ClientCertificateMode); + } + + [Fact] + public void ReadEndpointDefaultsWithClientCertificateModeSet_ReturnsCorrectValue() + { + var config = new ConfigurationBuilder().AddInMemoryCollection(new[] + { + new KeyValuePair("EndpointDefaults:ClientCertificateMode", "AllowCertificate"), + }).Build(); + var reader = new ConfigurationReader(config); + + var endpoint = reader.EndpointDefaults; + Assert.Equal(ClientCertificateMode.AllowCertificate, endpoint.ClientCertificateMode); + } + + [Fact] + public void ReadEndpointDefaultsWithNoAllowCertificateSettings_ReturnsCorrectValue() + { + var config = new ConfigurationBuilder().Build(); + var reader = new ConfigurationReader(config); + + var endpoint = reader.EndpointDefaults; + Assert.Null(endpoint.ClientCertificateMode); + } } } diff --git a/src/Servers/Kestrel/Kestrel/test/KestrelConfigurationLoaderTests.cs b/src/Servers/Kestrel/Kestrel/test/KestrelConfigurationLoaderTests.cs index 5053b3cffb..2e71cdb223 100644 --- a/src/Servers/Kestrel/Kestrel/test/KestrelConfigurationLoaderTests.cs +++ b/src/Servers/Kestrel/Kestrel/test/KestrelConfigurationLoaderTests.cs @@ -704,6 +704,136 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Tests Assert.True(ran1); } + [Fact] + public void EndpointConfigureSection_CanSetClientCertificateMode() + { + var serverOptions = CreateServerOptions(); + var ranDefault = false; + + serverOptions.ConfigureHttpsDefaults(opt => + { + opt.ServerCertificate = TestResources.GetTestCertificate(); + + // Kestrel default + Assert.Equal(ClientCertificateMode.NoCertificate, opt.ClientCertificateMode); + ranDefault = true; + }); + + var ran1 = false; + var ran2 = false; + var config = new ConfigurationBuilder().AddInMemoryCollection(new[] + { + new KeyValuePair("Endpoints:End1:ClientCertificateMode", "AllowCertificate"), + new KeyValuePair("Endpoints:End1:Url", "https://*:5001"), + }).Build(); + serverOptions.Configure(config) + .Endpoint("End1", opt => + { + Assert.Equal(ClientCertificateMode.AllowCertificate, opt.HttpsOptions.ClientCertificateMode); + ran1 = true; + }) + .Load(); + serverOptions.ListenAnyIP(0, opt => + { + opt.UseHttps(httpsOptions => + { + // Kestrel default. + Assert.Equal(ClientCertificateMode.NoCertificate, httpsOptions.ClientCertificateMode); + ran2 = true; + }); + }); + + Assert.True(ranDefault); + Assert.True(ran1); + Assert.True(ran2); + } + + [Fact] + public void EndpointConfigureSection_CanOverrideClientCertificateModeFromConfigureHttpsDefaults() + { + var serverOptions = CreateServerOptions(); + + serverOptions.ConfigureHttpsDefaults(opt => + { + opt.ServerCertificate = TestResources.GetTestCertificate(); + opt.ClientCertificateMode = ClientCertificateMode.RequireCertificate; + }); + + var ran1 = false; + var config = new ConfigurationBuilder().AddInMemoryCollection(new[] + { + new KeyValuePair("Endpoints:End1:ClientCertificateMode", "AllowCertificate"), + new KeyValuePair("Endpoints:End1:Url", "https://*:5001"), + }).Build(); + serverOptions.Configure(config) + .Endpoint("End1", opt => + { + Assert.Equal(ClientCertificateMode.AllowCertificate, opt.HttpsOptions.ClientCertificateMode); + ran1 = true; + }) + .Load(); + + Assert.True(ran1); + } + + [Fact] + public void DefaultEndpointConfigureSection_CanSetClientCertificateMode() + { + var serverOptions = CreateServerOptions(); + + serverOptions.ConfigureHttpsDefaults(opt => + { + opt.ServerCertificate = TestResources.GetTestCertificate(); + }); + + var ran1 = false; + var config = new ConfigurationBuilder().AddInMemoryCollection(new[] + { + new KeyValuePair("EndpointDefaults:ClientCertificateMode", "AllowCertificate"), + new KeyValuePair("Endpoints:End1:Url", "https://*:5001"), + }).Build(); + serverOptions.Configure(config) + .Endpoint("End1", opt => + { + Assert.Equal(ClientCertificateMode.AllowCertificate, opt.HttpsOptions.ClientCertificateMode); + ran1 = true; + }) + .Load(); + + Assert.True(ran1); + } + + + [Fact] + public void DefaultEndpointConfigureSection_ConfigureHttpsDefaultsCanOverrideClientCertificateMode() + { + var serverOptions = CreateServerOptions(); + + serverOptions.ConfigureHttpsDefaults(opt => + { + opt.ServerCertificate = TestResources.GetTestCertificate(); + + Assert.Equal(ClientCertificateMode.AllowCertificate, opt.ClientCertificateMode); + opt.ClientCertificateMode = ClientCertificateMode.RequireCertificate; + }); + + var ran1 = false; + var config = new ConfigurationBuilder().AddInMemoryCollection(new[] + { + new KeyValuePair("EndpointDefaults:ClientCertificateMode", "AllowCertificate"), + new KeyValuePair("Endpoints:End1:Url", "https://*:5001"), + }).Build(); + serverOptions.Configure(config) + .Endpoint("End1", opt => + { + Assert.Equal(ClientCertificateMode.RequireCertificate, opt.HttpsOptions.ClientCertificateMode); + ran1 = true; + }) + .Load(); + + Assert.True(ran1); + } + [Fact] public void Reload_IdentifiesEndpointsToStartAndStop() { diff --git a/src/Servers/Kestrel/test/FunctionalTests/Http2/HandshakeTests.cs b/src/Servers/Kestrel/test/FunctionalTests/Http2/HandshakeTests.cs index c4a89e9fcf..620c08a73e 100644 --- a/src/Servers/Kestrel/test/FunctionalTests/Http2/HandshakeTests.cs +++ b/src/Servers/Kestrel/test/FunctionalTests/Http2/HandshakeTests.cs @@ -80,7 +80,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests.Http2 [ConditionalFact] [OSSkipCondition(OperatingSystems.MacOSX, SkipReason = "Missing SslStream ALPN support: https://github.com/dotnet/corefx/issues/30492")] - [SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/10428", Queues = "Debian.8.Amd64;Debian.8.Amd64.Open")] // Debian 8 uses OpenSSL 1.0.1 which does not support HTTP/2 [MinimumOSVersion(OperatingSystems.Windows, WindowsVersions.Win10)] public async Task TlsAlpnHandshakeSelectsHttp2From1and2() { @@ -111,7 +110,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests.Http2 [ConditionalFact] [OSSkipCondition(OperatingSystems.MacOSX, SkipReason = "Missing SslStream ALPN support: https://github.com/dotnet/corefx/issues/30492")] - [SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/10428", Queues = "Debian.8.Amd64;Debian.8.Amd64.Open")] // Debian 8 uses OpenSSL 1.0.1 which does not support HTTP/2 [MinimumOSVersion(OperatingSystems.Windows, WindowsVersions.Win10)] public async Task TlsAlpnHandshakeSelectsHttp2() { diff --git a/src/Servers/Kestrel/test/FunctionalTests/Http2/ShutdownTests.cs b/src/Servers/Kestrel/test/FunctionalTests/Http2/ShutdownTests.cs index d5788e3369..e8537520d1 100644 --- a/src/Servers/Kestrel/test/FunctionalTests/Http2/ShutdownTests.cs +++ b/src/Servers/Kestrel/test/FunctionalTests/Http2/ShutdownTests.cs @@ -23,7 +23,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests.Http2 { [OSSkipCondition(OperatingSystems.MacOSX, SkipReason = "Missing SslStream ALPN support: https://github.com/dotnet/corefx/issues/30492")] [MinimumOSVersion(OperatingSystems.Windows, WindowsVersions.Win10)] - [SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/10428", Queues = "Debian.8.Amd64;Debian.8.Amd64.Open")] // Debian 8 uses OpenSSL 1.0.1 which does not support HTTP/2 public class ShutdownTests : TestApplicationErrorLoggerLoggedTest { private static X509Certificate2 _x509Certificate2 = TestResources.GetTestCertificate(); diff --git a/src/Servers/Kestrel/test/FunctionalTests/MaxRequestBufferSizeTests.cs b/src/Servers/Kestrel/test/FunctionalTests/MaxRequestBufferSizeTests.cs index 430e7fbfd0..496b1bcf3c 100644 --- a/src/Servers/Kestrel/test/FunctionalTests/MaxRequestBufferSizeTests.cs +++ b/src/Servers/Kestrel/test/FunctionalTests/MaxRequestBufferSizeTests.cs @@ -109,7 +109,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests } [Theory] [MemberData(nameof(LargeUploadData))] - [QuarantinedTest] + [QuarantinedTest] // This is inherently flaky and should never be unquarantined. public async Task LargeUpload(long? maxRequestBufferSize, bool connectionAdapter, bool expectPause) { // Parameters diff --git a/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2KeepAliveTests.cs b/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2KeepAliveTests.cs index 47176d32bc..71d2bcbbba 100644 --- a/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2KeepAliveTests.cs +++ b/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2KeepAliveTests.cs @@ -12,9 +12,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests public class Http2KeepAliveTests : Http2TestBase { [Fact] - public async Task KeepAlivePingInterval_InfiniteTimeSpan_KeepAliveNotEnabled() + public async Task KeepAlivePingDelay_InfiniteTimeSpan_KeepAliveNotEnabled() { - _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingInterval = Timeout.InfiniteTimeSpan; + _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingDelay = Timeout.InfiniteTimeSpan; await InitializeConnectionAsync(_noopApplication).DefaultTimeout(); @@ -26,7 +26,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests [Fact] public async Task KeepAlivePingTimeout_InfiniteTimeSpan_NoGoAway() { - _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingInterval = TimeSpan.FromSeconds(1); + _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingDelay = TimeSpan.FromSeconds(1); _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingTimeout = Timeout.InfiniteTimeSpan; await InitializeConnectionAsync(_noopApplication).DefaultTimeout(); @@ -57,7 +57,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests [Fact] public async Task IntervalExceeded_WithoutActivity_PingSent() { - _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingInterval = TimeSpan.FromSeconds(1); + _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingDelay = TimeSpan.FromSeconds(1); await InitializeConnectionAsync(_noopApplication).DefaultTimeout(); @@ -80,7 +80,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests [Fact] public async Task IntervalExceeded_WithActivity_NoPingSent() { - _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingInterval = TimeSpan.FromSeconds(1); + _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingDelay = TimeSpan.FromSeconds(1); await InitializeConnectionAsync(_noopApplication).DefaultTimeout(); @@ -104,7 +104,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests [Fact] public async Task IntervalNotExceeded_NoPingSent() { - _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingInterval = TimeSpan.FromSeconds(5); + _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingDelay = TimeSpan.FromSeconds(5); await InitializeConnectionAsync(_noopApplication).DefaultTimeout(); @@ -122,7 +122,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests [Fact] public async Task IntervalExceeded_MultipleTimes_PingsNotSentWhileAwaitingOnAck() { - _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingInterval = TimeSpan.FromSeconds(1); + _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingDelay = TimeSpan.FromSeconds(1); await InitializeConnectionAsync(_noopApplication).DefaultTimeout(); @@ -146,7 +146,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests [Fact] public async Task IntervalExceeded_MultipleTimes_PingSentAfterAck() { - _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingInterval = TimeSpan.FromSeconds(1); + _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingDelay = TimeSpan.FromSeconds(1); await InitializeConnectionAsync(_noopApplication).DefaultTimeout(); @@ -185,7 +185,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests [Fact] public async Task TimeoutExceeded_NoAck_GoAway() { - _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingInterval = TimeSpan.FromSeconds(1); + _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingDelay = TimeSpan.FromSeconds(1); _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingTimeout = TimeSpan.FromSeconds(3); await InitializeConnectionAsync(_noopApplication).DefaultTimeout(); @@ -217,7 +217,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests [Fact] public async Task TimeoutExceeded_NonPingActivity_NoGoAway() { - _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingInterval = TimeSpan.FromSeconds(1); + _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingDelay = TimeSpan.FromSeconds(1); _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingTimeout = TimeSpan.FromSeconds(3); await InitializeConnectionAsync(_noopApplication).DefaultTimeout(); @@ -250,7 +250,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests [Fact] public async Task IntervalExceeded_StreamStarted_NoPingSent() { - _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingInterval = TimeSpan.FromSeconds(1); + _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingDelay = TimeSpan.FromSeconds(1); await InitializeConnectionAsync(_noopApplication).DefaultTimeout(); @@ -275,7 +275,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests [Fact] public async Task IntervalExceeded_ConnectionFlowControlUsedUpThenPings_NoPingSent() { - _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingInterval = TimeSpan.FromSeconds(1); + _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingDelay = TimeSpan.FromSeconds(1); // Reduce connection window size so that one stream can fill it _serviceContext.ServerOptions.Limits.Http2.InitialConnectionWindowSize = 65535; @@ -330,7 +330,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests [Fact] public async Task TimeoutExceeded_ConnectionFlowControlUsedUpThenPings_NoGoAway() { - _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingInterval = TimeSpan.FromSeconds(1); + _serviceContext.ServerOptions.Limits.Http2.KeepAlivePingDelay = TimeSpan.FromSeconds(1); // Reduce connection window size so that one stream can fill it _serviceContext.ServerOptions.Limits.Http2.InitialConnectionWindowSize = 65535; diff --git a/src/Servers/Kestrel/test/InMemory.FunctionalTests/HttpsConnectionMiddlewareTests.cs b/src/Servers/Kestrel/test/InMemory.FunctionalTests/HttpsConnectionMiddlewareTests.cs index 70b216e149..59c7222df7 100644 --- a/src/Servers/Kestrel/test/InMemory.FunctionalTests/HttpsConnectionMiddlewareTests.cs +++ b/src/Servers/Kestrel/test/InMemory.FunctionalTests/HttpsConnectionMiddlewareTests.cs @@ -632,7 +632,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.InMemory.FunctionalTests [InlineData(HttpProtocols.Http2)] [InlineData(HttpProtocols.Http1AndHttp2)] [OSSkipCondition(OperatingSystems.MacOSX, SkipReason = "Missing SslStream ALPN support: https://github.com/dotnet/corefx/issues/30492")] - [SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/10428", Queues = "Debian.8.Amd64;Debian.8.Amd64.Open")] // Debian 8 uses OpenSSL 1.0.1 which does not support HTTP/2 [MinimumOSVersion(OperatingSystems.Windows, WindowsVersions.Win10)] public async Task ListenOptionsProtolsCanBeSetAfterUseHttps(HttpProtocols httpProtocols) { diff --git a/src/Servers/Kestrel/test/InMemory.FunctionalTests/ResponseTests.cs b/src/Servers/Kestrel/test/InMemory.FunctionalTests/ResponseTests.cs index d2e75cdc16..a385d10bd0 100644 --- a/src/Servers/Kestrel/test/InMemory.FunctionalTests/ResponseTests.cs +++ b/src/Servers/Kestrel/test/InMemory.FunctionalTests/ResponseTests.cs @@ -2554,7 +2554,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.InMemory.FunctionalTests } [Fact] - [QuarantinedTest] + [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/24164")] public async Task AppAbortViaIConnectionLifetimeFeatureIsLogged() { var testContext = new TestServiceContext(LoggerFactory); diff --git a/src/Servers/Kestrel/test/Interop.FunctionalTests/HttpClientHttp2InteropTests.cs b/src/Servers/Kestrel/test/Interop.FunctionalTests/HttpClientHttp2InteropTests.cs index 0e2773406f..2283a00208 100644 --- a/src/Servers/Kestrel/test/Interop.FunctionalTests/HttpClientHttp2InteropTests.cs +++ b/src/Servers/Kestrel/test/Interop.FunctionalTests/HttpClientHttp2InteropTests.cs @@ -1495,7 +1495,6 @@ namespace Interop.FunctionalTests [Theory] [MemberData(nameof(SupportedSchemes))] - [QuarantinedTest] public async Task ConnectionWindowSize_Server(string scheme) { var requestFinished = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); diff --git a/src/Servers/Kestrel/test/Interop.FunctionalTests/Utilities.cs b/src/Servers/Kestrel/test/Interop.FunctionalTests/Utilities.cs index d2e2ce85a4..21b18f8aee 100644 --- a/src/Servers/Kestrel/test/Interop.FunctionalTests/Utilities.cs +++ b/src/Servers/Kestrel/test/Interop.FunctionalTests/Utilities.cs @@ -12,9 +12,7 @@ namespace Interop.FunctionalTests return // "Missing Windows ALPN support: https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation#Support" or missing compatible ciphers (Win8.1) new MinimumOSVersionAttribute(OperatingSystems.Windows, WindowsVersions.Win10).IsMet // "Missing SslStream ALPN support: https://github.com/dotnet/corefx/issues/30492" - && new OSSkipConditionAttribute(OperatingSystems.MacOSX).IsMet - // Debian 8 uses OpenSSL 1.0.1 which does not support ALPN - && new SkipOnHelixAttribute("https://github.com/dotnet/aspnetcore/issues/10428") { Queues = "Debian.8.Amd64;Debian.8.Amd64.Open" }.IsMet; + && new OSSkipConditionAttribute(OperatingSystems.MacOSX).IsMet; } } } diff --git a/src/Shared/CertificateGeneration/CertificateManager.cs b/src/Shared/CertificateGeneration/CertificateManager.cs index 1f2820b9be..cc63219bd9 100644 --- a/src/Shared/CertificateGeneration/CertificateManager.cs +++ b/src/Shared/CertificateGeneration/CertificateManager.cs @@ -853,13 +853,13 @@ namespace Microsoft.AspNetCore.Certificates.Generation [Event(50, Level = EventLevel.Verbose)] public void WindowsRemoveCertificateFromRootStoreNotFound() => WriteEvent(50, "The certificate was not trusted."); - [Event(50, Level = EventLevel.Verbose)] + [Event(51, Level = EventLevel.Verbose)] public void CorrectCertificateStateStart(string certificate) => WriteEvent(51, $"Correcting the the certificate state for '{certificate}'"); - [Event(51, Level = EventLevel.Verbose)] + [Event(52, Level = EventLevel.Verbose)] public void CorrectCertificateStateEnd() => WriteEvent(52, "Finished correcting the certificate state"); - [Event(52, Level = EventLevel.Error)] + [Event(53, Level = EventLevel.Error)] public void CorrectCertificateStateError(string error) => WriteEvent(53, $"An error has ocurred while correcting the certificate state: {error}."); [Event(54, Level = EventLevel.Verbose)] diff --git a/src/Shared/ChunkingCookieManager/ChunkingCookieManager.cs b/src/Shared/ChunkingCookieManager/ChunkingCookieManager.cs index 098e3d6690..395e23d5cc 100644 --- a/src/Shared/ChunkingCookieManager/ChunkingCookieManager.cs +++ b/src/Shared/ChunkingCookieManager/ChunkingCookieManager.cs @@ -1,6 +1,8 @@ // 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. +#nullable enable + using System; using System.Collections.Generic; using System.Globalization; @@ -61,7 +63,7 @@ namespace Microsoft.AspNetCore.Internal public bool ThrowForPartialCookies { get; set; } // Parse the "chunks-XX" to determine how many chunks there should be. - private static int ParseChunksCount(string value) + private static int ParseChunksCount(string? value) { if (value != null && value.StartsWith(ChunkCountPrefix, StringComparison.Ordinal)) { @@ -82,7 +84,7 @@ namespace Microsoft.AspNetCore.Internal /// /// /// The reassembled cookie, if any, or null. - public string GetRequestCookie(HttpContext context, string key) + public string? GetRequestCookie(HttpContext context, string key) { if (context == null) { @@ -144,7 +146,7 @@ namespace Microsoft.AspNetCore.Internal /// /// /// - public void AppendResponseCookie(HttpContext context, string key, string value, CookieOptions options) + public void AppendResponseCookie(HttpContext context, string key, string? value, CookieOptions options) { if (context == null) { diff --git a/src/Shared/CodeAnalysis/DynamicallyAccessedMemberTypes.cs b/src/Shared/CodeAnalysis/DynamicallyAccessedMemberTypes.cs new file mode 100644 index 0000000000..2edc474a0b --- /dev/null +++ b/src/Shared/CodeAnalysis/DynamicallyAccessedMemberTypes.cs @@ -0,0 +1,92 @@ +#if !NET5_0 +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace System.Diagnostics.CodeAnalysis +{ + /// + /// Specifies the types of members that are dynamically accessed. + /// + /// This enumeration has a attribute that allows a + /// bitwise combination of its member values. + /// + [Flags] + internal enum DynamicallyAccessedMemberTypes + { + /// + /// Specifies no members. + /// + None = 0, + + /// + /// Specifies the default, parameterless public constructor. + /// + PublicParameterlessConstructor = 0x0001, + + /// + /// Specifies all public constructors. + /// + PublicConstructors = 0x0002 | PublicParameterlessConstructor, + + /// + /// Specifies all non-public constructors. + /// + NonPublicConstructors = 0x0004, + + /// + /// Specifies all public methods. + /// + PublicMethods = 0x0008, + + /// + /// Specifies all non-public methods. + /// + NonPublicMethods = 0x0010, + + /// + /// Specifies all public fields. + /// + PublicFields = 0x0020, + + /// + /// Specifies all non-public fields. + /// + NonPublicFields = 0x0040, + + /// + /// Specifies all public nested types. + /// + PublicNestedTypes = 0x0080, + + /// + /// Specifies all non-public nested types. + /// + NonPublicNestedTypes = 0x0100, + + /// + /// Specifies all public properties. + /// + PublicProperties = 0x0200, + + /// + /// Specifies all non-public properties. + /// + NonPublicProperties = 0x0400, + + /// + /// Specifies all public events. + /// + PublicEvents = 0x0800, + + /// + /// Specifies all non-public events. + /// + NonPublicEvents = 0x1000, + + /// + /// Specifies all members. + /// + All = ~None + } +} +#endif \ No newline at end of file diff --git a/src/Shared/CodeAnalysis/DynamicallyAccessedMembersAttribute.cs b/src/Shared/CodeAnalysis/DynamicallyAccessedMembersAttribute.cs new file mode 100644 index 0000000000..c0ae1c6862 --- /dev/null +++ b/src/Shared/CodeAnalysis/DynamicallyAccessedMembersAttribute.cs @@ -0,0 +1,48 @@ +#if !NET5_0 +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace System.Diagnostics.CodeAnalysis +{ + /// + /// Indicates that certain members on a specified are accessed dynamically, + /// for example through . + /// + /// + /// This allows tools to understand which members are being accessed during the execution + /// of a program. + /// + /// This attribute is valid on members whose type is or . + /// + /// When this attribute is applied to a location of type , the assumption is + /// that the string represents a fully qualified type name. + /// + /// If the attribute is applied to a method it's treated as a special case and it implies + /// the attribute should be applied to the "this" parameter of the method. As such the attribute + /// should only be used on instance methods of types assignable to System.Type (or string, but no methods + /// will use it there). + /// + [AttributeUsage( + AttributeTargets.Field | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter | + AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.Method, + Inherited = false)] + internal sealed class DynamicallyAccessedMembersAttribute : Attribute + { + /// + /// Initializes a new instance of the class + /// with the specified member types. + /// + /// The types of members dynamically accessed. + public DynamicallyAccessedMembersAttribute(DynamicallyAccessedMemberTypes memberTypes) + { + MemberTypes = memberTypes; + } + + /// + /// Gets the which specifies the type + /// of members dynamically accessed. + /// + public DynamicallyAccessedMemberTypes MemberTypes { get; } + } +} +#endif \ No newline at end of file diff --git a/src/Shared/Components/ServerComponentSerializationSettings.cs b/src/Shared/Components/ServerComponentSerializationSettings.cs index 7aabb013b5..db061bf52a 100644 --- a/src/Shared/Components/ServerComponentSerializationSettings.cs +++ b/src/Shared/Components/ServerComponentSerializationSettings.cs @@ -19,7 +19,7 @@ namespace Microsoft.AspNetCore.Components }; // This setting is not configurable, but realistically we don't expect an app to take more than 30 seconds from when - // it got rendrered to when the circuit got started, and having an expiration on the serialized server-components helps + // it got rendered to when the circuit got started, and having an expiration on the serialized server-components helps // prevent old payloads from being replayed. public static readonly TimeSpan DataExpiration = TimeSpan.FromMinutes(5); } diff --git a/src/Shared/Process/ProcessEx.cs b/src/Shared/Process/ProcessEx.cs index c4f0002d5c..ad7d06b1ed 100644 --- a/src/Shared/Process/ProcessEx.cs +++ b/src/Shared/Process/ProcessEx.cs @@ -49,10 +49,15 @@ namespace Microsoft.AspNetCore.Internal _exited = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); + // We greedily create a timeout exception message even though a timeout is unlikely to happen for two reasons: + // 1. To make it less likely for Process getters to throw exceptions like "System.InvalidOperationException: Process has exited, ..." + // 2. To ensure if/when exceptions are thrown from Process getters, these exceptions can easily be observed. + var timeoutExMessage = $"Process proc {proc.ProcessName} {proc.StartInfo.Arguments} timed out after {DefaultProcessTimeout}."; + _processTimeoutCts = new CancellationTokenSource(timeout); _processTimeoutCts.Token.Register(() => { - _exited.TrySetException(new TimeoutException($"Process proc {proc.ProcessName} {proc.StartInfo.Arguments} timed out after {DefaultProcessTimeout}.")); + _exited.TrySetException(new TimeoutException(timeoutExMessage)); }); } diff --git a/src/Shared/RazorShared/JsonReaderExtensions.cs b/src/Shared/RazorShared/JsonReaderExtensions.cs new file mode 100644 index 0000000000..2cf37b12d5 --- /dev/null +++ b/src/Shared/RazorShared/JsonReaderExtensions.cs @@ -0,0 +1,58 @@ +// 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.Diagnostics; +using Newtonsoft.Json; + +namespace Microsoft.CodeAnalysis.Razor.Serialization +{ + internal static class JsonReaderExtensions + { + public static bool ReadTokenAndAdvance(this JsonReader reader, JsonToken expectedTokenType, out object value) + { + value = reader.Value; + return reader.TokenType == expectedTokenType && reader.Read(); + } + + public static void ReadProperties(this JsonReader reader, Action onProperty) + { + while (reader.Read()) + { + switch (reader.TokenType) + { + case JsonToken.PropertyName: + var propertyName = reader.Value.ToString(); + onProperty(propertyName); + break; + case JsonToken.EndObject: + return; + } + } + } + + public static string ReadNextStringProperty(this JsonReader reader, string propertyName) + { + while (reader.Read()) + { + switch (reader.TokenType) + { + case JsonToken.PropertyName: + Debug.Assert(reader.Value.ToString() == propertyName); + if (reader.Read()) + { + var value = (string)reader.Value; + return value; + } + else + { + return null; + } + } + } + + throw new JsonSerializationException($"Could not find string property '{propertyName}'."); + } + } +} diff --git a/src/Shared/RazorShared/RazorDiagnosticJsonConverter.cs b/src/Shared/RazorShared/RazorDiagnosticJsonConverter.cs index 4bfba23eed..3d34a8e344 100644 --- a/src/Shared/RazorShared/RazorDiagnosticJsonConverter.cs +++ b/src/Shared/RazorShared/RazorDiagnosticJsonConverter.cs @@ -7,7 +7,7 @@ using Microsoft.AspNetCore.Razor.Language; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -namespace Microsoft.VisualStudio.LanguageServices.Razor.Serialization +namespace Microsoft.CodeAnalysis.Razor.Serialization { internal class RazorDiagnosticJsonConverter : JsonConverter { diff --git a/src/Shared/RazorShared/TagHelperDescriptorJsonConverter.cs b/src/Shared/RazorShared/TagHelperDescriptorJsonConverter.cs index 3e610c08c7..85763bf559 100644 --- a/src/Shared/RazorShared/TagHelperDescriptorJsonConverter.cs +++ b/src/Shared/RazorShared/TagHelperDescriptorJsonConverter.cs @@ -5,7 +5,6 @@ using System; using System.Collections.Generic; using Microsoft.AspNetCore.Razor.Language; using Newtonsoft.Json; -using Newtonsoft.Json.Linq; namespace Microsoft.CodeAnalysis.Razor.Serialization { @@ -25,56 +24,54 @@ namespace Microsoft.CodeAnalysis.Razor.Serialization return null; } - var descriptor = JObject.Load(reader); - var descriptorKind = descriptor[nameof(TagHelperDescriptor.Kind)].Value(); - var typeName = descriptor[nameof(TagHelperDescriptor.Name)].Value(); - var assemblyName = descriptor[nameof(TagHelperDescriptor.AssemblyName)].Value(); - var tagMatchingRules = descriptor[nameof(TagHelperDescriptor.TagMatchingRules)].Value(); - var boundAttributes = descriptor[nameof(TagHelperDescriptor.BoundAttributes)].Value(); - var childTags = descriptor[nameof(TagHelperDescriptor.AllowedChildTags)].Value(); - var documentation = descriptor[nameof(TagHelperDescriptor.Documentation)].Value(); - var tagOutputHint = descriptor[nameof(TagHelperDescriptor.TagOutputHint)].Value(); - var caseSensitive = descriptor[nameof(TagHelperDescriptor.CaseSensitive)].Value(); - var diagnostics = descriptor[nameof(TagHelperDescriptor.Diagnostics)].Value(); - var metadata = descriptor[nameof(TagHelperDescriptor.Metadata)].Value(); - + // Required tokens (order matters) + var descriptorKind = reader.ReadNextStringProperty(nameof(TagHelperDescriptor.Kind)); + var typeName = reader.ReadNextStringProperty(nameof(TagHelperDescriptor.Name)); + var assemblyName = reader.ReadNextStringProperty(nameof(TagHelperDescriptor.AssemblyName)); var builder = TagHelperDescriptorBuilder.Create(descriptorKind, typeName, assemblyName); - builder.Documentation = documentation; - builder.TagOutputHint = tagOutputHint; - builder.CaseSensitive = caseSensitive; - - foreach (var tagMatchingRule in tagMatchingRules) + reader.ReadProperties(propertyName => { - var rule = tagMatchingRule.Value(); - builder.TagMatchingRule(b => ReadTagMatchingRule(b, rule, serializer)); - } - - foreach (var boundAttribute in boundAttributes) - { - var attribute = boundAttribute.Value(); - builder.BindAttribute(b => ReadBoundAttribute(b, attribute, serializer)); - } - - foreach (var childTag in childTags) - { - var tag = childTag.Value(); - builder.AllowChildTag(childTagBuilder => ReadAllowedChildTag(childTagBuilder, tag, serializer)); - } - - foreach (var diagnostic in diagnostics) - { - var diagnosticReader = diagnostic.CreateReader(); - var diagnosticObject = serializer.Deserialize(diagnosticReader); - builder.Diagnostics.Add(diagnosticObject); - } - - var metadataReader = metadata.CreateReader(); - var metadataValue = serializer.Deserialize>(metadataReader); - foreach (var item in metadataValue) - { - builder.Metadata[item.Key] = item.Value; - } + switch (propertyName) + { + case nameof(TagHelperDescriptor.Documentation): + if (reader.Read()) + { + var documentation = (string)reader.Value; + builder.Documentation = documentation; + } + break; + case nameof(TagHelperDescriptor.TagOutputHint): + if (reader.Read()) + { + var tagOutputHint = (string)reader.Value; + builder.TagOutputHint = tagOutputHint; + } + break; + case nameof(TagHelperDescriptor.CaseSensitive): + if (reader.Read()) + { + var caseSensitive = (bool)reader.Value; + builder.CaseSensitive = caseSensitive; + } + break; + case nameof(TagHelperDescriptor.TagMatchingRules): + ReadTagMatchingRules(reader, builder); + break; + case nameof(TagHelperDescriptor.BoundAttributes): + ReadBoundAttributes(reader, builder); + break; + case nameof(TagHelperDescriptor.AllowedChildTags): + ReadAllowedChildTags(reader, builder); + break; + case nameof(TagHelperDescriptor.Diagnostics): + ReadDiagnostics(reader, builder.Diagnostics); + break; + case nameof(TagHelperDescriptor.Metadata): + ReadMetadata(reader, builder.Metadata); + break; + } + }); return builder.Build(); } @@ -94,11 +91,17 @@ namespace Microsoft.CodeAnalysis.Razor.Serialization writer.WritePropertyName(nameof(TagHelperDescriptor.AssemblyName)); writer.WriteValue(tagHelper.AssemblyName); - writer.WritePropertyName(nameof(TagHelperDescriptor.Documentation)); - writer.WriteValue(tagHelper.Documentation); + if (tagHelper.Documentation != null) + { + writer.WritePropertyName(nameof(TagHelperDescriptor.Documentation)); + writer.WriteValue(tagHelper.Documentation); + } - writer.WritePropertyName(nameof(TagHelperDescriptor.TagOutputHint)); - writer.WriteValue(tagHelper.TagOutputHint); + if (tagHelper.TagOutputHint != null) + { + writer.WritePropertyName(nameof(TagHelperDescriptor.TagOutputHint)); + writer.WriteValue(tagHelper.TagOutputHint); + } writer.WritePropertyName(nameof(TagHelperDescriptor.CaseSensitive)); writer.WriteValue(tagHelper.CaseSensitive); @@ -111,24 +114,33 @@ namespace Microsoft.CodeAnalysis.Razor.Serialization } writer.WriteEndArray(); - writer.WritePropertyName(nameof(TagHelperDescriptor.BoundAttributes)); - writer.WriteStartArray(); - foreach (var boundAttribute in tagHelper.BoundAttributes) + if (tagHelper.BoundAttributes != null && tagHelper.BoundAttributes.Count > 0) { - WriteBoundAttribute(writer, boundAttribute, serializer); + writer.WritePropertyName(nameof(TagHelperDescriptor.BoundAttributes)); + writer.WriteStartArray(); + foreach (var boundAttribute in tagHelper.BoundAttributes) + { + WriteBoundAttribute(writer, boundAttribute, serializer); + } + writer.WriteEndArray(); } - writer.WriteEndArray(); - writer.WritePropertyName(nameof(TagHelperDescriptor.AllowedChildTags)); - writer.WriteStartArray(); - foreach (var allowedChildTag in tagHelper.AllowedChildTags) + if (tagHelper.AllowedChildTags != null && tagHelper.AllowedChildTags.Count > 0) { - WriteAllowedChildTags(writer, allowedChildTag, serializer); + writer.WritePropertyName(nameof(TagHelperDescriptor.AllowedChildTags)); + writer.WriteStartArray(); + foreach (var allowedChildTag in tagHelper.AllowedChildTags) + { + WriteAllowedChildTags(writer, allowedChildTag, serializer); + } + writer.WriteEndArray(); } - writer.WriteEndArray(); - writer.WritePropertyName(nameof(TagHelperDescriptor.Diagnostics)); - serializer.Serialize(writer, tagHelper.Diagnostics); + if (tagHelper.Diagnostics != null && tagHelper.Diagnostics.Count > 0) + { + writer.WritePropertyName(nameof(TagHelperDescriptor.Diagnostics)); + serializer.Serialize(writer, tagHelper.Diagnostics); + } writer.WritePropertyName(nameof(TagHelperDescriptor.Metadata)); WriteMetadata(writer, tagHelper.Metadata); @@ -165,31 +177,49 @@ namespace Microsoft.CodeAnalysis.Razor.Serialization writer.WritePropertyName(nameof(BoundAttributeDescriptor.TypeName)); writer.WriteValue(boundAttribute.TypeName); - writer.WritePropertyName(nameof(BoundAttributeDescriptor.IsEnum)); - writer.WriteValue(boundAttribute.IsEnum); + if (boundAttribute.IsEnum) + { + writer.WritePropertyName(nameof(BoundAttributeDescriptor.IsEnum)); + writer.WriteValue(boundAttribute.IsEnum); + } - writer.WritePropertyName(nameof(BoundAttributeDescriptor.IndexerNamePrefix)); - writer.WriteValue(boundAttribute.IndexerNamePrefix); + if (boundAttribute.IndexerNamePrefix != null) + { + writer.WritePropertyName(nameof(BoundAttributeDescriptor.IndexerNamePrefix)); + writer.WriteValue(boundAttribute.IndexerNamePrefix); + } - writer.WritePropertyName(nameof(BoundAttributeDescriptor.IndexerTypeName)); - writer.WriteValue(boundAttribute.IndexerTypeName); + if (boundAttribute.IndexerTypeName != null) + { + writer.WritePropertyName(nameof(BoundAttributeDescriptor.IndexerTypeName)); + writer.WriteValue(boundAttribute.IndexerTypeName); + } - writer.WritePropertyName(nameof(BoundAttributeDescriptor.Documentation)); - writer.WriteValue(boundAttribute.Documentation); + if (boundAttribute.Documentation != null) + { + writer.WritePropertyName(nameof(BoundAttributeDescriptor.Documentation)); + writer.WriteValue(boundAttribute.Documentation); + } - writer.WritePropertyName(nameof(BoundAttributeDescriptor.Diagnostics)); - serializer.Serialize(writer, boundAttribute.Diagnostics); + if (boundAttribute.Diagnostics != null && boundAttribute.Diagnostics.Count > 0) + { + writer.WritePropertyName(nameof(BoundAttributeDescriptor.Diagnostics)); + serializer.Serialize(writer, boundAttribute.Diagnostics); + } writer.WritePropertyName(nameof(BoundAttributeDescriptor.Metadata)); WriteMetadata(writer, boundAttribute.Metadata); - writer.WritePropertyName(nameof(BoundAttributeDescriptor.BoundAttributeParameters)); - writer.WriteStartArray(); - foreach (var boundAttributeParameter in boundAttribute.BoundAttributeParameters) + if (boundAttribute.BoundAttributeParameters != null && boundAttribute.BoundAttributeParameters.Count > 0) { - WriteBoundAttributeParameter(writer, boundAttributeParameter, serializer); + writer.WritePropertyName(nameof(BoundAttributeDescriptor.BoundAttributeParameters)); + writer.WriteStartArray(); + foreach (var boundAttributeParameter in boundAttribute.BoundAttributeParameters) + { + WriteBoundAttributeParameter(writer, boundAttributeParameter, serializer); + } + writer.WriteEndArray(); } - writer.WriteEndArray(); writer.WriteEndObject(); } @@ -198,23 +228,29 @@ namespace Microsoft.CodeAnalysis.Razor.Serialization { writer.WriteStartObject(); - writer.WritePropertyName(nameof(BoundAttributeParameterDescriptor.Kind)); - writer.WriteValue(boundAttributeParameter.Kind); - writer.WritePropertyName(nameof(BoundAttributeParameterDescriptor.Name)); writer.WriteValue(boundAttributeParameter.Name); writer.WritePropertyName(nameof(BoundAttributeParameterDescriptor.TypeName)); writer.WriteValue(boundAttributeParameter.TypeName); - writer.WritePropertyName(nameof(BoundAttributeParameterDescriptor.IsEnum)); - writer.WriteValue(boundAttributeParameter.IsEnum); + if (boundAttributeParameter.IsEnum != default) + { + writer.WritePropertyName(nameof(BoundAttributeParameterDescriptor.IsEnum)); + writer.WriteValue(boundAttributeParameter.IsEnum); + } - writer.WritePropertyName(nameof(BoundAttributeParameterDescriptor.Documentation)); - writer.WriteValue(boundAttributeParameter.Documentation); + if (boundAttributeParameter.Documentation != null) + { + writer.WritePropertyName(nameof(BoundAttributeParameterDescriptor.Documentation)); + writer.WriteValue(boundAttributeParameter.Documentation); + } - writer.WritePropertyName(nameof(BoundAttributeParameterDescriptor.Diagnostics)); - serializer.Serialize(writer, boundAttributeParameter.Diagnostics); + if (boundAttributeParameter.Diagnostics != null && boundAttributeParameter.Diagnostics.Count > 0) + { + writer.WritePropertyName(nameof(BoundAttributeParameterDescriptor.Diagnostics)); + serializer.Serialize(writer, boundAttributeParameter.Diagnostics); + } writer.WritePropertyName(nameof(BoundAttributeParameterDescriptor.Metadata)); WriteMetadata(writer, boundAttributeParameter.Metadata); @@ -240,22 +276,34 @@ namespace Microsoft.CodeAnalysis.Razor.Serialization writer.WritePropertyName(nameof(TagMatchingRuleDescriptor.TagName)); writer.WriteValue(ruleDescriptor.TagName); - writer.WritePropertyName(nameof(TagMatchingRuleDescriptor.ParentTag)); - writer.WriteValue(ruleDescriptor.ParentTag); - - writer.WritePropertyName(nameof(TagMatchingRuleDescriptor.TagStructure)); - writer.WriteValue(ruleDescriptor.TagStructure); - - writer.WritePropertyName(nameof(TagMatchingRuleDescriptor.Attributes)); - writer.WriteStartArray(); - foreach (var requiredAttribute in ruleDescriptor.Attributes) + if (ruleDescriptor.ParentTag != null) { - WriteRequiredAttribute(writer, requiredAttribute, serializer); + writer.WritePropertyName(nameof(TagMatchingRuleDescriptor.ParentTag)); + writer.WriteValue(ruleDescriptor.ParentTag); } - writer.WriteEndArray(); - writer.WritePropertyName(nameof(TagMatchingRuleDescriptor.Diagnostics)); - serializer.Serialize(writer, ruleDescriptor.Diagnostics); + if (ruleDescriptor.TagStructure != default) + { + writer.WritePropertyName(nameof(TagMatchingRuleDescriptor.TagStructure)); + writer.WriteValue(ruleDescriptor.TagStructure); + } + + if (ruleDescriptor.Attributes != null && ruleDescriptor.Attributes.Count > 0) + { + writer.WritePropertyName(nameof(TagMatchingRuleDescriptor.Attributes)); + writer.WriteStartArray(); + foreach (var requiredAttribute in ruleDescriptor.Attributes) + { + WriteRequiredAttribute(writer, requiredAttribute, serializer); + } + writer.WriteEndArray(); + } + + if (ruleDescriptor.Diagnostics != null && ruleDescriptor.Diagnostics.Count > 0) + { + writer.WritePropertyName(nameof(TagMatchingRuleDescriptor.Diagnostics)); + serializer.Serialize(writer, ruleDescriptor.Diagnostics); + } writer.WriteEndObject(); } @@ -267,176 +315,538 @@ namespace Microsoft.CodeAnalysis.Razor.Serialization writer.WritePropertyName(nameof(RequiredAttributeDescriptor.Name)); writer.WriteValue(requiredAttribute.Name); - writer.WritePropertyName(nameof(RequiredAttributeDescriptor.NameComparison)); - writer.WriteValue(requiredAttribute.NameComparison); + if (requiredAttribute.NameComparison != default) + { + writer.WritePropertyName(nameof(RequiredAttributeDescriptor.NameComparison)); + writer.WriteValue(requiredAttribute.NameComparison); + } - writer.WritePropertyName(nameof(RequiredAttributeDescriptor.Value)); - writer.WriteValue(requiredAttribute.Value); + if (requiredAttribute.Value != null) + { + writer.WritePropertyName(nameof(RequiredAttributeDescriptor.Value)); + writer.WriteValue(requiredAttribute.Value); + } - writer.WritePropertyName(nameof(RequiredAttributeDescriptor.ValueComparison)); - writer.WriteValue(requiredAttribute.ValueComparison); + if (requiredAttribute.ValueComparison != default) + { + writer.WritePropertyName(nameof(RequiredAttributeDescriptor.ValueComparison)); + writer.WriteValue(requiredAttribute.ValueComparison); + } - writer.WritePropertyName(nameof(RequiredAttributeDescriptor.Diagnostics)); - serializer.Serialize(writer, requiredAttribute.Diagnostics); + if (requiredAttribute.Diagnostics != null && requiredAttribute.Diagnostics.Count > 0) + { + writer.WritePropertyName(nameof(RequiredAttributeDescriptor.Diagnostics)); + serializer.Serialize(writer, requiredAttribute.Diagnostics); + } - writer.WritePropertyName(nameof(RequiredAttributeDescriptor.Metadata)); - WriteMetadata(writer, requiredAttribute.Metadata); + if (requiredAttribute.Metadata != null && requiredAttribute.Metadata.Count > 0) + { + writer.WritePropertyName(nameof(RequiredAttributeDescriptor.Metadata)); + WriteMetadata(writer, requiredAttribute.Metadata); + } writer.WriteEndObject(); } - private static void ReadTagMatchingRule(TagMatchingRuleDescriptorBuilder builder, JObject rule, JsonSerializer serializer) + private static void ReadBoundAttributes(JsonReader reader, TagHelperDescriptorBuilder builder) { - var tagName = rule[nameof(TagMatchingRuleDescriptor.TagName)].Value(); - var attributes = rule[nameof(TagMatchingRuleDescriptor.Attributes)].Value(); - var parentTag = rule[nameof(TagMatchingRuleDescriptor.ParentTag)].Value(); - var tagStructure = rule[nameof(TagMatchingRuleDescriptor.TagStructure)].Value(); - var diagnostics = rule[nameof(TagMatchingRuleDescriptor.Diagnostics)].Value(); - - builder.TagName = tagName; - builder.ParentTag = parentTag; - builder.TagStructure = (TagStructure)tagStructure; - - foreach (var attribute in attributes) + if (!reader.Read()) { - var attibuteValue = attribute.Value(); - builder.Attribute(b => ReadRequiredAttribute(b, attibuteValue, serializer)); + return; } - foreach (var diagnostic in diagnostics) + if (reader.TokenType != JsonToken.StartArray) { - var diagnosticReader = diagnostic.CreateReader(); - var diagnosticObject = serializer.Deserialize(diagnosticReader); - builder.Diagnostics.Add(diagnosticObject); + return; } + + do + { + ReadBoundAttribute(reader, builder); + } while (reader.TokenType != JsonToken.EndArray); } - private static void ReadRequiredAttribute(RequiredAttributeDescriptorBuilder builder, JObject attribute, JsonSerializer serializer) + private static void ReadBoundAttribute(JsonReader reader, TagHelperDescriptorBuilder builder) { - var name = attribute[nameof(RequiredAttributeDescriptor.Name)].Value(); - var nameComparison = attribute[nameof(RequiredAttributeDescriptor.NameComparison)].Value(); - var value = attribute[nameof(RequiredAttributeDescriptor.Value)].Value(); - var valueComparison = attribute[nameof(RequiredAttributeDescriptor.ValueComparison)].Value(); - var diagnostics = attribute[nameof(RequiredAttributeDescriptor.Diagnostics)].Value(); - var metadata = attribute[nameof(RequiredAttributeDescriptor.Metadata)].Value(); - - builder.Name = name; - builder.NameComparisonMode = (RequiredAttributeDescriptor.NameComparisonMode)nameComparison; - builder.Value = value; - builder.ValueComparisonMode = (RequiredAttributeDescriptor.ValueComparisonMode)valueComparison; - - foreach (var diagnostic in diagnostics) + if (!reader.Read()) { - var diagnosticReader = diagnostic.CreateReader(); - var diagnosticObject = serializer.Deserialize(diagnosticReader); - builder.Diagnostics.Add(diagnosticObject); + return; } - var metadataReader = metadata.CreateReader(); - var metadataValue = serializer.Deserialize>(metadataReader); - foreach (var item in metadataValue) + if (reader.TokenType != JsonToken.StartObject) { - builder.Metadata[item.Key] = item.Value; + return; } + + builder.BindAttribute(attribute => + { + reader.ReadProperties(propertyName => + { + switch (propertyName) + { + case nameof(BoundAttributeDescriptor.Name): + if (reader.Read()) + { + var name = (string)reader.Value; + attribute.Name = name; + } + break; + case nameof(BoundAttributeDescriptor.TypeName): + if (reader.Read()) + { + var typeName = (string)reader.Value; + attribute.TypeName = typeName; + } + break; + case nameof(BoundAttributeDescriptor.Documentation): + if (reader.Read()) + { + var documentation = (string)reader.Value; + attribute.Documentation = documentation; + } + break; + case nameof(BoundAttributeDescriptor.IndexerNamePrefix): + if (reader.Read()) + { + var indexerNamePrefix = (string)reader.Value; + if (indexerNamePrefix != null) + { + attribute.IsDictionary = true; + attribute.IndexerAttributeNamePrefix = indexerNamePrefix; + } + } + break; + case nameof(BoundAttributeDescriptor.IndexerTypeName): + if (reader.Read()) + { + var indexerTypeName = (string)reader.Value; + if (indexerTypeName != null) + { + attribute.IsDictionary = true; + attribute.IndexerValueTypeName = indexerTypeName; + } + } + break; + case nameof(BoundAttributeDescriptor.IsEnum): + if (reader.Read()) + { + var isEnum = (bool)reader.Value; + attribute.IsEnum = isEnum; + } + break; + case nameof(BoundAttributeDescriptor.BoundAttributeParameters): + ReadBoundAttributeParameters(reader, attribute); + break; + case nameof(BoundAttributeDescriptor.Diagnostics): + ReadDiagnostics(reader, attribute.Diagnostics); + break; + case nameof(BoundAttributeDescriptor.Metadata): + ReadMetadata(reader, attribute.Metadata); + break; + } + }); + }); } - private static void ReadAllowedChildTag(AllowedChildTagDescriptorBuilder builder, JObject childTag, JsonSerializer serializer) + private static void ReadBoundAttributeParameters(JsonReader reader, BoundAttributeDescriptorBuilder builder) { - var name = childTag[nameof(AllowedChildTagDescriptor.Name)].Value(); - var displayName = childTag[nameof(AllowedChildTagDescriptor.DisplayName)].Value(); - var diagnostics = childTag[nameof(AllowedChildTagDescriptor.Diagnostics)].Value(); - - builder.Name = name; - builder.DisplayName = displayName; - - foreach (var diagnostic in diagnostics) + if (!reader.Read()) { - var diagnosticReader = diagnostic.CreateReader(); - var diagnosticObject = serializer.Deserialize(diagnosticReader); - builder.Diagnostics.Add(diagnosticObject); + return; } + + if (reader.TokenType != JsonToken.StartArray) + { + return; + } + + do + { + ReadBoundAttributeParameter(reader, builder); + } while (reader.TokenType != JsonToken.EndArray); } - private static void ReadBoundAttribute(BoundAttributeDescriptorBuilder builder, JObject attribute, JsonSerializer serializer) + private static void ReadBoundAttributeParameter(JsonReader reader, BoundAttributeDescriptorBuilder builder) { - var descriptorKind = attribute[nameof(BoundAttributeDescriptor.Kind)].Value(); - var name = attribute[nameof(BoundAttributeDescriptor.Name)].Value(); - var typeName = attribute[nameof(BoundAttributeDescriptor.TypeName)].Value(); - var isEnum = attribute[nameof(BoundAttributeDescriptor.IsEnum)].Value(); - var indexerNamePrefix = attribute[nameof(BoundAttributeDescriptor.IndexerNamePrefix)].Value(); - var indexerTypeName = attribute[nameof(BoundAttributeDescriptor.IndexerTypeName)].Value(); - var documentation = attribute[nameof(BoundAttributeDescriptor.Documentation)].Value(); - var diagnostics = attribute[nameof(BoundAttributeDescriptor.Diagnostics)].Value(); - var metadata = attribute[nameof(BoundAttributeDescriptor.Metadata)].Value(); - var boundAttributeParameters = attribute[nameof(BoundAttributeDescriptor.BoundAttributeParameters)].Value(); - - builder.Name = name; - builder.TypeName = typeName; - builder.Documentation = documentation; - - if (indexerNamePrefix != null) + if (!reader.Read()) { - builder.AsDictionary(indexerNamePrefix, indexerTypeName); + return; } - if (isEnum) + if (reader.TokenType != JsonToken.StartObject) { - builder.IsEnum = true; + return; } - foreach (var diagnostic in diagnostics) + builder.BindAttributeParameter(parameter => { - var diagnosticReader = diagnostic.CreateReader(); - var diagnosticObject = serializer.Deserialize(diagnosticReader); - builder.Diagnostics.Add(diagnosticObject); - } - - var metadataReader = metadata.CreateReader(); - var metadataValue = serializer.Deserialize>(metadataReader); - foreach (var item in metadataValue) - { - builder.Metadata[item.Key] = item.Value; - } - - foreach (var boundAttributeParameter in boundAttributeParameters) - { - var parameter = boundAttributeParameter.Value(); - builder.BindAttributeParameter(b => ReadBoundAttributeParameter(b, parameter, serializer)); - } + reader.ReadProperties(propertyName => + { + switch (propertyName) + { + case nameof(BoundAttributeParameterDescriptor.Name): + if (reader.Read()) + { + var name = (string)reader.Value; + parameter.Name = name; + } + break; + case nameof(BoundAttributeParameterDescriptor.TypeName): + if (reader.Read()) + { + var typeName = (string)reader.Value; + parameter.TypeName = typeName; + } + break; + case nameof(BoundAttributeParameterDescriptor.IsEnum): + if (reader.Read()) + { + var isEnum = (bool)reader.Value; + parameter.IsEnum = isEnum; + } + break; + case nameof(BoundAttributeParameterDescriptor.Documentation): + if (reader.Read()) + { + var documentation = (string)reader.Value; + parameter.Documentation = documentation; + } + break; + case nameof(BoundAttributeParameterDescriptor.Metadata): + ReadMetadata(reader, parameter.Metadata); + break; + case nameof(BoundAttributeParameterDescriptor.Diagnostics): + ReadDiagnostics(reader, parameter.Diagnostics); + break; + } + }); + }); } - private static void ReadBoundAttributeParameter(BoundAttributeParameterDescriptorBuilder builder, JObject parameter, JsonSerializer serializer) + private static void ReadTagMatchingRules(JsonReader reader, TagHelperDescriptorBuilder builder) { - var descriptorKind = parameter[nameof(BoundAttributeParameterDescriptor.Kind)].Value(); - var name = parameter[nameof(BoundAttributeParameterDescriptor.Name)].Value(); - var typeName = parameter[nameof(BoundAttributeParameterDescriptor.TypeName)].Value(); - var isEnum = parameter[nameof(BoundAttributeParameterDescriptor.IsEnum)].Value(); - var documentation = parameter[nameof(BoundAttributeParameterDescriptor.Documentation)].Value(); - var diagnostics = parameter[nameof(BoundAttributeParameterDescriptor.Diagnostics)].Value(); - var metadata = parameter[nameof(BoundAttributeParameterDescriptor.Metadata)].Value(); - - builder.Name = name; - builder.TypeName = typeName; - builder.Documentation = documentation; - - if (isEnum) + if (!reader.Read()) { - builder.IsEnum = true; + return; } - foreach (var diagnostic in diagnostics) + if (reader.TokenType != JsonToken.StartArray) { - var diagnosticReader = diagnostic.CreateReader(); - var diagnosticObject = serializer.Deserialize(diagnosticReader); - builder.Diagnostics.Add(diagnosticObject); + return; } - var metadataReader = metadata.CreateReader(); - var metadataValue = serializer.Deserialize>(metadataReader); - foreach (var item in metadataValue) + do { - builder.Metadata[item.Key] = item.Value; + ReadTagMatchingRule(reader, builder); + } while (reader.TokenType != JsonToken.EndArray); + } + + private static void ReadTagMatchingRule(JsonReader reader, TagHelperDescriptorBuilder builder) + { + if (!reader.Read()) + { + return; } + + if (reader.TokenType != JsonToken.StartObject) + { + return; + } + + builder.TagMatchingRule(rule => + { + reader.ReadProperties(propertyName => + { + switch (propertyName) + { + case nameof(TagMatchingRuleDescriptor.TagName): + if (reader.Read()) + { + var tagName = (string)reader.Value; + rule.TagName = tagName; + } + break; + case nameof(TagMatchingRuleDescriptor.ParentTag): + if (reader.Read()) + { + var parentTag = (string)reader.Value; + rule.ParentTag = parentTag; + } + break; + case nameof(TagMatchingRuleDescriptor.TagStructure): + rule.TagStructure = (TagStructure)reader.ReadAsInt32(); + break; + case nameof(TagMatchingRuleDescriptor.Attributes): + ReadRequiredAttributeValues(reader, rule); + break; + case nameof(TagMatchingRuleDescriptor.Diagnostics): + ReadDiagnostics(reader, rule.Diagnostics); + break; + } + }); + }); + } + + private static void ReadRequiredAttributeValues(JsonReader reader, TagMatchingRuleDescriptorBuilder builder) + { + if (!reader.Read()) + { + return; + } + + if (reader.TokenType != JsonToken.StartArray) + { + return; + } + + do + { + ReadRequiredAttribute(reader, builder); + } while (reader.TokenType != JsonToken.EndArray); + } + + private static void ReadRequiredAttribute(JsonReader reader, TagMatchingRuleDescriptorBuilder builder) + { + if (!reader.Read()) + { + return; + } + + if (reader.TokenType != JsonToken.StartObject) + { + return; + } + + builder.Attribute(attribute => + { + reader.ReadProperties(propertyName => + { + switch (propertyName) + { + case nameof(RequiredAttributeDescriptor.Name): + if (reader.Read()) + { + var name = (string)reader.Value; + attribute.Name = name; + } + break; + case nameof(RequiredAttributeDescriptor.NameComparison): + var nameComparison = (RequiredAttributeDescriptor.NameComparisonMode)reader.ReadAsInt32(); + attribute.NameComparisonMode = nameComparison; + break; + case nameof(RequiredAttributeDescriptor.Value): + if (reader.Read()) + { + var value = (string)reader.Value; + attribute.Value = value; + } + break; + case nameof(RequiredAttributeDescriptor.ValueComparison): + var valueComparison = (RequiredAttributeDescriptor.ValueComparisonMode)reader.ReadAsInt32(); + attribute.ValueComparisonMode = valueComparison; + break; + case nameof(RequiredAttributeDescriptor.Diagnostics): + ReadDiagnostics(reader, attribute.Diagnostics); + break; + case nameof(RequiredAttributeDescriptor.Metadata): + ReadMetadata(reader, attribute.Metadata); + break; + } + }); + }); + } + + private static void ReadAllowedChildTags(JsonReader reader, TagHelperDescriptorBuilder builder) + { + if (!reader.Read()) + { + return; + } + + if (reader.TokenType != JsonToken.StartArray) + { + return; + } + + do + { + ReadAllowedChildTag(reader, builder); + } while (reader.TokenType != JsonToken.EndArray); + } + + private static void ReadAllowedChildTag(JsonReader reader, TagHelperDescriptorBuilder builder) + { + if (!reader.Read()) + { + return; + } + + if (reader.TokenType != JsonToken.StartObject) + { + return; + } + + builder.AllowChildTag(childTag => + { + reader.ReadProperties(propertyName => + { + switch (propertyName) + { + case nameof(AllowedChildTagDescriptor.Name): + if (reader.Read()) + { + var name = (string)reader.Value; + childTag.Name = name; + } + break; + case nameof(AllowedChildTagDescriptor.DisplayName): + if (reader.Read()) + { + var displayName = (string)reader.Value; + childTag.DisplayName = displayName; + } + break; + case nameof(AllowedChildTagDescriptor.Diagnostics): + ReadDiagnostics(reader, childTag.Diagnostics); + break; + } + }); + }); + } + + private static void ReadMetadata(JsonReader reader, IDictionary metadata) + { + if (!reader.Read()) + { + return; + } + + if (reader.TokenType != JsonToken.StartObject) + { + return; + } + + reader.ReadProperties(propertyName => + { + if (reader.Read()) + { + var value = (string)reader.Value; + metadata[propertyName] = value; + } + }); + } + + private static void ReadDiagnostics(JsonReader reader, RazorDiagnosticCollection diagnostics) + { + if (!reader.Read()) + { + return; + } + + if (reader.TokenType != JsonToken.StartArray) + { + return; + } + + do + { + ReadDiagnostic(reader, diagnostics); + } while (reader.TokenType != JsonToken.EndArray); + } + + private static void ReadDiagnostic(JsonReader reader, RazorDiagnosticCollection diagnostics) + { + if (!reader.Read()) + { + return; + } + + if (reader.TokenType != JsonToken.StartObject) + { + return; + } + + string id = default; + int severity = default; + string message = default; + SourceSpan sourceSpan = default; + + reader.ReadProperties(propertyName => + { + switch (propertyName) + { + case nameof(RazorDiagnostic.Id): + if (reader.Read()) + { + id = (string)reader.Value; + } + break; + case nameof(RazorDiagnostic.Severity): + severity = reader.ReadAsInt32().Value; + break; + case "Message": + if (reader.Read()) + { + message = (string)reader.Value; + } + break; + case nameof(RazorDiagnostic.Span): + sourceSpan = ReadSourceSpan(reader); + break; + } + }); + + var descriptor = new RazorDiagnosticDescriptor(id, () => message, (RazorDiagnosticSeverity)severity); + + var diagnostic = RazorDiagnostic.Create(descriptor, sourceSpan); + diagnostics.Add(diagnostic); + } + + private static SourceSpan ReadSourceSpan(JsonReader reader) + { + if (!reader.Read()) + { + return SourceSpan.Undefined; + } + + if (reader.TokenType != JsonToken.StartObject) + { + return SourceSpan.Undefined; + } + + string filePath = default; + int absoluteIndex = default; + int lineIndex = default; + int characterIndex = default; + int length = default; + + reader.ReadProperties(propertyName => + { + switch (propertyName) + { + case nameof(SourceSpan.FilePath): + if (reader.Read()) + { + filePath = (string)reader.Value; + } + break; + case nameof(SourceSpan.AbsoluteIndex): + absoluteIndex = reader.ReadAsInt32().Value; + break; + case nameof(SourceSpan.LineIndex): + lineIndex = reader.ReadAsInt32().Value; + break; + case nameof(SourceSpan.CharacterIndex): + characterIndex = reader.ReadAsInt32().Value; + break; + case nameof(SourceSpan.Length): + length = reader.ReadAsInt32().Value; + break; + } + }); + + var sourceSpan = new SourceSpan(filePath, absoluteIndex, lineIndex, characterIndex, length); + return sourceSpan; } } } diff --git a/src/Razor/perf/Microsoft.AspNetCore.Razor.Performance/taghelpers.json b/src/Shared/RazorShared/taghelpers.json similarity index 100% rename from src/Razor/perf/Microsoft.AspNetCore.Razor.Performance/taghelpers.json rename to src/Shared/RazorShared/taghelpers.json diff --git a/src/Shared/runtime/Http2/Hpack/HPackEncoder.cs b/src/Shared/runtime/Http2/Hpack/HPackEncoder.cs index d2fbc52232..4c3ac29527 100644 --- a/src/Shared/runtime/Http2/Hpack/HPackEncoder.cs +++ b/src/Shared/runtime/Http2/Hpack/HPackEncoder.cs @@ -4,6 +4,7 @@ #nullable enable using System.Collections.Generic; using System.Diagnostics; +using System.Text; namespace System.Net.Http.HPack { @@ -96,7 +97,7 @@ namespace System.Net.Http.HPack if (IntegerEncoder.Encode(index, 4, destination, out int indexLength)) { Debug.Assert(indexLength >= 1); - if (EncodeStringLiteral(value, destination.Slice(indexLength), out int nameLength)) + if (EncodeStringLiteral(value, valueEncoding: null, destination.Slice(indexLength), out int nameLength)) { bytesWritten = indexLength + nameLength; return true; @@ -128,7 +129,7 @@ namespace System.Net.Http.HPack if (IntegerEncoder.Encode(index, 4, destination, out int indexLength)) { Debug.Assert(indexLength >= 1); - if (EncodeStringLiteral(value, destination.Slice(indexLength), out int nameLength)) + if (EncodeStringLiteral(value, valueEncoding: null, destination.Slice(indexLength), out int nameLength)) { bytesWritten = indexLength + nameLength; return true; @@ -160,7 +161,7 @@ namespace System.Net.Http.HPack if (IntegerEncoder.Encode(index, 6, destination, out int indexLength)) { Debug.Assert(indexLength >= 1); - if (EncodeStringLiteral(value, destination.Slice(indexLength), out int nameLength)) + if (EncodeStringLiteral(value, valueEncoding: null, destination.Slice(indexLength), out int nameLength)) { bytesWritten = indexLength + nameLength; return true; @@ -276,7 +277,7 @@ namespace System.Net.Http.HPack { destination[0] = mask; if (EncodeLiteralHeaderName(name, destination.Slice(1), out int nameLength) && - EncodeStringLiteral(value, destination.Slice(1 + nameLength), out int valueLength)) + EncodeStringLiteral(value, valueEncoding: null, destination.Slice(1 + nameLength), out int valueLength)) { bytesWritten = 1 + nameLength + valueLength; return true; @@ -289,6 +290,11 @@ namespace System.Net.Http.HPack /// Encodes a "Literal Header Field without Indexing - New Name". public static bool EncodeLiteralHeaderFieldWithoutIndexingNewName(string name, ReadOnlySpan values, string separator, Span destination, out int bytesWritten) + { + return EncodeLiteralHeaderFieldWithoutIndexingNewName(name, values, separator, valueEncoding: null, destination, out bytesWritten); + } + + public static bool EncodeLiteralHeaderFieldWithoutIndexingNewName(string name, ReadOnlySpan values, string separator, Encoding? valueEncoding, Span destination, out int bytesWritten) { // From https://tools.ietf.org/html/rfc7541#section-6.2.2 // ------------------------------------------------------ @@ -309,7 +315,7 @@ namespace System.Net.Http.HPack { destination[0] = 0; if (EncodeLiteralHeaderName(name, destination.Slice(1), out int nameLength) && - EncodeStringLiterals(values, separator, destination.Slice(1 + nameLength), out int valueLength)) + EncodeStringLiterals(values, separator, valueEncoding, destination.Slice(1 + nameLength), out int valueLength)) { bytesWritten = 1 + nameLength + valueLength; return true; @@ -395,27 +401,20 @@ namespace System.Net.Http.HPack return false; } - private static bool EncodeStringLiteralValue(string value, Span destination, out int bytesWritten) + private static void EncodeValueStringPart(string value, Span destination) { - if (value.Length <= destination.Length) - { - for (int i = 0; i < value.Length; i++) - { - char c = value[i]; - if ((c & 0xFF80) != 0) - { - throw new HttpRequestException(SR.net_http_request_invalid_char_encoding); - } + Debug.Assert(destination.Length >= value.Length); - destination[i] = (byte)c; + for (int i = 0; i < value.Length; i++) + { + char c = value[i]; + if ((c & 0xFF80) != 0) + { + throw new HttpRequestException(SR.net_http_request_invalid_char_encoding); } - bytesWritten = value.Length; - return true; + destination[i] = (byte)c; } - - bytesWritten = 0; - return false; } public static bool EncodeStringLiteral(ReadOnlySpan value, Span destination, out int bytesWritten) @@ -453,6 +452,11 @@ namespace System.Net.Http.HPack } public static bool EncodeStringLiteral(string value, Span destination, out int bytesWritten) + { + return EncodeStringLiteral(value, valueEncoding: null, destination, out bytesWritten); + } + + public static bool EncodeStringLiteral(string value, Encoding? valueEncoding, Span destination, out int bytesWritten) { // From https://tools.ietf.org/html/rfc7541#section-5.2 // ------------------------------------------------------ @@ -466,13 +470,28 @@ namespace System.Net.Http.HPack if (destination.Length != 0) { destination[0] = 0; // TODO: Use Huffman encoding - if (IntegerEncoder.Encode(value.Length, 7, destination, out int integerLength)) + + int encodedStringLength = valueEncoding is null || ReferenceEquals(valueEncoding, Encoding.Latin1) + ? value.Length + : valueEncoding.GetByteCount(value); + + if (IntegerEncoder.Encode(encodedStringLength, 7, destination, out int integerLength)) { Debug.Assert(integerLength >= 1); - - if (EncodeStringLiteralValue(value, destination.Slice(integerLength), out int valueLength)) + destination = destination.Slice(integerLength); + if (encodedStringLength <= destination.Length) { - bytesWritten = integerLength + valueLength; + if (valueEncoding is null) + { + EncodeValueStringPart(value, destination); + } + else + { + int written = valueEncoding.GetBytes(value, destination); + Debug.Assert(written == encodedStringLength); + } + + bytesWritten = integerLength + encodedStringLength; return true; } } @@ -502,56 +521,87 @@ namespace System.Net.Http.HPack } public static bool EncodeStringLiterals(ReadOnlySpan values, string? separator, Span destination, out int bytesWritten) + { + return EncodeStringLiterals(values, separator, valueEncoding: null, destination, out bytesWritten); + } + + public static bool EncodeStringLiterals(ReadOnlySpan values, string? separator, Encoding? valueEncoding, Span destination, out int bytesWritten) { bytesWritten = 0; if (values.Length == 0) { - return EncodeStringLiteral("", destination, out bytesWritten); + return EncodeStringLiteral("", valueEncoding: null, destination, out bytesWritten); } else if (values.Length == 1) { - return EncodeStringLiteral(values[0], destination, out bytesWritten); + return EncodeStringLiteral(values[0], valueEncoding, destination, out bytesWritten); } if (destination.Length != 0) { - int valueLength = 0; + Debug.Assert(separator != null); + int valueLength; // Calculate length of all parts and separators. - foreach (string part in values) + if (valueEncoding is null || ReferenceEquals(valueEncoding, Encoding.Latin1)) { - valueLength = checked((int)(valueLength + part.Length)); + valueLength = checked((int)(values.Length - 1) * separator.Length); + foreach (string part in values) + { + valueLength = checked((int)(valueLength + part.Length)); + } + } + else + { + valueLength = checked((int)(values.Length - 1) * valueEncoding.GetByteCount(separator)); + foreach (string part in values) + { + valueLength = checked((int)(valueLength + valueEncoding.GetByteCount(part))); + } } - - Debug.Assert(separator != null); - valueLength = checked((int)(valueLength + (values.Length - 1) * separator.Length)); destination[0] = 0; if (IntegerEncoder.Encode(valueLength, 7, destination, out int integerLength)) { Debug.Assert(integerLength >= 1); - - int encodedLength = 0; - for (int j = 0; j < values.Length; j++) + destination = destination.Slice(integerLength); + if (destination.Length >= valueLength) { - if (j != 0 && !EncodeStringLiteralValue(separator, destination.Slice(integerLength), out encodedLength)) + if (valueEncoding is null) { - return false; + string value = values[0]; + EncodeValueStringPart(value, destination); + destination = destination.Slice(value.Length); + + for (int i = 1; i < values.Length; i++) + { + EncodeValueStringPart(separator, destination); + destination = destination.Slice(separator.Length); + + value = values[i]; + EncodeValueStringPart(value, destination); + destination = destination.Slice(value.Length); + } + } + else + { + int written = valueEncoding.GetBytes(values[0], destination); + destination = destination.Slice(written); + + for (int i = 1; i < values.Length; i++) + { + written = valueEncoding.GetBytes(separator, destination); + destination = destination.Slice(written); + + written = valueEncoding.GetBytes(values[i], destination); + destination = destination.Slice(written); + } } - integerLength += encodedLength; - - if (!EncodeStringLiteralValue(values[j], destination.Slice(integerLength), out encodedLength)) - { - return false; - } - - integerLength += encodedLength; + bytesWritten = integerLength + valueLength; + return true; } - - bytesWritten = integerLength; - return true; } } diff --git a/src/Shared/runtime/Http3/QPack/QPackEncoder.cs b/src/Shared/runtime/Http3/QPack/QPackEncoder.cs index be43dc3bc7..68e04ed2d4 100644 --- a/src/Shared/runtime/Http3/QPack/QPackEncoder.cs +++ b/src/Shared/runtime/Http3/QPack/QPackEncoder.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Net.Http.HPack; +using System.Text; namespace System.Net.Http.QPack { @@ -59,6 +60,11 @@ namespace System.Net.Http.QPack // - T is constant 1 here, indicating a static table reference. // - H is constant 0 here, as we do not yet perform Huffman coding. public static bool EncodeLiteralHeaderFieldWithStaticNameReference(int index, string value, Span destination, out int bytesWritten) + { + return EncodeLiteralHeaderFieldWithStaticNameReference(index, value, valueEncoding: null, destination, out bytesWritten); + } + + public static bool EncodeLiteralHeaderFieldWithStaticNameReference(int index, string value, Encoding? valueEncoding, Span destination, out int bytesWritten) { // Requires at least two bytes (one for name reference header, one for value length) if (destination.Length >= 2) @@ -68,7 +74,7 @@ namespace System.Net.Http.QPack { destination = destination.Slice(headerBytesWritten); - if (EncodeValueString(value, destination, out int valueBytesWritten)) + if (EncodeValueString(value, valueEncoding, destination, out int valueBytesWritten)) { bytesWritten = headerBytesWritten + valueBytesWritten; return true; @@ -81,7 +87,7 @@ namespace System.Net.Http.QPack } /// - /// Encodes just the name part of a Literal Header Field With Static Name Reference. Must call after to encode the header's value. + /// Encodes just the name part of a Literal Header Field With Static Name Reference. Must call after to encode the header's value. /// public static byte[] EncodeLiteralHeaderFieldWithStaticNameReferenceToArray(int index) { @@ -119,7 +125,12 @@ namespace System.Net.Http.QPack // - H is constant 0 here, as we do not yet perform Huffman coding. public static bool EncodeLiteralHeaderFieldWithoutNameReference(string name, string value, Span destination, out int bytesWritten) { - if (EncodeNameString(name, destination, out int nameLength) && EncodeValueString(value, destination.Slice(nameLength), out int valueLength)) + return EncodeLiteralHeaderFieldWithoutNameReference(name, value, valueEncoding: null, destination, out bytesWritten); + } + + public static bool EncodeLiteralHeaderFieldWithoutNameReference(string name, string value, Encoding? valueEncoding, Span destination, out int bytesWritten) + { + if (EncodeNameString(name, destination, out int nameLength) && EncodeValueString(value, valueEncoding, destination.Slice(nameLength), out int valueLength)) { bytesWritten = nameLength + valueLength; return true; @@ -136,7 +147,12 @@ namespace System.Net.Http.QPack /// public static bool EncodeLiteralHeaderFieldWithoutNameReference(string name, ReadOnlySpan values, string valueSeparator, Span destination, out int bytesWritten) { - if (EncodeNameString(name, destination, out int nameLength) && EncodeValueString(values, valueSeparator, destination.Slice(nameLength), out int valueLength)) + return EncodeLiteralHeaderFieldWithoutNameReference(name, values, valueSeparator, valueEncoding: null, destination, out bytesWritten); + } + + public static bool EncodeLiteralHeaderFieldWithoutNameReference(string name, ReadOnlySpan values, string valueSeparator, Encoding? valueEncoding, Span destination, out int bytesWritten) + { + if (EncodeNameString(name, destination, out int nameLength) && EncodeValueString(values, valueSeparator, valueEncoding, destination.Slice(nameLength), out int valueLength)) { bytesWritten = nameLength + valueLength; return true; @@ -147,7 +163,7 @@ namespace System.Net.Http.QPack } /// - /// Encodes just the value part of a Literawl Header Field Without Static Name Reference. Must call after to encode the header's value. + /// Encodes just the value part of a Literawl Header Field Without Static Name Reference. Must call after to encode the header's value. /// public static byte[] EncodeLiteralHeaderFieldWithoutNameReferenceToArray(string name) { @@ -169,19 +185,32 @@ namespace System.Net.Http.QPack return temp.Slice(0, bytesWritten).ToArray(); } - private static bool EncodeValueString(string s, Span buffer, out int length) + private static bool EncodeValueString(string s, Encoding? valueEncoding, Span buffer, out int length) { if (buffer.Length != 0) { buffer[0] = 0; - if (IntegerEncoder.Encode(s.Length, 7, buffer, out int nameLength)) + + int encodedStringLength = valueEncoding is null || ReferenceEquals(valueEncoding, Encoding.Latin1) + ? s.Length + : valueEncoding.GetByteCount(s); + + if (IntegerEncoder.Encode(encodedStringLength, 7, buffer, out int nameLength)) { buffer = buffer.Slice(nameLength); - if (buffer.Length >= s.Length) + if (buffer.Length >= encodedStringLength) { - EncodeValueStringPart(s, buffer); + if (valueEncoding is null) + { + EncodeValueStringPart(s, buffer); + } + else + { + int written = valueEncoding.GetBytes(s, buffer); + Debug.Assert(written == encodedStringLength); + } - length = nameLength + s.Length; + length = nameLength + encodedStringLength; return true; } } @@ -195,25 +224,42 @@ namespace System.Net.Http.QPack /// Encodes a value by concatenating a collection of strings, separated by a separator string. /// public static bool EncodeValueString(ReadOnlySpan values, string? separator, Span buffer, out int length) + { + return EncodeValueString(values, separator, valueEncoding: null, buffer, out length); + } + + public static bool EncodeValueString(ReadOnlySpan values, string? separator, Encoding? valueEncoding, Span buffer, out int length) { if (values.Length == 1) { - return EncodeValueString(values[0], buffer, out length); + return EncodeValueString(values[0], valueEncoding, buffer, out length); } if (values.Length == 0) { // TODO: this will be called with a string array from HttpHeaderCollection. Can we ever get a 0-length array from that? Assert if not. - return EncodeValueString(string.Empty, buffer, out length); + return EncodeValueString(string.Empty, valueEncoding: null, buffer, out length); } if (buffer.Length > 0) { Debug.Assert(separator != null); - int valueLength = separator.Length * (values.Length - 1); - for (int i = 0; i < values.Length; ++i) + int valueLength; + if (valueEncoding is null || ReferenceEquals(valueEncoding, Encoding.Latin1)) { - valueLength += values[i].Length; + valueLength = separator.Length * (values.Length - 1); + foreach (string part in values) + { + valueLength += part.Length; + } + } + else + { + valueLength = valueEncoding.GetByteCount(separator) * (values.Length - 1); + foreach (string part in values) + { + valueLength += valueEncoding.GetByteCount(part); + } } buffer[0] = 0; @@ -222,18 +268,35 @@ namespace System.Net.Http.QPack buffer = buffer.Slice(nameLength); if (buffer.Length >= valueLength) { - string value = values[0]; - EncodeValueStringPart(value, buffer); - buffer = buffer.Slice(value.Length); - - for (int i = 1; i < values.Length; ++i) + if (valueEncoding is null) { - EncodeValueStringPart(separator, buffer); - buffer = buffer.Slice(separator.Length); - - value = values[i]; + string value = values[0]; EncodeValueStringPart(value, buffer); buffer = buffer.Slice(value.Length); + + for (int i = 1; i < values.Length; i++) + { + EncodeValueStringPart(separator, buffer); + buffer = buffer.Slice(separator.Length); + + value = values[i]; + EncodeValueStringPart(value, buffer); + buffer = buffer.Slice(value.Length); + } + } + else + { + int written = valueEncoding.GetBytes(values[0], buffer); + buffer = buffer.Slice(written); + + for (int i = 1; i < values.Length; i++) + { + written = valueEncoding.GetBytes(separator, buffer); + buffer = buffer.Slice(written); + + written = valueEncoding.GetBytes(values[i], buffer); + buffer = buffer.Slice(written); + } } length = nameLength + valueLength; diff --git a/src/Shared/runtime/Quic/Implementations/Mock/MockConnection.cs b/src/Shared/runtime/Quic/Implementations/Mock/MockConnection.cs index 361474bcb1..cba2f936ef 100644 --- a/src/Shared/runtime/Quic/Implementations/Mock/MockConnection.cs +++ b/src/Shared/runtime/Quic/Implementations/Mock/MockConnection.cs @@ -93,7 +93,7 @@ namespace System.Net.Quic.Implementations.Mock int bytesRead = 0; do { - bytesRead += await socket.ReceiveAsync(buffer.AsMemory().Slice(bytesRead), SocketFlags.None).ConfigureAwait(false); + bytesRead += await socket.ReceiveAsync(buffer.AsMemory().Slice(bytesRead), SocketFlags.None, cancellationToken).ConfigureAwait(false); } while (bytesRead != buffer.Length); int peerListenPort = BinaryPrimitives.ReadInt32LittleEndian(buffer); @@ -163,7 +163,7 @@ namespace System.Net.Quic.Implementations.Mock int bytesRead = 0; do { - bytesRead += await socket.ReceiveAsync(buffer.AsMemory().Slice(bytesRead), SocketFlags.None).ConfigureAwait(false); + bytesRead += await socket.ReceiveAsync(buffer.AsMemory().Slice(bytesRead), SocketFlags.None, cancellationToken).ConfigureAwait(false); } while (bytesRead != buffer.Length); long streamId = BinaryPrimitives.ReadInt64LittleEndian(buffer); diff --git a/src/Shared/runtime/Quic/Implementations/Mock/MockListener.cs b/src/Shared/runtime/Quic/Implementations/Mock/MockListener.cs index f4c0cfdf2c..e7b24548d2 100644 --- a/src/Shared/runtime/Quic/Implementations/Mock/MockListener.cs +++ b/src/Shared/runtime/Quic/Implementations/Mock/MockListener.cs @@ -45,7 +45,7 @@ namespace System.Net.Quic.Implementations.Mock int bytesRead = 0; do { - bytesRead += await socket.ReceiveAsync(buffer.AsMemory().Slice(bytesRead), SocketFlags.None).ConfigureAwait(false); + bytesRead += await socket.ReceiveAsync(buffer.AsMemory().Slice(bytesRead), SocketFlags.None, cancellationToken).ConfigureAwait(false); } while (bytesRead != buffer.Length); int peerListenPort = BinaryPrimitives.ReadInt32LittleEndian(buffer); diff --git a/src/Shared/test/Shared.Tests/DotNetMuxerTests.cs b/src/Shared/test/Shared.Tests/DotNetMuxerTests.cs index 8f813ca1fd..2835380142 100644 --- a/src/Shared/test/Shared.Tests/DotNetMuxerTests.cs +++ b/src/Shared/test/Shared.Tests/DotNetMuxerTests.cs @@ -10,7 +10,7 @@ namespace Microsoft.Extensions.CommandLineUtils { public class DotNetMuxerTests { - [Fact(Skip="https://github.com/dotnet/aspnetcore/issues/24082")] + [Fact(Skip = "https://github.com/dotnet/aspnetcore/issues/24082")] public void FindsTheMuxer() { var muxerPath = DotNetMuxer.MuxerPath; diff --git a/src/SignalR/clients/ts/FunctionalTests/Program.cs b/src/SignalR/clients/ts/FunctionalTests/Program.cs index bc1cc0a323..358bba527e 100644 --- a/src/SignalR/clients/ts/FunctionalTests/Program.cs +++ b/src/SignalR/clients/ts/FunctionalTests/Program.cs @@ -35,7 +35,7 @@ namespace FunctionalTests webHostBuilder .ConfigureLogging(factory => { - factory.AddConsole(options => + factory.AddSimpleConsole(options => { options.IncludeScopes = true; options.TimestampFormat = "[HH:mm:ss] "; diff --git a/src/SignalR/common/SignalR.Common/test/Internal/Protocol/MessagePackHubProtocolTestBase.cs b/src/SignalR/common/SignalR.Common/test/Internal/Protocol/MessagePackHubProtocolTestBase.cs index 0192641dad..8a3a9562b7 100644 --- a/src/SignalR/common/SignalR.Common/test/Internal/Protocol/MessagePackHubProtocolTestBase.cs +++ b/src/SignalR/common/SignalR.Common/test/Internal/Protocol/MessagePackHubProtocolTestBase.cs @@ -85,7 +85,7 @@ namespace Microsoft.AspNetCore.SignalR.Common.Tests.Internal.Protocol message: new InvocationMessage(null, "Target", new object[] { 42 }, new string[] { "__test_id__" }), binary: "lgGAwKZUYXJnZXSRKpGrX190ZXN0X2lkX18="), new ProtocolTestData( - name: "InvocationWithMulitpleStreams", + name: "InvocationWithMultipleStreams", message: new InvocationMessage(null, "Target", Array.Empty(), new string[] { "__test_id__", "__test_id2__" }), binary: "lgGAwKZUYXJnZXSQkqtfX3Rlc3RfaWRfX6xfX3Rlc3RfaWQyX18="), diff --git a/src/SignalR/server/Core/src/HubConnectionContext.cs b/src/SignalR/server/Core/src/HubConnectionContext.cs index 01d07d2e8a..e0a6d758f6 100644 --- a/src/SignalR/server/Core/src/HubConnectionContext.cs +++ b/src/SignalR/server/Core/src/HubConnectionContext.cs @@ -91,6 +91,8 @@ namespace Microsoft.AspNetCore.SignalR internal HubCallerContext HubCallerContext { get; } + internal Exception CloseException { get; private set; } + /// /// Gets a that notifies when the connection is aborted. /// @@ -212,6 +214,7 @@ namespace Microsoft.AspNetCore.SignalR } catch (Exception ex) { + CloseException = ex; Log.FailedWritingMessage(_logger, ex); AbortAllowReconnect(); @@ -231,6 +234,7 @@ namespace Microsoft.AspNetCore.SignalR } catch (Exception ex) { + CloseException = ex; Log.FailedWritingMessage(_logger, ex); AbortAllowReconnect(); @@ -247,6 +251,7 @@ namespace Microsoft.AspNetCore.SignalR } catch (Exception ex) { + CloseException = ex; Log.FailedWritingMessage(_logger, ex); AbortAllowReconnect(); @@ -274,6 +279,7 @@ namespace Microsoft.AspNetCore.SignalR } catch (Exception ex) { + CloseException = ex; Log.FailedWritingMessage(_logger, ex); AbortAllowReconnect(); } @@ -299,6 +305,7 @@ namespace Microsoft.AspNetCore.SignalR } catch (Exception ex) { + CloseException = ex; Log.FailedWritingMessage(_logger, ex); AbortAllowReconnect(); } @@ -336,6 +343,7 @@ namespace Microsoft.AspNetCore.SignalR } catch (Exception ex) { + CloseException = ex; Log.FailedWritingMessage(_logger, ex); AbortAllowReconnect(); } diff --git a/src/SignalR/server/Core/src/HubConnectionHandler.cs b/src/SignalR/server/Core/src/HubConnectionHandler.cs index 403a03e8ae..6ef96034ad 100644 --- a/src/SignalR/server/Core/src/HubConnectionHandler.cs +++ b/src/SignalR/server/Core/src/HubConnectionHandler.cs @@ -182,7 +182,7 @@ namespace Microsoft.AspNetCore.SignalR return; } - await HubOnDisconnectedAsync(connection, null); + await HubOnDisconnectedAsync(connection, connection.CloseException); } private async Task HubOnDisconnectedAsync(HubConnectionContext connection, Exception exception) diff --git a/src/SignalR/server/Core/src/IHubFilter.cs b/src/SignalR/server/Core/src/IHubFilter.cs index 398d24a253..baf754bb6c 100644 --- a/src/SignalR/server/Core/src/IHubFilter.cs +++ b/src/SignalR/server/Core/src/IHubFilter.cs @@ -19,7 +19,7 @@ namespace Microsoft.AspNetCore.SignalR /// The context for the method invocation that holds all the important information about the invoke. /// The next filter to run, and for the final one, the Hub invocation. /// Returns the result of the Hub method invoke. - ValueTask InvokeMethodAsync(HubInvocationContext invocationContext, Func> next); + ValueTask InvokeMethodAsync(HubInvocationContext invocationContext, Func> next) => next(invocationContext); /// /// Allows handling of the method. diff --git a/src/SignalR/server/Core/src/SignalRConnectionBuilderExtensions.cs b/src/SignalR/server/Core/src/SignalRConnectionBuilderExtensions.cs index 58888470cf..d06baed604 100644 --- a/src/SignalR/server/Core/src/SignalRConnectionBuilderExtensions.cs +++ b/src/SignalR/server/Core/src/SignalRConnectionBuilderExtensions.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Diagnostics.CodeAnalysis; using Microsoft.AspNetCore.Connections; using Microsoft.AspNetCore.SignalR.Internal; using Microsoft.Extensions.DependencyInjection; @@ -13,13 +14,15 @@ namespace Microsoft.AspNetCore.SignalR /// public static class SignalRConnectionBuilderExtensions { + private const DynamicallyAccessedMemberTypes HubAccessibility = DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.PublicMethods; + /// /// Configure the connection to host the specified type. /// /// The type to host on the connection. /// The connection to configure. /// The same instance of the for chaining. - public static IConnectionBuilder UseHub(this IConnectionBuilder connectionBuilder) where THub : Hub + public static IConnectionBuilder UseHub<[DynamicallyAccessedMembers(HubAccessibility)]THub>(this IConnectionBuilder connectionBuilder) where THub : Hub { var marker = connectionBuilder.ApplicationServices.GetService(typeof(SignalRCoreMarkerService)); if (marker == null) diff --git a/src/SignalR/server/SignalR/src/HubEndpointRouteBuilderExtensions.cs b/src/SignalR/server/SignalR/src/HubEndpointRouteBuilderExtensions.cs index 553ea3f8ce..3ac90b36f0 100644 --- a/src/SignalR/server/SignalR/src/HubEndpointRouteBuilderExtensions.cs +++ b/src/SignalR/server/SignalR/src/HubEndpointRouteBuilderExtensions.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Diagnostics.CodeAnalysis; using Microsoft.AspNetCore.Http.Connections; using Microsoft.AspNetCore.Routing; using Microsoft.AspNetCore.SignalR; @@ -11,6 +12,8 @@ namespace Microsoft.AspNetCore.Builder { public static class HubEndpointRouteBuilderExtensions { + private const DynamicallyAccessedMemberTypes HubAccessibility = DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.PublicMethods; + /// /// Maps incoming requests with the specified path to the specified type. /// @@ -18,7 +21,7 @@ namespace Microsoft.AspNetCore.Builder /// The to add the route to. /// The route pattern. /// An for endpoints associated with the connections. - public static HubEndpointConventionBuilder MapHub(this IEndpointRouteBuilder endpoints, string pattern) where THub : Hub + public static HubEndpointConventionBuilder MapHub<[DynamicallyAccessedMembers(HubAccessibility)]THub>(this IEndpointRouteBuilder endpoints, string pattern) where THub : Hub { return endpoints.MapHub(pattern, configureOptions: null); } @@ -31,7 +34,7 @@ namespace Microsoft.AspNetCore.Builder /// The route pattern. /// A callback to configure dispatcher options. /// An for endpoints associated with the connections. - public static HubEndpointConventionBuilder MapHub(this IEndpointRouteBuilder endpoints, string pattern, Action configureOptions) where THub : Hub + public static HubEndpointConventionBuilder MapHub<[DynamicallyAccessedMembers(HubAccessibility)]THub>(this IEndpointRouteBuilder endpoints, string pattern, Action configureOptions) where THub : Hub { var marker = endpoints.ServiceProvider.GetService(); diff --git a/src/SignalR/server/SignalR/test/HubConnectionHandlerTestUtils/Hubs.cs b/src/SignalR/server/SignalR/test/HubConnectionHandlerTestUtils/Hubs.cs index 3031ee9ffd..c2a4893fd4 100644 --- a/src/SignalR/server/SignalR/test/HubConnectionHandlerTestUtils/Hubs.cs +++ b/src/SignalR/server/SignalR/test/HubConnectionHandlerTestUtils/Hubs.cs @@ -189,16 +189,6 @@ namespace Microsoft.AspNetCore.SignalR.Tests { } - private class SelfRef - { - public SelfRef() - { - Self = this; - } - - public SelfRef Self { get; set; } - } - public async Task StreamingConcat(ChannelReader source) { var sb = new StringBuilder(); @@ -331,6 +321,16 @@ namespace Microsoft.AspNetCore.SignalR.Tests } } + internal class SelfRef + { + public SelfRef() + { + Self = this; + } + + public SelfRef Self { get; set; } + } + public abstract class TestHub : Hub { public override Task OnConnectedAsync() @@ -1123,9 +1123,20 @@ namespace Microsoft.AspNetCore.SignalR.Tests return base.OnConnectedAsync(); } + public Task ProtocolErrorSelf() + { + return Clients.Caller.SendAsync("Send", new SelfRef()); + } + + public Task ProtocolErrorAll() + { + return Clients.All.SendAsync("Send", new SelfRef()); + } + public override Task OnDisconnectedAsync(Exception exception) { _state.TokenStateInDisconnected = Context.ConnectionAborted.IsCancellationRequested; + _state.DisconnectedException = exception; return base.OnDisconnectedAsync(exception); } @@ -1138,6 +1149,8 @@ namespace Microsoft.AspNetCore.SignalR.Tests public bool TokenStateInConnected { get; set; } public bool TokenStateInDisconnected { get; set; } + + public Exception DisconnectedException { get; set; } } public class CallerServiceHub : Hub diff --git a/src/SignalR/server/SignalR/test/HubConnectionHandlerTests.cs b/src/SignalR/server/SignalR/test/HubConnectionHandlerTests.cs index ceab4322be..32d198d2fd 100644 --- a/src/SignalR/server/SignalR/test/HubConnectionHandlerTests.cs +++ b/src/SignalR/server/SignalR/test/HubConnectionHandlerTests.cs @@ -19,10 +19,8 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Connections; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Connections.Features; -using Microsoft.AspNetCore.Internal; using Microsoft.AspNetCore.SignalR.Internal; using Microsoft.AspNetCore.SignalR.Protocol; -using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Testing; @@ -3342,6 +3340,52 @@ namespace Microsoft.AspNetCore.SignalR.Tests } } + [Fact] + public async Task SerializationExceptionsSendSelfArePassedToOnDisconnectedAsync() + { + using (StartVerifiableLog(write => write.EventId.Name == "FailedWritingMessage")) + { + var state = new ConnectionLifetimeState(); + var serviceProvider = HubConnectionHandlerTestUtils.CreateServiceProvider(s => s.AddSingleton(state), LoggerFactory); + var connectionHandler = serviceProvider.GetService>(); + + using (var client = new TestClient()) + { + var connectionHandlerTask = await client.ConnectAsync(connectionHandler); + + // Test HubConnectionContext.WriteCore(HubMessage) codepath + await client.SendInvocationAsync(nameof(ConnectionLifetimeHub.ProtocolErrorSelf)).OrTimeout(); + + await connectionHandlerTask.OrTimeout(); + + Assert.IsType(state.DisconnectedException); + } + } + } + + [Fact] + public async Task SerializationExceptionsSendAllArePassedToOnDisconnectedAsync() + { + using (StartVerifiableLog(write => write.EventId.Name == "FailedWritingMessage")) + { + var state = new ConnectionLifetimeState(); + var serviceProvider = HubConnectionHandlerTestUtils.CreateServiceProvider(s => s.AddSingleton(state), LoggerFactory); + var connectionHandler = serviceProvider.GetService>(); + + using (var client = new TestClient()) + { + var connectionHandlerTask = await client.ConnectAsync(connectionHandler); + + // Test HubConnectionContext.WriteCore(SerializedHubMessage) codepath + await client.SendInvocationAsync(nameof(ConnectionLifetimeHub.ProtocolErrorAll)).OrTimeout(); + + await connectionHandlerTask.OrTimeout(); + + Assert.IsType(state.DisconnectedException); + } + } + } + [Fact(Skip = "Magic auto cast not supported")] public async Task UploadStreamItemInvalidTypeAutoCasts() { diff --git a/src/SignalR/server/SignalR/test/HubFilterTests.cs b/src/SignalR/server/SignalR/test/HubFilterTests.cs index 91bc5d835c..5675029eee 100644 --- a/src/SignalR/server/SignalR/test/HubFilterTests.cs +++ b/src/SignalR/server/SignalR/test/HubFilterTests.cs @@ -2,7 +2,6 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using System.Diagnostics; using System.Threading.Tasks; using Microsoft.AspNetCore.Internal; using Microsoft.Extensions.DependencyInjection; @@ -136,6 +135,40 @@ namespace Microsoft.AspNetCore.SignalR.Tests } } + [Fact] + public async Task HubFilterDoesNotNeedToImplementMethods() + { + using (StartVerifiableLog()) + { + var tcsService = new TcsService(); + var serviceProvider = HubConnectionHandlerTestUtils.CreateServiceProvider(services => + { + services.AddSignalR().AddHubOptions(options => + { + options.AddFilter(typeof(EmptyFilter)); + }); + }, LoggerFactory); + + + var connectionHandler = serviceProvider.GetService>(); + + using (var client = new TestClient()) + { + var connectionHandlerTask = await client.ConnectAsync(connectionHandler); + + await client.Connected.OrTimeout(); + + var completion = await client.InvokeAsync(nameof(DynamicTestHub.Echo), "hello"); + Assert.Null(completion.Error); + Assert.Equal("hello", completion.Result); + + client.Dispose(); + + await connectionHandlerTask.OrTimeout(); + } + } + } + [Fact] public async Task MutlipleFilters_MethodsAreCalled() { diff --git a/src/SignalR/server/SignalR/test/TestFilters.cs b/src/SignalR/server/SignalR/test/TestFilters.cs index e32c48284a..50f124e5f3 100644 --- a/src/SignalR/server/SignalR/test/TestFilters.cs +++ b/src/SignalR/server/SignalR/test/TestFilters.cs @@ -233,4 +233,9 @@ namespace Microsoft.AspNetCore.SignalR.Tests return next(context); } } + + public class EmptyFilter : IHubFilter + { + // Purposefully not implementing any methods + } } diff --git a/src/SiteExtensions/LoggingAggregate/src/Microsoft.AspNetCore.AzureAppServices.SiteExtension/Microsoft.AspNetCore.AzureAppServices.SiteExtension.csproj b/src/SiteExtensions/LoggingAggregate/src/Microsoft.AspNetCore.AzureAppServices.SiteExtension/Microsoft.AspNetCore.AzureAppServices.SiteExtension.csproj index 4d043ed846..ebe593e808 100644 --- a/src/SiteExtensions/LoggingAggregate/src/Microsoft.AspNetCore.AzureAppServices.SiteExtension/Microsoft.AspNetCore.AzureAppServices.SiteExtension.csproj +++ b/src/SiteExtensions/LoggingAggregate/src/Microsoft.AspNetCore.AzureAppServices.SiteExtension/Microsoft.AspNetCore.AzureAppServices.SiteExtension.csproj @@ -24,10 +24,10 @@ - - - - + + + + diff --git a/src/SiteExtensions/LoggingAggregate/test/Microsoft.AspNetCore.AzureAppServices.SiteExtension.Tests/Microsoft.AspNetCore.AzureAppServices.SiteExtension.Tests.csproj b/src/SiteExtensions/LoggingAggregate/test/Microsoft.AspNetCore.AzureAppServices.SiteExtension.Tests/Microsoft.AspNetCore.AzureAppServices.SiteExtension.Tests.csproj index e1212ece07..4711b09890 100644 --- a/src/SiteExtensions/LoggingAggregate/test/Microsoft.AspNetCore.AzureAppServices.SiteExtension.Tests/Microsoft.AspNetCore.AzureAppServices.SiteExtension.Tests.csproj +++ b/src/SiteExtensions/LoggingAggregate/test/Microsoft.AspNetCore.AzureAppServices.SiteExtension.Tests/Microsoft.AspNetCore.AzureAppServices.SiteExtension.Tests.csproj @@ -23,7 +23,7 @@ - + diff --git a/src/SiteExtensions/Microsoft.Web.Xdt.Extensions/tests/Microsoft.Web.Xdt.Extensions.Tests.csproj b/src/SiteExtensions/Microsoft.Web.Xdt.Extensions/tests/Microsoft.Web.Xdt.Extensions.Tests.csproj index b73f8dc9e1..d794280afc 100644 --- a/src/SiteExtensions/Microsoft.Web.Xdt.Extensions/tests/Microsoft.Web.Xdt.Extensions.Tests.csproj +++ b/src/SiteExtensions/Microsoft.Web.Xdt.Extensions/tests/Microsoft.Web.Xdt.Extensions.Tests.csproj @@ -27,7 +27,7 @@ - + diff --git a/src/SiteExtensions/Runtime/Microsoft.AspNetCore.Runtime.SiteExtension.pkgproj b/src/SiteExtensions/Runtime/Microsoft.AspNetCore.Runtime.SiteExtension.pkgproj index c75271f20f..0d08bab58e 100644 --- a/src/SiteExtensions/Runtime/Microsoft.AspNetCore.Runtime.SiteExtension.pkgproj +++ b/src/SiteExtensions/Runtime/Microsoft.AspNetCore.Runtime.SiteExtension.pkgproj @@ -20,11 +20,14 @@ - + + false @@ -33,7 +36,6 @@ - diff --git a/src/Tools/Extensions.ApiDescription.Client/test/Microsoft.Extensions.ApiDescription.Client.Tests.csproj b/src/Tools/Extensions.ApiDescription.Client/test/Microsoft.Extensions.ApiDescription.Client.Tests.csproj index 5b01ef6ad9..e642e7ce03 100644 --- a/src/Tools/Extensions.ApiDescription.Client/test/Microsoft.Extensions.ApiDescription.Client.Tests.csproj +++ b/src/Tools/Extensions.ApiDescription.Client/test/Microsoft.Extensions.ApiDescription.Client.Tests.csproj @@ -11,7 +11,7 @@ - + diff --git a/src/Tools/Extensions.ApiDescription.Server/src/Microsoft.Extensions.ApiDescription.Server.csproj b/src/Tools/Extensions.ApiDescription.Server/src/Microsoft.Extensions.ApiDescription.Server.csproj index bf8942884e..db7bc7926a 100644 --- a/src/Tools/Extensions.ApiDescription.Server/src/Microsoft.Extensions.ApiDescription.Server.csproj +++ b/src/Tools/Extensions.ApiDescription.Server/src/Microsoft.Extensions.ApiDescription.Server.csproj @@ -11,18 +11,21 @@ $(MSBuildProjectName) MSBuild;Swagger;OpenAPI;code generation;Web API;service reference;document generation true + + - Build;Publish - - - - - + + + Publish + diff --git a/src/Tools/Extensions.ApiDescription.Server/src/Microsoft.Extensions.ApiDescription.Server.nuspec b/src/Tools/Extensions.ApiDescription.Server/src/Microsoft.Extensions.ApiDescription.Server.nuspec index 57a21d4cf7..a85edc2f4a 100644 --- a/src/Tools/Extensions.ApiDescription.Server/src/Microsoft.Extensions.ApiDescription.Server.nuspec +++ b/src/Tools/Extensions.ApiDescription.Server/src/Microsoft.Extensions.ApiDescription.Server.nuspec @@ -9,8 +9,8 @@ - - - + + + diff --git a/src/Tools/GetDocumentInsider/src/GetDocumentInsider.csproj b/src/Tools/GetDocumentInsider/src/GetDocument.Insider.csproj similarity index 100% rename from src/Tools/GetDocumentInsider/src/GetDocumentInsider.csproj rename to src/Tools/GetDocumentInsider/src/GetDocument.Insider.csproj diff --git a/src/Tools/Tools.slnf b/src/Tools/Tools.slnf index 813a7aa908..a49d94c1d3 100644 --- a/src/Tools/Tools.slnf +++ b/src/Tools/Tools.slnf @@ -8,7 +8,7 @@ "src\\Tools\\Extensions.ApiDescription.Server\\src\\Microsoft.Extensions.ApiDescription.Server.csproj", "src\\Tools\\FirstRunCertGenerator\\src\\Microsoft.AspNetCore.DeveloperCertificates.XPlat.csproj", "src\\Tools\\FirstRunCertGenerator\\test\\Microsoft.AspNetCore.DeveloperCertificates.XPlat.Tests.csproj", - "src\\Tools\\GetDocumentInsider\\src\\GetDocumentInsider.csproj", + "src\\Tools\\GetDocumentInsider\\src\\GetDocument.Insider.csproj", "src\\Tools\\Microsoft.dotnet-openapi\\src\\Microsoft.dotnet-openapi.csproj", "src\\Tools\\Microsoft.dotnet-openapi\\test\\dotnet-microsoft.openapi.Tests.csproj", "src\\Tools\\dotnet-dev-certs\\src\\dotnet-dev-certs.csproj", @@ -20,4 +20,4 @@ "src\\Tools\\dotnet-watch\\test\\dotnet-watch.Tests.csproj" ] } -} \ No newline at end of file +} diff --git a/src/Tools/dotnet-watch/test/AppWithDepsTests.cs b/src/Tools/dotnet-watch/test/AppWithDepsTests.cs index bef740ad10..b4f9510ad9 100644 --- a/src/Tools/dotnet-watch/test/AppWithDepsTests.cs +++ b/src/Tools/dotnet-watch/test/AppWithDepsTests.cs @@ -20,6 +20,7 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests } [ConditionalFact] + [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/23994")] [SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/23360", Queues = "Windows.10.Arm64;Windows.10.Arm64.Open;Debian.9.Arm64;Debian.9.Arm64.Open;(Debian.9.Arm64.Open)Ubuntu.1804.Armarch.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-9-helix-arm64v8-a12566d-20190807161036;(Debian.9.Arm64)Ubuntu.1804.Armarch@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-9-helix-arm64v8-a12566d-20190807161036")] public async Task ChangeFileInDependency() { diff --git a/src/Tools/dotnet-watch/test/GlobbingAppTests.cs b/src/Tools/dotnet-watch/test/GlobbingAppTests.cs index e731247241..95224ea800 100644 --- a/src/Tools/dotnet-watch/test/GlobbingAppTests.cs +++ b/src/Tools/dotnet-watch/test/GlobbingAppTests.cs @@ -15,7 +15,10 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests { public class GlobbingAppTests : IDisposable { - private GlobbingApp _app; + private static readonly TimeSpan DefaultTimeout = TimeSpan.FromSeconds(60); + + private readonly GlobbingApp _app; + public GlobbingAppTests(ITestOutputHelper logger) { _app = new GlobbingApp(logger); @@ -28,17 +31,17 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests public async Task ChangeCompiledFile(bool usePollingWatcher) { _app.UsePollingWatcher = usePollingWatcher; - await _app.StartWatcherAsync(); + await _app.StartWatcherAsync().TimeoutAfter(DefaultTimeout); - var types = await _app.GetCompiledAppDefinedTypes(); + var types = await _app.GetCompiledAppDefinedTypes().TimeoutAfter(DefaultTimeout); Assert.Equal(2, types); var fileToChange = Path.Combine(_app.SourceDirectory, "include", "Foo.cs"); var programCs = File.ReadAllText(fileToChange); File.WriteAllText(fileToChange, programCs); - await _app.HasRestarted(); - types = await _app.GetCompiledAppDefinedTypes(); + await _app.HasRestarted().TimeoutAfter(DefaultTimeout); + types = await _app.GetCompiledAppDefinedTypes().TimeoutAfter(DefaultTimeout); Assert.Equal(2, types); } @@ -46,16 +49,16 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests [SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/23360", Queues = "Debian.9.Arm64;Debian.9.Arm64.Open;(Debian.9.Arm64.Open)Ubuntu.1804.Armarch.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-9-helix-arm64v8-a12566d-20190807161036;(Debian.9.Arm64)Ubuntu.1804.Armarch@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-9-helix-arm64v8-a12566d-20190807161036")] public async Task DeleteCompiledFile() { - await _app.StartWatcherAsync(); + await _app.StartWatcherAsync().TimeoutAfter(DefaultTimeout); - var types = await _app.GetCompiledAppDefinedTypes(); + var types = await _app.GetCompiledAppDefinedTypes().TimeoutAfter(DefaultTimeout); Assert.Equal(2, types); var fileToChange = Path.Combine(_app.SourceDirectory, "include", "Foo.cs"); File.Delete(fileToChange); - await _app.HasRestarted(); - types = await _app.GetCompiledAppDefinedTypes(); + await _app.HasRestarted().TimeoutAfter(DefaultTimeout); + types = await _app.GetCompiledAppDefinedTypes().TimeoutAfter(DefaultTimeout); Assert.Equal(1, types); } @@ -63,16 +66,16 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests [SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/23360", Queues = "Debian.9.Arm64;Debian.9.Arm64.Open;(Debian.9.Arm64.Open)Ubuntu.1804.Armarch.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-9-helix-arm64v8-a12566d-20190807161036;(Debian.9.Arm64)Ubuntu.1804.Armarch@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-9-helix-arm64v8-a12566d-20190807161036")] public async Task DeleteSourceFolder() { - await _app.StartWatcherAsync(); + await _app.StartWatcherAsync().TimeoutAfter(DefaultTimeout); - var types = await _app.GetCompiledAppDefinedTypes(); + var types = await _app.GetCompiledAppDefinedTypes().TimeoutAfter(DefaultTimeout); Assert.Equal(2, types); var folderToDelete = Path.Combine(_app.SourceDirectory, "include"); Directory.Delete(folderToDelete, recursive: true); - await _app.HasRestarted(); - types = await _app.GetCompiledAppDefinedTypes(); + await _app.HasRestarted().TimeoutAfter(DefaultTimeout); + types = await _app.GetCompiledAppDefinedTypes().TimeoutAfter(DefaultTimeout); Assert.Equal(1, types); } @@ -80,19 +83,19 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests [SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/23360", Queues = "Debian.9.Arm64;Debian.9.Arm64.Open;(Debian.9.Arm64.Open)Ubuntu.1804.Armarch.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-9-helix-arm64v8-a12566d-20190807161036;(Debian.9.Arm64)Ubuntu.1804.Armarch@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-9-helix-arm64v8-a12566d-20190807161036")] public async Task RenameCompiledFile() { - await _app.StartWatcherAsync(); + await _app.StartWatcherAsync().TimeoutAfter(DefaultTimeout); var oldFile = Path.Combine(_app.SourceDirectory, "include", "Foo.cs"); var newFile = Path.Combine(_app.SourceDirectory, "include", "Foo_new.cs"); File.Move(oldFile, newFile); - await _app.HasRestarted(); + await _app.HasRestarted().TimeoutAfter(DefaultTimeout); } [Fact] public async Task ChangeExcludedFile() { - await _app.StartWatcherAsync(); + await _app.StartWatcherAsync().TimeoutAfter(DefaultTimeout); var changedFile = Path.Combine(_app.SourceDirectory, "exclude", "Baz.cs"); File.WriteAllText(changedFile, ""); @@ -105,11 +108,11 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests [Fact] public async Task ListsFiles() { - await _app.PrepareAsync(); + await _app.PrepareAsync().TimeoutAfter(DefaultTimeout); _app.Start(new[] { "--list" }); var cts = new CancellationTokenSource(); cts.CancelAfter(TimeSpan.FromSeconds(30)); - var lines = await _app.Process.GetAllOutputLinesAsync(cts.Token); + var lines = await _app.Process.GetAllOutputLinesAsync(cts.Token).TimeoutAfter(DefaultTimeout); var files = lines.Where(l => !l.StartsWith("watch :")); AssertEx.EqualFileList( diff --git a/src/Tools/dotnet-watch/test/MsBuildFileSetFactoryTest.cs b/src/Tools/dotnet-watch/test/MsBuildFileSetFactoryTest.cs index d3aee43cac..0d69f49d2e 100644 --- a/src/Tools/dotnet-watch/test/MsBuildFileSetFactoryTest.cs +++ b/src/Tools/dotnet-watch/test/MsBuildFileSetFactoryTest.cs @@ -221,7 +221,6 @@ namespace Microsoft.DotNet.Watcher.Tools.Tests } [Fact] - [QuarantinedTest] public async Task ProjectReferences_Graph() { var graph = new TestProjectGraph(_tempDir);