diff --git a/src/Middleware/Diagnostics/src/DeveloperExceptionPage/DeveloperExceptionPageExtensions.cs b/src/Middleware/Diagnostics/src/DeveloperExceptionPage/DeveloperExceptionPageExtensions.cs index 9e2f6d06e26a..2752263847eb 100644 --- a/src/Middleware/Diagnostics/src/DeveloperExceptionPage/DeveloperExceptionPageExtensions.cs +++ b/src/Middleware/Diagnostics/src/DeveloperExceptionPage/DeveloperExceptionPageExtensions.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 Microsoft.AspNetCore.Diagnostics; using Microsoft.Extensions.Options; diff --git a/src/Middleware/Diagnostics/src/DeveloperExceptionPage/DeveloperExceptionPageMiddleware.cs b/src/Middleware/Diagnostics/src/DeveloperExceptionPage/DeveloperExceptionPageMiddleware.cs index bcd330f6362a..9ab50c029f42 100644 --- a/src/Middleware/Diagnostics/src/DeveloperExceptionPage/DeveloperExceptionPageMiddleware.cs +++ b/src/Middleware/Diagnostics/src/DeveloperExceptionPage/DeveloperExceptionPageMiddleware.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; @@ -165,10 +163,7 @@ private Task DisplayCompilationException( HttpContext context, ICompilationException compilationException) { - var model = new CompilationErrorPageModel - { - Options = _options, - }; + var model = new CompilationErrorPageModel(_options); var errorPage = new CompilationErrorPage { diff --git a/src/Middleware/Diagnostics/src/DeveloperExceptionPage/DeveloperExceptionPageOptions.cs b/src/Middleware/Diagnostics/src/DeveloperExceptionPage/DeveloperExceptionPageOptions.cs index aecf85c79448..5d33011d5c90 100644 --- a/src/Middleware/Diagnostics/src/DeveloperExceptionPage/DeveloperExceptionPageOptions.cs +++ b/src/Middleware/Diagnostics/src/DeveloperExceptionPage/DeveloperExceptionPageOptions.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 Microsoft.AspNetCore.Diagnostics; using Microsoft.Extensions.FileProviders; diff --git a/src/Middleware/Diagnostics/src/DeveloperExceptionPage/Views/CompilationErrorModel.cs b/src/Middleware/Diagnostics/src/DeveloperExceptionPage/Views/CompilationErrorModel.cs index f84bb4f19d33..7d36ed5de525 100644 --- a/src/Middleware/Diagnostics/src/DeveloperExceptionPage/Views/CompilationErrorModel.cs +++ b/src/Middleware/Diagnostics/src/DeveloperExceptionPage/Views/CompilationErrorModel.cs @@ -12,10 +12,15 @@ namespace Microsoft.AspNetCore.Diagnostics.RazorViews /// internal class CompilationErrorPageModel { + public CompilationErrorPageModel(DeveloperExceptionPageOptions options) + { + Options = options; + } + /// /// Options for what output to display. /// - public DeveloperExceptionPageOptions Options { get; set; } + public DeveloperExceptionPageOptions Options { get; } /// /// Detailed information about each parse or compilation error. @@ -25,6 +30,6 @@ internal class CompilationErrorPageModel /// /// Gets the generated content that produced the corresponding . /// - public IList CompiledContent { get; } = new List(); + public IList CompiledContent { get; } = new List(); } -} \ No newline at end of file +} diff --git a/src/Middleware/Diagnostics/src/DeveloperExceptionPage/Views/EndpointModel.cs b/src/Middleware/Diagnostics/src/DeveloperExceptionPage/Views/EndpointModel.cs index b4b88187c5cb..e479a6e274d2 100644 --- a/src/Middleware/Diagnostics/src/DeveloperExceptionPage/Views/EndpointModel.cs +++ b/src/Middleware/Diagnostics/src/DeveloperExceptionPage/Views/EndpointModel.cs @@ -5,9 +5,9 @@ namespace Microsoft.AspNetCore.Diagnostics.RazorViews { internal class EndpointModel { - public string DisplayName { get; set; } - public string RoutePattern { get; set; } + public string? DisplayName { get; set; } + public string? RoutePattern { get; set; } public int? Order { get; set; } - public string HttpMethods { get; set; } + public string? HttpMethods { get; set; } } } diff --git a/src/Middleware/Diagnostics/src/DiagnosticsLoggerExtensions.cs b/src/Middleware/Diagnostics/src/DiagnosticsLoggerExtensions.cs index fdd67aee9e0e..1a812f8d1579 100644 --- a/src/Middleware/Diagnostics/src/DiagnosticsLoggerExtensions.cs +++ b/src/Middleware/Diagnostics/src/DiagnosticsLoggerExtensions.cs @@ -13,17 +13,17 @@ internal static class DiagnosticsLoggerExtensions LoggerMessage.Define(LogLevel.Error, new EventId(1, "UnhandledException"), "An unhandled exception has occurred while executing the request."); // ExceptionHandlerMiddleware - private static readonly Action _responseStartedErrorHandler = + private static readonly Action _responseStartedErrorHandler = LoggerMessage.Define(LogLevel.Warning, new EventId(2, "ResponseStarted"), "The response has already started, the error handler will not be executed."); private static readonly Action _errorHandlerException = LoggerMessage.Define(LogLevel.Error, new EventId(3, "Exception"), "An exception was thrown attempting to execute the error handler."); - private static readonly Action _errorHandlerNotFound = + private static readonly Action _errorHandlerNotFound = LoggerMessage.Define(LogLevel.Warning, new EventId(4, "HandlerNotFound"), "No exception handler was found, rethrowing original exception."); // DeveloperExceptionPageMiddleware - private static readonly Action _responseStartedErrorPageMiddleware = + private static readonly Action _responseStartedErrorPageMiddleware = LoggerMessage.Define(LogLevel.Warning, new EventId(2, "ResponseStarted"), "The response has already started, the error page middleware will not be executed."); private static readonly Action _displayErrorPageException = diff --git a/src/Middleware/Diagnostics/src/ExceptionHandler/ExceptionHandlerExtensions.cs b/src/Middleware/Diagnostics/src/ExceptionHandler/ExceptionHandlerExtensions.cs index ca8c41248da2..7d3160f59e8a 100644 --- a/src/Middleware/Diagnostics/src/ExceptionHandler/ExceptionHandlerExtensions.cs +++ b/src/Middleware/Diagnostics/src/ExceptionHandler/ExceptionHandlerExtensions.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 Microsoft.AspNetCore.Diagnostics; using Microsoft.AspNetCore.Http; diff --git a/src/Middleware/Diagnostics/src/ExceptionHandler/ExceptionHandlerFeature.cs b/src/Middleware/Diagnostics/src/ExceptionHandler/ExceptionHandlerFeature.cs index 89f4f6a2f326..e38d97d6b40c 100644 --- a/src/Middleware/Diagnostics/src/ExceptionHandler/ExceptionHandlerFeature.cs +++ b/src/Middleware/Diagnostics/src/ExceptionHandler/ExceptionHandlerFeature.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; namespace Microsoft.AspNetCore.Diagnostics diff --git a/src/Middleware/Diagnostics/src/ExceptionHandler/ExceptionHandlerMiddleware.cs b/src/Middleware/Diagnostics/src/ExceptionHandler/ExceptionHandlerMiddleware.cs index 2ab8ee30a50f..11cfac7f19ce 100644 --- a/src/Middleware/Diagnostics/src/ExceptionHandler/ExceptionHandlerMiddleware.cs +++ b/src/Middleware/Diagnostics/src/ExceptionHandler/ExceptionHandlerMiddleware.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.Diagnostics; using System.Runtime.ExceptionServices; diff --git a/src/Middleware/Diagnostics/src/ExceptionHandler/ExceptionHandlerOptions.cs b/src/Middleware/Diagnostics/src/ExceptionHandler/ExceptionHandlerOptions.cs index 8050436b3641..35cc9a138cd0 100644 --- a/src/Middleware/Diagnostics/src/ExceptionHandler/ExceptionHandlerOptions.cs +++ b/src/Middleware/Diagnostics/src/ExceptionHandler/ExceptionHandlerOptions.cs @@ -2,8 +2,6 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using Microsoft.AspNetCore.Diagnostics; -#nullable enable - using Microsoft.AspNetCore.Http; namespace Microsoft.AspNetCore.Builder diff --git a/src/Middleware/Diagnostics/src/ExceptionHandler/ExceptionHandlerServiceCollectionExtensions.cs b/src/Middleware/Diagnostics/src/ExceptionHandler/ExceptionHandlerServiceCollectionExtensions.cs index e6dc03406296..fd48c73aee69 100644 --- a/src/Middleware/Diagnostics/src/ExceptionHandler/ExceptionHandlerServiceCollectionExtensions.cs +++ b/src/Middleware/Diagnostics/src/ExceptionHandler/ExceptionHandlerServiceCollectionExtensions.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 Microsoft.AspNetCore.Builder; diff --git a/src/Middleware/Diagnostics/src/Microsoft.AspNetCore.Diagnostics.csproj b/src/Middleware/Diagnostics/src/Microsoft.AspNetCore.Diagnostics.csproj index b20f9273da0a..3a479bf0a025 100644 --- a/src/Middleware/Diagnostics/src/Microsoft.AspNetCore.Diagnostics.csproj +++ b/src/Middleware/Diagnostics/src/Microsoft.AspNetCore.Diagnostics.csproj @@ -7,6 +7,7 @@ true aspnetcore;diagnostics false + enable diff --git a/src/Middleware/Diagnostics/src/PublicAPI.Shipped.txt b/src/Middleware/Diagnostics/src/PublicAPI.Shipped.txt index 63a544adbb67..26295b661ebe 100644 --- a/src/Middleware/Diagnostics/src/PublicAPI.Shipped.txt +++ b/src/Middleware/Diagnostics/src/PublicAPI.Shipped.txt @@ -33,50 +33,50 @@ Microsoft.AspNetCore.Diagnostics.StatusCodeReExecuteFeature Microsoft.AspNetCore.Diagnostics.StatusCodeReExecuteFeature.StatusCodeReExecuteFeature() -> void Microsoft.AspNetCore.Diagnostics.WelcomePageMiddleware Microsoft.Extensions.DependencyInjection.ExceptionHandlerServiceCollectionExtensions -~Microsoft.AspNetCore.Builder.DeveloperExceptionPageOptions.FileProvider.get -> Microsoft.Extensions.FileProviders.IFileProvider -~Microsoft.AspNetCore.Builder.DeveloperExceptionPageOptions.FileProvider.set -> void -~Microsoft.AspNetCore.Builder.ExceptionHandlerOptions.ExceptionHandler.get -> Microsoft.AspNetCore.Http.RequestDelegate -~Microsoft.AspNetCore.Builder.ExceptionHandlerOptions.ExceptionHandler.set -> void -~Microsoft.AspNetCore.Builder.StatusCodePagesOptions.HandleAsync.get -> System.Func -~Microsoft.AspNetCore.Builder.StatusCodePagesOptions.HandleAsync.set -> void -~Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.DeveloperExceptionPageMiddleware(Microsoft.AspNetCore.Http.RequestDelegate next, Microsoft.Extensions.Options.IOptions options, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.AspNetCore.Hosting.IWebHostEnvironment hostingEnvironment, System.Diagnostics.DiagnosticSource diagnosticSource, System.Collections.Generic.IEnumerable filters) -> void -~Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(Microsoft.AspNetCore.Http.HttpContext context) -> System.Threading.Tasks.Task -~Microsoft.AspNetCore.Diagnostics.ExceptionHandlerFeature.Error.get -> System.Exception -~Microsoft.AspNetCore.Diagnostics.ExceptionHandlerFeature.Error.set -> void -~Microsoft.AspNetCore.Diagnostics.ExceptionHandlerFeature.Path.get -> string -~Microsoft.AspNetCore.Diagnostics.ExceptionHandlerFeature.Path.set -> void -~Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.ExceptionHandlerMiddleware(Microsoft.AspNetCore.Http.RequestDelegate next, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.Extensions.Options.IOptions options, System.Diagnostics.DiagnosticListener diagnosticListener) -> void -~Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.Invoke(Microsoft.AspNetCore.Http.HttpContext context) -> System.Threading.Tasks.Task -~Microsoft.AspNetCore.Diagnostics.StatusCodeContext.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext -~Microsoft.AspNetCore.Diagnostics.StatusCodeContext.Next.get -> Microsoft.AspNetCore.Http.RequestDelegate -~Microsoft.AspNetCore.Diagnostics.StatusCodeContext.Options.get -> Microsoft.AspNetCore.Builder.StatusCodePagesOptions -~Microsoft.AspNetCore.Diagnostics.StatusCodeContext.StatusCodeContext(Microsoft.AspNetCore.Http.HttpContext context, Microsoft.AspNetCore.Builder.StatusCodePagesOptions options, Microsoft.AspNetCore.Http.RequestDelegate next) -> void -~Microsoft.AspNetCore.Diagnostics.StatusCodePagesMiddleware.Invoke(Microsoft.AspNetCore.Http.HttpContext context) -> System.Threading.Tasks.Task -~Microsoft.AspNetCore.Diagnostics.StatusCodePagesMiddleware.StatusCodePagesMiddleware(Microsoft.AspNetCore.Http.RequestDelegate next, Microsoft.Extensions.Options.IOptions options) -> void -~Microsoft.AspNetCore.Diagnostics.StatusCodeReExecuteFeature.OriginalPath.get -> string -~Microsoft.AspNetCore.Diagnostics.StatusCodeReExecuteFeature.OriginalPath.set -> void -~Microsoft.AspNetCore.Diagnostics.StatusCodeReExecuteFeature.OriginalPathBase.get -> string -~Microsoft.AspNetCore.Diagnostics.StatusCodeReExecuteFeature.OriginalPathBase.set -> void -~Microsoft.AspNetCore.Diagnostics.StatusCodeReExecuteFeature.OriginalQueryString.get -> string -~Microsoft.AspNetCore.Diagnostics.StatusCodeReExecuteFeature.OriginalQueryString.set -> void -~Microsoft.AspNetCore.Diagnostics.WelcomePageMiddleware.Invoke(Microsoft.AspNetCore.Http.HttpContext context) -> System.Threading.Tasks.Task -~Microsoft.AspNetCore.Diagnostics.WelcomePageMiddleware.WelcomePageMiddleware(Microsoft.AspNetCore.Http.RequestDelegate next, Microsoft.Extensions.Options.IOptions options) -> void -~static Microsoft.AspNetCore.Builder.DeveloperExceptionPageExtensions.UseDeveloperExceptionPage(this Microsoft.AspNetCore.Builder.IApplicationBuilder app) -> Microsoft.AspNetCore.Builder.IApplicationBuilder -~static Microsoft.AspNetCore.Builder.DeveloperExceptionPageExtensions.UseDeveloperExceptionPage(this Microsoft.AspNetCore.Builder.IApplicationBuilder app, Microsoft.AspNetCore.Builder.DeveloperExceptionPageOptions options) -> Microsoft.AspNetCore.Builder.IApplicationBuilder -~static Microsoft.AspNetCore.Builder.ExceptionHandlerExtensions.UseExceptionHandler(this Microsoft.AspNetCore.Builder.IApplicationBuilder app) -> Microsoft.AspNetCore.Builder.IApplicationBuilder -~static Microsoft.AspNetCore.Builder.ExceptionHandlerExtensions.UseExceptionHandler(this Microsoft.AspNetCore.Builder.IApplicationBuilder app, Microsoft.AspNetCore.Builder.ExceptionHandlerOptions options) -> Microsoft.AspNetCore.Builder.IApplicationBuilder -~static Microsoft.AspNetCore.Builder.ExceptionHandlerExtensions.UseExceptionHandler(this Microsoft.AspNetCore.Builder.IApplicationBuilder app, System.Action configure) -> Microsoft.AspNetCore.Builder.IApplicationBuilder -~static Microsoft.AspNetCore.Builder.ExceptionHandlerExtensions.UseExceptionHandler(this Microsoft.AspNetCore.Builder.IApplicationBuilder app, string errorHandlingPath) -> Microsoft.AspNetCore.Builder.IApplicationBuilder -~static Microsoft.AspNetCore.Builder.StatusCodePagesExtensions.UseStatusCodePages(this Microsoft.AspNetCore.Builder.IApplicationBuilder app) -> Microsoft.AspNetCore.Builder.IApplicationBuilder -~static Microsoft.AspNetCore.Builder.StatusCodePagesExtensions.UseStatusCodePages(this Microsoft.AspNetCore.Builder.IApplicationBuilder app, Microsoft.AspNetCore.Builder.StatusCodePagesOptions options) -> Microsoft.AspNetCore.Builder.IApplicationBuilder -~static Microsoft.AspNetCore.Builder.StatusCodePagesExtensions.UseStatusCodePages(this Microsoft.AspNetCore.Builder.IApplicationBuilder app, System.Action configuration) -> Microsoft.AspNetCore.Builder.IApplicationBuilder -~static Microsoft.AspNetCore.Builder.StatusCodePagesExtensions.UseStatusCodePages(this Microsoft.AspNetCore.Builder.IApplicationBuilder app, System.Func handler) -> Microsoft.AspNetCore.Builder.IApplicationBuilder -~static Microsoft.AspNetCore.Builder.StatusCodePagesExtensions.UseStatusCodePages(this Microsoft.AspNetCore.Builder.IApplicationBuilder app, string contentType, string bodyFormat) -> Microsoft.AspNetCore.Builder.IApplicationBuilder -~static Microsoft.AspNetCore.Builder.StatusCodePagesExtensions.UseStatusCodePagesWithReExecute(this Microsoft.AspNetCore.Builder.IApplicationBuilder app, string pathFormat, string queryFormat = null) -> Microsoft.AspNetCore.Builder.IApplicationBuilder -~static Microsoft.AspNetCore.Builder.StatusCodePagesExtensions.UseStatusCodePagesWithRedirects(this Microsoft.AspNetCore.Builder.IApplicationBuilder app, string locationFormat) -> Microsoft.AspNetCore.Builder.IApplicationBuilder -~static Microsoft.AspNetCore.Builder.WelcomePageExtensions.UseWelcomePage(this Microsoft.AspNetCore.Builder.IApplicationBuilder app) -> Microsoft.AspNetCore.Builder.IApplicationBuilder -~static Microsoft.AspNetCore.Builder.WelcomePageExtensions.UseWelcomePage(this Microsoft.AspNetCore.Builder.IApplicationBuilder app, Microsoft.AspNetCore.Builder.WelcomePageOptions options) -> Microsoft.AspNetCore.Builder.IApplicationBuilder -~static Microsoft.AspNetCore.Builder.WelcomePageExtensions.UseWelcomePage(this Microsoft.AspNetCore.Builder.IApplicationBuilder app, Microsoft.AspNetCore.Http.PathString path) -> Microsoft.AspNetCore.Builder.IApplicationBuilder -~static Microsoft.AspNetCore.Builder.WelcomePageExtensions.UseWelcomePage(this Microsoft.AspNetCore.Builder.IApplicationBuilder app, string path) -> Microsoft.AspNetCore.Builder.IApplicationBuilder -~static Microsoft.Extensions.DependencyInjection.ExceptionHandlerServiceCollectionExtensions.AddExceptionHandler(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, System.Action configureOptions) -> Microsoft.Extensions.DependencyInjection.IServiceCollection -~static Microsoft.Extensions.DependencyInjection.ExceptionHandlerServiceCollectionExtensions.AddExceptionHandler(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, System.Action configureOptions) -> Microsoft.Extensions.DependencyInjection.IServiceCollection +Microsoft.AspNetCore.Builder.DeveloperExceptionPageOptions.FileProvider.get -> Microsoft.Extensions.FileProviders.IFileProvider? +Microsoft.AspNetCore.Builder.DeveloperExceptionPageOptions.FileProvider.set -> void +Microsoft.AspNetCore.Builder.ExceptionHandlerOptions.ExceptionHandler.get -> Microsoft.AspNetCore.Http.RequestDelegate? +Microsoft.AspNetCore.Builder.ExceptionHandlerOptions.ExceptionHandler.set -> void +Microsoft.AspNetCore.Builder.StatusCodePagesOptions.HandleAsync.get -> System.Func! +Microsoft.AspNetCore.Builder.StatusCodePagesOptions.HandleAsync.set -> void +~Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.DeveloperExceptionPageMiddleware(Microsoft.AspNetCore.Http.RequestDelegate! next, Microsoft.Extensions.Options.IOptions! options, Microsoft.Extensions.Logging.ILoggerFactory! loggerFactory, Microsoft.AspNetCore.Hosting.IWebHostEnvironment! hostingEnvironment, System.Diagnostics.DiagnosticSource! diagnosticSource, System.Collections.Generic.IEnumerable! filters) -> void +Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(Microsoft.AspNetCore.Http.HttpContext! context) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.Diagnostics.ExceptionHandlerFeature.Error.get -> System.Exception! +Microsoft.AspNetCore.Diagnostics.ExceptionHandlerFeature.Error.set -> void +Microsoft.AspNetCore.Diagnostics.ExceptionHandlerFeature.Path.get -> string! +Microsoft.AspNetCore.Diagnostics.ExceptionHandlerFeature.Path.set -> void +~Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.ExceptionHandlerMiddleware(Microsoft.AspNetCore.Http.RequestDelegate! next, Microsoft.Extensions.Logging.ILoggerFactory! loggerFactory, Microsoft.Extensions.Options.IOptions! options, System.Diagnostics.DiagnosticListener! diagnosticListener) -> void +Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.Invoke(Microsoft.AspNetCore.Http.HttpContext! context) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.Diagnostics.StatusCodeContext.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext! +Microsoft.AspNetCore.Diagnostics.StatusCodeContext.Next.get -> Microsoft.AspNetCore.Http.RequestDelegate! +Microsoft.AspNetCore.Diagnostics.StatusCodeContext.Options.get -> Microsoft.AspNetCore.Builder.StatusCodePagesOptions! +Microsoft.AspNetCore.Diagnostics.StatusCodeContext.StatusCodeContext(Microsoft.AspNetCore.Http.HttpContext! context, Microsoft.AspNetCore.Builder.StatusCodePagesOptions! options, Microsoft.AspNetCore.Http.RequestDelegate! next) -> void +Microsoft.AspNetCore.Diagnostics.StatusCodePagesMiddleware.Invoke(Microsoft.AspNetCore.Http.HttpContext! context) -> System.Threading.Tasks.Task! +~Microsoft.AspNetCore.Diagnostics.StatusCodePagesMiddleware.StatusCodePagesMiddleware(Microsoft.AspNetCore.Http.RequestDelegate! next, Microsoft.Extensions.Options.IOptions! options) -> void +Microsoft.AspNetCore.Diagnostics.StatusCodeReExecuteFeature.OriginalPath.get -> string! +Microsoft.AspNetCore.Diagnostics.StatusCodeReExecuteFeature.OriginalPath.set -> void +Microsoft.AspNetCore.Diagnostics.StatusCodeReExecuteFeature.OriginalPathBase.get -> string! +Microsoft.AspNetCore.Diagnostics.StatusCodeReExecuteFeature.OriginalPathBase.set -> void +Microsoft.AspNetCore.Diagnostics.StatusCodeReExecuteFeature.OriginalQueryString.get -> string? +Microsoft.AspNetCore.Diagnostics.StatusCodeReExecuteFeature.OriginalQueryString.set -> void +Microsoft.AspNetCore.Diagnostics.WelcomePageMiddleware.Invoke(Microsoft.AspNetCore.Http.HttpContext! context) -> System.Threading.Tasks.Task! +~Microsoft.AspNetCore.Diagnostics.WelcomePageMiddleware.WelcomePageMiddleware(Microsoft.AspNetCore.Http.RequestDelegate! next, Microsoft.Extensions.Options.IOptions! options) -> void +static Microsoft.AspNetCore.Builder.DeveloperExceptionPageExtensions.UseDeveloperExceptionPage(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! +static Microsoft.AspNetCore.Builder.DeveloperExceptionPageExtensions.UseDeveloperExceptionPage(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, Microsoft.AspNetCore.Builder.DeveloperExceptionPageOptions! options) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! +static Microsoft.AspNetCore.Builder.ExceptionHandlerExtensions.UseExceptionHandler(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! +static Microsoft.AspNetCore.Builder.ExceptionHandlerExtensions.UseExceptionHandler(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, Microsoft.AspNetCore.Builder.ExceptionHandlerOptions! options) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! +static Microsoft.AspNetCore.Builder.ExceptionHandlerExtensions.UseExceptionHandler(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, System.Action! configure) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! +static Microsoft.AspNetCore.Builder.ExceptionHandlerExtensions.UseExceptionHandler(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, string! errorHandlingPath) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! +static Microsoft.AspNetCore.Builder.StatusCodePagesExtensions.UseStatusCodePages(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! +static Microsoft.AspNetCore.Builder.StatusCodePagesExtensions.UseStatusCodePages(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, Microsoft.AspNetCore.Builder.StatusCodePagesOptions! options) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! +static Microsoft.AspNetCore.Builder.StatusCodePagesExtensions.UseStatusCodePages(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, System.Action! configuration) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! +static Microsoft.AspNetCore.Builder.StatusCodePagesExtensions.UseStatusCodePages(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, System.Func! handler) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! +static Microsoft.AspNetCore.Builder.StatusCodePagesExtensions.UseStatusCodePages(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, string! contentType, string! bodyFormat) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! +static Microsoft.AspNetCore.Builder.StatusCodePagesExtensions.UseStatusCodePagesWithReExecute(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, string! pathFormat, string? queryFormat = null) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! +static Microsoft.AspNetCore.Builder.StatusCodePagesExtensions.UseStatusCodePagesWithRedirects(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, string! locationFormat) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! +static Microsoft.AspNetCore.Builder.WelcomePageExtensions.UseWelcomePage(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! +static Microsoft.AspNetCore.Builder.WelcomePageExtensions.UseWelcomePage(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, Microsoft.AspNetCore.Builder.WelcomePageOptions! options) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! +static Microsoft.AspNetCore.Builder.WelcomePageExtensions.UseWelcomePage(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, Microsoft.AspNetCore.Http.PathString path) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! +static Microsoft.AspNetCore.Builder.WelcomePageExtensions.UseWelcomePage(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, string! path) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! +static Microsoft.Extensions.DependencyInjection.ExceptionHandlerServiceCollectionExtensions.AddExceptionHandler(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services, System.Action! configureOptions) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! +static Microsoft.Extensions.DependencyInjection.ExceptionHandlerServiceCollectionExtensions.AddExceptionHandler(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services, System.Action! configureOptions) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! diff --git a/src/Middleware/Diagnostics/src/PublicAPI.Unshipped.txt b/src/Middleware/Diagnostics/src/PublicAPI.Unshipped.txt index 153f8cf8175c..7dc5c58110bf 100644 --- a/src/Middleware/Diagnostics/src/PublicAPI.Unshipped.txt +++ b/src/Middleware/Diagnostics/src/PublicAPI.Unshipped.txt @@ -1,48 +1 @@ #nullable enable -Microsoft.AspNetCore.Builder.DeveloperExceptionPageOptions.FileProvider.get -> Microsoft.Extensions.FileProviders.IFileProvider? -Microsoft.AspNetCore.Builder.DeveloperExceptionPageOptions.FileProvider.set -> void -Microsoft.AspNetCore.Builder.ExceptionHandlerOptions.ExceptionHandler.get -> Microsoft.AspNetCore.Http.RequestDelegate? -Microsoft.AspNetCore.Builder.ExceptionHandlerOptions.ExceptionHandler.set -> void -Microsoft.AspNetCore.Builder.StatusCodePagesOptions.HandleAsync.get -> System.Func! -Microsoft.AspNetCore.Builder.StatusCodePagesOptions.HandleAsync.set -> void -~Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.DeveloperExceptionPageMiddleware(Microsoft.AspNetCore.Http.RequestDelegate! next, Microsoft.Extensions.Options.IOptions! options, Microsoft.Extensions.Logging.ILoggerFactory! loggerFactory, Microsoft.AspNetCore.Hosting.IWebHostEnvironment! hostingEnvironment, System.Diagnostics.DiagnosticSource! diagnosticSource, System.Collections.Generic.IEnumerable! filters) -> void -Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(Microsoft.AspNetCore.Http.HttpContext! context) -> System.Threading.Tasks.Task! -Microsoft.AspNetCore.Diagnostics.ExceptionHandlerFeature.Error.get -> System.Exception! -Microsoft.AspNetCore.Diagnostics.ExceptionHandlerFeature.Error.set -> void -Microsoft.AspNetCore.Diagnostics.ExceptionHandlerFeature.Path.get -> string! -Microsoft.AspNetCore.Diagnostics.ExceptionHandlerFeature.Path.set -> void -~Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.ExceptionHandlerMiddleware(Microsoft.AspNetCore.Http.RequestDelegate! next, Microsoft.Extensions.Logging.ILoggerFactory! loggerFactory, Microsoft.Extensions.Options.IOptions! options, System.Diagnostics.DiagnosticListener! diagnosticListener) -> void -Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.Invoke(Microsoft.AspNetCore.Http.HttpContext! context) -> System.Threading.Tasks.Task! -Microsoft.AspNetCore.Diagnostics.StatusCodeContext.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext! -Microsoft.AspNetCore.Diagnostics.StatusCodeContext.Next.get -> Microsoft.AspNetCore.Http.RequestDelegate! -Microsoft.AspNetCore.Diagnostics.StatusCodeContext.Options.get -> Microsoft.AspNetCore.Builder.StatusCodePagesOptions! -Microsoft.AspNetCore.Diagnostics.StatusCodeContext.StatusCodeContext(Microsoft.AspNetCore.Http.HttpContext! context, Microsoft.AspNetCore.Builder.StatusCodePagesOptions! options, Microsoft.AspNetCore.Http.RequestDelegate! next) -> void -Microsoft.AspNetCore.Diagnostics.StatusCodePagesMiddleware.Invoke(Microsoft.AspNetCore.Http.HttpContext! context) -> System.Threading.Tasks.Task! -~Microsoft.AspNetCore.Diagnostics.StatusCodePagesMiddleware.StatusCodePagesMiddleware(Microsoft.AspNetCore.Http.RequestDelegate! next, Microsoft.Extensions.Options.IOptions! options) -> void -Microsoft.AspNetCore.Diagnostics.StatusCodeReExecuteFeature.OriginalPath.get -> string! -Microsoft.AspNetCore.Diagnostics.StatusCodeReExecuteFeature.OriginalPath.set -> void -Microsoft.AspNetCore.Diagnostics.StatusCodeReExecuteFeature.OriginalPathBase.get -> string! -Microsoft.AspNetCore.Diagnostics.StatusCodeReExecuteFeature.OriginalPathBase.set -> void -Microsoft.AspNetCore.Diagnostics.StatusCodeReExecuteFeature.OriginalQueryString.get -> string? -Microsoft.AspNetCore.Diagnostics.StatusCodeReExecuteFeature.OriginalQueryString.set -> void -Microsoft.AspNetCore.Diagnostics.WelcomePageMiddleware.Invoke(Microsoft.AspNetCore.Http.HttpContext! context) -> System.Threading.Tasks.Task! -~Microsoft.AspNetCore.Diagnostics.WelcomePageMiddleware.WelcomePageMiddleware(Microsoft.AspNetCore.Http.RequestDelegate! next, Microsoft.Extensions.Options.IOptions! options) -> void -static Microsoft.AspNetCore.Builder.DeveloperExceptionPageExtensions.UseDeveloperExceptionPage(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! -static Microsoft.AspNetCore.Builder.DeveloperExceptionPageExtensions.UseDeveloperExceptionPage(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, Microsoft.AspNetCore.Builder.DeveloperExceptionPageOptions! options) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! -static Microsoft.AspNetCore.Builder.ExceptionHandlerExtensions.UseExceptionHandler(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! -static Microsoft.AspNetCore.Builder.ExceptionHandlerExtensions.UseExceptionHandler(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, Microsoft.AspNetCore.Builder.ExceptionHandlerOptions! options) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! -static Microsoft.AspNetCore.Builder.ExceptionHandlerExtensions.UseExceptionHandler(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, System.Action! configure) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! -static Microsoft.AspNetCore.Builder.ExceptionHandlerExtensions.UseExceptionHandler(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, string! errorHandlingPath) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! -static Microsoft.AspNetCore.Builder.StatusCodePagesExtensions.UseStatusCodePages(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! -static Microsoft.AspNetCore.Builder.StatusCodePagesExtensions.UseStatusCodePages(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, Microsoft.AspNetCore.Builder.StatusCodePagesOptions! options) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! -static Microsoft.AspNetCore.Builder.StatusCodePagesExtensions.UseStatusCodePages(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, System.Action! configuration) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! -static Microsoft.AspNetCore.Builder.StatusCodePagesExtensions.UseStatusCodePages(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, System.Func! handler) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! -static Microsoft.AspNetCore.Builder.StatusCodePagesExtensions.UseStatusCodePages(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, string! contentType, string! bodyFormat) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! -static Microsoft.AspNetCore.Builder.StatusCodePagesExtensions.UseStatusCodePagesWithReExecute(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, string! pathFormat, string? queryFormat = null) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! -static Microsoft.AspNetCore.Builder.StatusCodePagesExtensions.UseStatusCodePagesWithRedirects(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, string! locationFormat) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! -static Microsoft.AspNetCore.Builder.WelcomePageExtensions.UseWelcomePage(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! -static Microsoft.AspNetCore.Builder.WelcomePageExtensions.UseWelcomePage(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, Microsoft.AspNetCore.Builder.WelcomePageOptions! options) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! -static Microsoft.AspNetCore.Builder.WelcomePageExtensions.UseWelcomePage(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, Microsoft.AspNetCore.Http.PathString path) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! -static Microsoft.AspNetCore.Builder.WelcomePageExtensions.UseWelcomePage(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, string! path) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! -static Microsoft.Extensions.DependencyInjection.ExceptionHandlerServiceCollectionExtensions.AddExceptionHandler(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services, System.Action! configureOptions) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! -static Microsoft.Extensions.DependencyInjection.ExceptionHandlerServiceCollectionExtensions.AddExceptionHandler(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services, System.Action! configureOptions) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! diff --git a/src/Middleware/Diagnostics/src/StatusCodePage/StatusCodeContext.cs b/src/Middleware/Diagnostics/src/StatusCodePage/StatusCodeContext.cs index e834b5a0348c..3a8e9e60bb3e 100644 --- a/src/Middleware/Diagnostics/src/StatusCodePage/StatusCodeContext.cs +++ b/src/Middleware/Diagnostics/src/StatusCodePage/StatusCodeContext.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 Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; diff --git a/src/Middleware/Diagnostics/src/StatusCodePage/StatusCodePagesExtensions.cs b/src/Middleware/Diagnostics/src/StatusCodePage/StatusCodePagesExtensions.cs index 7a8762939043..774509ce7015 100644 --- a/src/Middleware/Diagnostics/src/StatusCodePage/StatusCodePagesExtensions.cs +++ b/src/Middleware/Diagnostics/src/StatusCodePage/StatusCodePagesExtensions.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.Globalization; using System.Threading.Tasks; diff --git a/src/Middleware/Diagnostics/src/StatusCodePage/StatusCodePagesFeature.cs b/src/Middleware/Diagnostics/src/StatusCodePage/StatusCodePagesFeature.cs index 427e0292f49e..86115969d355 100644 --- a/src/Middleware/Diagnostics/src/StatusCodePage/StatusCodePagesFeature.cs +++ b/src/Middleware/Diagnostics/src/StatusCodePage/StatusCodePagesFeature.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 - namespace Microsoft.AspNetCore.Diagnostics { /// diff --git a/src/Middleware/Diagnostics/src/StatusCodePage/StatusCodePagesMiddleware.cs b/src/Middleware/Diagnostics/src/StatusCodePage/StatusCodePagesMiddleware.cs index 9402c036dd7f..629c1a643776 100644 --- a/src/Middleware/Diagnostics/src/StatusCodePage/StatusCodePagesMiddleware.cs +++ b/src/Middleware/Diagnostics/src/StatusCodePage/StatusCodePagesMiddleware.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.Threading.Tasks; using Microsoft.AspNetCore.Builder; diff --git a/src/Middleware/Diagnostics/src/StatusCodePage/StatusCodePagesOptions.cs b/src/Middleware/Diagnostics/src/StatusCodePage/StatusCodePagesOptions.cs index 6362764a7aee..56eb1958ddee 100644 --- a/src/Middleware/Diagnostics/src/StatusCodePage/StatusCodePagesOptions.cs +++ b/src/Middleware/Diagnostics/src/StatusCodePage/StatusCodePagesOptions.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.Globalization; using System.Threading.Tasks; diff --git a/src/Middleware/Diagnostics/src/StatusCodePage/StatusCodeReExecuteFeature.cs b/src/Middleware/Diagnostics/src/StatusCodePage/StatusCodeReExecuteFeature.cs index a1a7ddb8fa9e..1ed857da3152 100644 --- a/src/Middleware/Diagnostics/src/StatusCodePage/StatusCodeReExecuteFeature.cs +++ b/src/Middleware/Diagnostics/src/StatusCodePage/StatusCodeReExecuteFeature.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 - namespace Microsoft.AspNetCore.Diagnostics { /// Default implementation for . diff --git a/src/Middleware/Diagnostics/src/WelcomePage/WelcomePageExtensions.cs b/src/Middleware/Diagnostics/src/WelcomePage/WelcomePageExtensions.cs index 746427794033..a82febd1947b 100644 --- a/src/Middleware/Diagnostics/src/WelcomePage/WelcomePageExtensions.cs +++ b/src/Middleware/Diagnostics/src/WelcomePage/WelcomePageExtensions.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 Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Diagnostics; diff --git a/src/Middleware/Diagnostics/src/WelcomePage/WelcomePageMiddleware.cs b/src/Middleware/Diagnostics/src/WelcomePage/WelcomePageMiddleware.cs index ac792aa78c56..ad201ddff137 100644 --- a/src/Middleware/Diagnostics/src/WelcomePage/WelcomePageMiddleware.cs +++ b/src/Middleware/Diagnostics/src/WelcomePage/WelcomePageMiddleware.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.Threading.Tasks; using Microsoft.AspNetCore.Builder; diff --git a/src/Middleware/Diagnostics/src/WelcomePage/WelcomePageOptions.cs b/src/Middleware/Diagnostics/src/WelcomePage/WelcomePageOptions.cs index cd21aa3696c2..9e0d6eaea961 100644 --- a/src/Middleware/Diagnostics/src/WelcomePage/WelcomePageOptions.cs +++ b/src/Middleware/Diagnostics/src/WelcomePage/WelcomePageOptions.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 Microsoft.AspNetCore.Http; namespace Microsoft.AspNetCore.Builder diff --git a/src/Middleware/Rewrite/src/ApacheModRewrite/ApacheModRewriteRule.cs b/src/Middleware/Rewrite/src/ApacheModRewrite/ApacheModRewriteRule.cs index 51f5f3355e5b..34e003ed15b1 100644 --- a/src/Middleware/Rewrite/src/ApacheModRewrite/ApacheModRewriteRule.cs +++ b/src/Middleware/Rewrite/src/ApacheModRewrite/ApacheModRewriteRule.cs @@ -9,10 +9,10 @@ namespace Microsoft.AspNetCore.Rewrite.ApacheModRewrite internal class ApacheModRewriteRule : IRule { public UrlMatch InitialMatch { get; } - public IList Conditions { get; } + public IList? Conditions { get; } public IList Actions { get; } - public ApacheModRewriteRule(UrlMatch initialMatch, IList conditions, IList urlActions) + public ApacheModRewriteRule(UrlMatch initialMatch, IList? conditions, IList urlActions) { Conditions = conditions; InitialMatch = initialMatch; @@ -30,7 +30,7 @@ public virtual void ApplyRule(RewriteContext context) return; } - BackReferenceCollection condBackReferences = null; + BackReferenceCollection? condBackReferences = null; if (Conditions != null) { var condResult = ConditionEvaluator.Evaluate(Conditions, context, initMatchRes.BackReferences); diff --git a/src/Middleware/Rewrite/src/ApacheModRewrite/Condition.cs b/src/Middleware/Rewrite/src/ApacheModRewrite/Condition.cs index 34a56980416e..3cd27ecb9c89 100644 --- a/src/Middleware/Rewrite/src/ApacheModRewrite/Condition.cs +++ b/src/Middleware/Rewrite/src/ApacheModRewrite/Condition.cs @@ -1,18 +1,25 @@ -// 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.Rewrite.ApacheModRewrite { internal class Condition { - public Pattern Input { get; set; } - public UrlMatch Match { get; set; } - public bool OrNext { get; set; } + public Condition(Pattern input, UrlMatch match, bool orNext) + { + Input = input; + Match = match; + OrNext = orNext; + } + + public Pattern Input { get; } + public UrlMatch Match { get; } + public bool OrNext { get; } - public MatchResults Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public MatchResults Evaluate(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { var pattern = Input.Evaluate(context, ruleBackReferences, conditionBackReferences); return Match.Evaluate(pattern, context); } } -} \ No newline at end of file +} diff --git a/src/Middleware/Rewrite/src/ApacheModRewrite/ConditionEvaluator.cs b/src/Middleware/Rewrite/src/ApacheModRewrite/ConditionEvaluator.cs index 4785b1caabcc..ea2893f744a7 100644 --- a/src/Middleware/Rewrite/src/ApacheModRewrite/ConditionEvaluator.cs +++ b/src/Middleware/Rewrite/src/ApacheModRewrite/ConditionEvaluator.cs @@ -1,21 +1,22 @@ -// 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; +using System.Diagnostics; namespace Microsoft.AspNetCore.Rewrite.ApacheModRewrite { internal static class ConditionEvaluator { - public static MatchResults Evaluate(IEnumerable conditions, RewriteContext context, BackReferenceCollection backReferences) + public static MatchResults Evaluate(IEnumerable conditions, RewriteContext context, BackReferenceCollection? backReferences) { return Evaluate(conditions, context, backReferences, trackAllCaptures: false); } - public static MatchResults Evaluate(IEnumerable conditions, RewriteContext context, BackReferenceCollection backReferences, bool trackAllCaptures) + public static MatchResults Evaluate(IEnumerable conditions, RewriteContext context, BackReferenceCollection? backReferences, bool trackAllCaptures) { - BackReferenceCollection prevBackReferences = null; - MatchResults condResult = null; + BackReferenceCollection? prevBackReferences = null; + MatchResults? condResult = null; var orSucceeded = false; foreach (var condition in conditions) { @@ -42,14 +43,15 @@ public static MatchResults Evaluate(IEnumerable conditions, RewriteCo if (condResult.Success && trackAllCaptures && prevBackReferences != null) { - prevBackReferences.Add(currentBackReferences); + prevBackReferences.Add(condResult.BackReferences); currentBackReferences = prevBackReferences; } prevBackReferences = currentBackReferences; } - return new MatchResults { BackReferences = prevBackReferences, Success = condResult.Success }; + Debug.Assert(condResult != null, "ConditionEvaluator must be passed at least one condition to evaluate."); + return new MatchResults(condResult.Success, prevBackReferences); } } -} \ No newline at end of file +} diff --git a/src/Middleware/Rewrite/src/ApacheModRewrite/CookieActionFactory.cs b/src/Middleware/Rewrite/src/ApacheModRewrite/CookieActionFactory.cs index b4217f8b6095..b037766c48c6 100644 --- a/src/Middleware/Rewrite/src/ApacheModRewrite/CookieActionFactory.cs +++ b/src/Middleware/Rewrite/src/ApacheModRewrite/CookieActionFactory.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.Globalization; using Microsoft.AspNetCore.Rewrite.UrlActions; @@ -29,7 +30,7 @@ public ChangeCookieAction Create(string flagValue) i++; } - ChangeCookieAction action = null; + ChangeCookieAction? action = null; var currentField = Fields.Name; var start = i; for (; i < flagValue.Length; i++) @@ -54,23 +55,25 @@ public ChangeCookieAction Create(string flagValue) throw new FormatException(Resources.FormatError_InvalidChangeCookieFlag(flagValue)); } - return action; + return action!; } - private static void SetActionOption(string value, Fields tokenType, ref ChangeCookieAction action) + private static void SetActionOption(string value, Fields tokenType, ref ChangeCookieAction? action) { + Debug.Assert(action != null || tokenType == Fields.Name); + switch (tokenType) { case Fields.Name: action = new ChangeCookieAction(value); break; case Fields.Value: - action.Value = value; + action!.Value = value; break; case Fields.Domain: // despite what spec says, an empty domain field is allowed in mod_rewrite // by specifying NAME:VALUE:; - action.Domain = string.IsNullOrEmpty(value) || value == ";" + action!.Domain = string.IsNullOrEmpty(value) || value == ";" ? null : value; break; @@ -86,18 +89,18 @@ private static void SetActionOption(string value, Fields tokenType, ref ChangeCo throw new FormatException(Resources.FormatError_CouldNotParseInteger(value)); } - action.Lifetime = TimeSpan.FromMinutes(minutes); + action!.Lifetime = TimeSpan.FromMinutes(minutes); break; case Fields.Path: - action.Path = value; + action!.Path = value; break; case Fields.Secure: - action.Secure = "secure".Equals(value, StringComparison.OrdinalIgnoreCase) + action!.Secure = "secure".Equals(value, StringComparison.OrdinalIgnoreCase) || "true".Equals(value, StringComparison.OrdinalIgnoreCase) || value == "1"; break; case Fields.HttpOnly: - action.HttpOnly = "httponly".Equals(value, StringComparison.OrdinalIgnoreCase) + action!.HttpOnly = "httponly".Equals(value, StringComparison.OrdinalIgnoreCase) || "true".Equals(value, StringComparison.OrdinalIgnoreCase) || value == "1"; break; @@ -117,4 +120,4 @@ private enum Fields HttpOnly } } -} \ No newline at end of file +} diff --git a/src/Middleware/Rewrite/src/ApacheModRewrite/FileParser.cs b/src/Middleware/Rewrite/src/ApacheModRewrite/FileParser.cs index 7f1eacc0b5bd..1c02c6d7a32c 100644 --- a/src/Middleware/Rewrite/src/ApacheModRewrite/FileParser.cs +++ b/src/Middleware/Rewrite/src/ApacheModRewrite/FileParser.cs @@ -11,7 +11,7 @@ internal class FileParser { public IList Parse(TextReader input) { - string line; + string? line; var rules = new List(); var builder = new RuleBuilder(); var lineNum = 0; @@ -34,7 +34,7 @@ public IList Parse(TextReader input) { continue; } - var tokens = tokenizer.Tokenize(line); + var tokens = tokenizer.Tokenize(line)!; if (tokens.Count > 4) { // This means the line didn't have an appropriate format, throw format exception diff --git a/src/Middleware/Rewrite/src/ApacheModRewrite/Flags.cs b/src/Middleware/Rewrite/src/ApacheModRewrite/Flags.cs index a180d65ef8b1..e1fad1a02885 100644 --- a/src/Middleware/Rewrite/src/ApacheModRewrite/Flags.cs +++ b/src/Middleware/Rewrite/src/ApacheModRewrite/Flags.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.Collections.Generic; +using System.Diagnostics.CodeAnalysis; namespace Microsoft.AspNetCore.Rewrite.ApacheModRewrite { @@ -31,10 +32,9 @@ public void SetFlag(FlagType flag, string value) FlagDictionary[flag] = value; } - public bool GetValue(FlagType flag, out string value) + public bool GetValue(FlagType flag, [NotNullWhen(true)] out string? value) { - string res; - if (!FlagDictionary.TryGetValue(flag, out res)) + if (!FlagDictionary.TryGetValue(flag, out var res)) { value = null; return false; @@ -43,12 +43,11 @@ public bool GetValue(FlagType flag, out string value) return true; } - public string this[FlagType flag] + public string? this[FlagType flag] { get { - string res; - if (!FlagDictionary.TryGetValue(flag, out res)) + if (!FlagDictionary.TryGetValue(flag, out var res)) { return null; } @@ -62,8 +61,7 @@ public string this[FlagType flag] public bool HasFlag(FlagType flag) { - string res; - return FlagDictionary.TryGetValue(flag, out res); + return FlagDictionary.ContainsKey(flag); } } } diff --git a/src/Middleware/Rewrite/src/ApacheModRewrite/ParsedModRewriteCondition.cs b/src/Middleware/Rewrite/src/ApacheModRewrite/ParsedModRewriteCondition.cs index df56fadf855d..c76bcccb159f 100644 --- a/src/Middleware/Rewrite/src/ApacheModRewrite/ParsedModRewriteCondition.cs +++ b/src/Middleware/Rewrite/src/ApacheModRewrite/ParsedModRewriteCondition.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.Rewrite.ApacheModRewrite @@ -8,11 +8,11 @@ internal class ParsedModRewriteInput public bool Invert { get; set; } public ConditionType ConditionType { get; set; } public OperationType OperationType { get; set; } - public string Operand { get; set; } + public string? Operand { get; set; } public ParsedModRewriteInput() { } - public ParsedModRewriteInput(bool invert, ConditionType conditionType, OperationType operationType, string operand) + public ParsedModRewriteInput(bool invert, ConditionType conditionType, OperationType operationType, string? operand) { Invert = invert; ConditionType = conditionType; diff --git a/src/Middleware/Rewrite/src/ApacheModRewrite/RuleBuilder.cs b/src/Middleware/Rewrite/src/ApacheModRewrite/RuleBuilder.cs index b75db70da2bc..ab7e50d681f9 100644 --- a/src/Middleware/Rewrite/src/ApacheModRewrite/RuleBuilder.cs +++ b/src/Middleware/Rewrite/src/ApacheModRewrite/RuleBuilder.cs @@ -1,8 +1,9 @@ -// 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.Collections.Generic; +using System.Diagnostics; using System.Globalization; using System.Text.RegularExpressions; using Microsoft.AspNetCore.Http; @@ -13,9 +14,9 @@ namespace Microsoft.AspNetCore.Rewrite.ApacheModRewrite { internal class RuleBuilder { - private IList _conditions; + private IList? _conditions; internal IList _actions = new List(); - private UrlMatch _match; + private UrlMatch? _match; private CookieActionFactory _cookieActionFactory = new CookieActionFactory(); private readonly TimeSpan _regexTimeout = TimeSpan.FromSeconds(1); @@ -31,7 +32,7 @@ public ApacheModRewriteRule Build() public void AddRule(string rule) { - var tokens = new Tokenizer().Tokenize(rule); + var tokens = new Tokenizer().Tokenize(rule)!; var regex = new RuleRegexParser().ParseRuleRegex(tokens[1]); var pattern = new TestStringParser().Parse(tokens[2]); @@ -58,65 +59,66 @@ public void AddConditionFromParts( _conditions = new List(); } - var condition = new Condition(); - - condition.OrNext = flags.HasFlag(FlagType.Or); - condition.Input = pattern; + var orNext = flags.HasFlag(FlagType.Or); + UrlMatch match; switch (input.ConditionType) { case ConditionType.Regex: + Debug.Assert(input.Operand != null); if (flags.HasFlag(FlagType.NoCase)) { - condition.Match = new RegexMatch(new Regex(input.Operand, RegexOptions.CultureInvariant | RegexOptions.Compiled | RegexOptions.IgnoreCase, _regexTimeout), input.Invert); + match = new RegexMatch(new Regex(input.Operand, RegexOptions.CultureInvariant | RegexOptions.Compiled | RegexOptions.IgnoreCase, _regexTimeout), input.Invert); } else { - condition.Match = new RegexMatch(new Regex(input.Operand, RegexOptions.CultureInvariant | RegexOptions.Compiled, _regexTimeout), input.Invert); + match = new RegexMatch(new Regex(input.Operand, RegexOptions.CultureInvariant | RegexOptions.Compiled, _regexTimeout), input.Invert); } break; case ConditionType.IntComp: + Debug.Assert(input.Operand != null); switch (input.OperationType) { case OperationType.Equal: - condition.Match = new IntegerMatch(input.Operand, IntegerOperationType.Equal); + match = new IntegerMatch(input.Operand, IntegerOperationType.Equal); break; case OperationType.Greater: - condition.Match = new IntegerMatch(input.Operand, IntegerOperationType.Greater); + match = new IntegerMatch(input.Operand, IntegerOperationType.Greater); break; case OperationType.GreaterEqual: - condition.Match = new IntegerMatch(input.Operand, IntegerOperationType.GreaterEqual); + match = new IntegerMatch(input.Operand, IntegerOperationType.GreaterEqual); break; case OperationType.Less: - condition.Match = new IntegerMatch(input.Operand, IntegerOperationType.Less); + match = new IntegerMatch(input.Operand, IntegerOperationType.Less); break; case OperationType.LessEqual: - condition.Match = new IntegerMatch(input.Operand, IntegerOperationType.LessEqual); + match = new IntegerMatch(input.Operand, IntegerOperationType.LessEqual); break; case OperationType.NotEqual: - condition.Match = new IntegerMatch(input.Operand, IntegerOperationType.NotEqual); + match = new IntegerMatch(input.Operand, IntegerOperationType.NotEqual); break; default: throw new ArgumentException("Invalid operation for integer comparison."); } break; case ConditionType.StringComp: + Debug.Assert(input.Operand != null); switch (input.OperationType) { case OperationType.Equal: - condition.Match = new StringMatch(input.Operand, StringOperationType.Equal, input.Invert); + match = new StringMatch(input.Operand, StringOperationType.Equal, input.Invert); break; case OperationType.Greater: - condition.Match = new StringMatch(input.Operand, StringOperationType.Greater, input.Invert); + match = new StringMatch(input.Operand, StringOperationType.Greater, input.Invert); break; case OperationType.GreaterEqual: - condition.Match = new StringMatch(input.Operand, StringOperationType.GreaterEqual, input.Invert); + match = new StringMatch(input.Operand, StringOperationType.GreaterEqual, input.Invert); break; case OperationType.Less: - condition.Match = new StringMatch(input.Operand, StringOperationType.Less, input.Invert); + match = new StringMatch(input.Operand, StringOperationType.Less, input.Invert); break; case OperationType.LessEqual: - condition.Match = new StringMatch(input.Operand, StringOperationType.LessEqual, input.Invert); + match = new StringMatch(input.Operand, StringOperationType.LessEqual, input.Invert); break; default: throw new ArgumentException("Invalid operation for string comparison."); @@ -126,20 +128,20 @@ public void AddConditionFromParts( switch (input.OperationType) { case OperationType.Directory: - condition.Match = new IsDirectoryMatch(input.Invert); + match = new IsDirectoryMatch(input.Invert); break; case OperationType.RegularFile: - condition.Match = new IsFileMatch(input.Invert); + match = new IsFileMatch(input.Invert); break; case OperationType.ExistingFile: - condition.Match = new IsFileMatch(input.Invert); + match = new IsFileMatch(input.Invert); break; case OperationType.SymbolicLink: // TODO see if FileAttributes.ReparsePoint works for this? throw new NotImplementedException("Symbolic links are not supported because " + "of cross platform implementation"); case OperationType.Size: - condition.Match = new FileSizeMatch(input.Invert); + match = new FileSizeMatch(input.Invert); break; case OperationType.ExistingUrl: throw new NotSupportedException("Existing Url lookups not supported because it requires a subrequest"); @@ -151,6 +153,8 @@ public void AddConditionFromParts( } break; } + + var condition = new Condition(pattern, match, orNext); _conditions.Add(condition); } @@ -158,6 +162,7 @@ public void AddMatch( ParsedModRewriteInput input, Flags flags) { + Debug.Assert(input.Operand != null); if (flags.HasFlag(FlagType.NoCase)) { _match = new RegexMatch(new Regex(input.Operand, RegexOptions.CultureInvariant | RegexOptions.Compiled | RegexOptions.IgnoreCase, _regexTimeout), input.Invert); @@ -172,14 +177,13 @@ public void AddAction( Pattern pattern, Flags flags) { - string flag; - if (flags.GetValue(FlagType.Cookie, out flag)) + if (flags.GetValue(FlagType.Cookie, out var flag)) { var action = _cookieActionFactory.Create(flag); _actions.Add(action); } - if (flags.GetValue(FlagType.Env, out flag)) + if (flags.GetValue(FlagType.Env, out _)) { throw new NotSupportedException(Resources.Error_ChangeEnvironmentNotSupported); } @@ -199,8 +203,7 @@ public void AddAction( var queryStringDelete = flags.HasFlag(FlagType.QSDiscard); // is redirect? - string statusCode; - if (flags.GetValue(FlagType.Redirect, out statusCode)) + if (flags.GetValue(FlagType.Redirect, out var statusCode)) { int responseStatusCode; if (string.IsNullOrEmpty(statusCode)) @@ -222,4 +225,4 @@ public void AddAction( } } } -} \ No newline at end of file +} diff --git a/src/Middleware/Rewrite/src/ApacheModRewrite/TestStringParser.cs b/src/Middleware/Rewrite/src/ApacheModRewrite/TestStringParser.cs index 7dc3b70f93f9..9bd542ad978e 100644 --- a/src/Middleware/Rewrite/src/ApacheModRewrite/TestStringParser.cs +++ b/src/Middleware/Rewrite/src/ApacheModRewrite/TestStringParser.cs @@ -62,7 +62,7 @@ public Pattern Parse(string testString) if (context.Current >= '0' && context.Current <= '9') { context.Next(); - var ruleVariable = context.Capture(); + var ruleVariable = context.Capture()!; context.Back(); var parsedIndex = int.Parse(ruleVariable, CultureInfo.InvariantCulture); @@ -117,7 +117,7 @@ private static void ParseConditionParameter(ParserContext context, IList= '0' && context.Current <= '9') @@ -126,7 +126,7 @@ private static void ParseConditionParameter(ParserContext context, IList results) { context.Mark(); - string literal; + string? literal; while (true) { if (context.Current == Percent || context.Current == Dollar) @@ -166,7 +166,7 @@ private static void ParseLiteral(ParserContext context, IList re } } // add results - results.Add(new LiteralSegment(literal)); + results.Add(new LiteralSegment(literal!)); } } } diff --git a/src/Middleware/Rewrite/src/ApacheModRewrite/Tokenizer.cs b/src/Middleware/Rewrite/src/ApacheModRewrite/Tokenizer.cs index 609e1b3e08cc..3d3f5de7617b 100644 --- a/src/Middleware/Rewrite/src/ApacheModRewrite/Tokenizer.cs +++ b/src/Middleware/Rewrite/src/ApacheModRewrite/Tokenizer.cs @@ -1,8 +1,9 @@ -// 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.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.RegularExpressions; namespace Microsoft.AspNetCore.Rewrite.ApacheModRewrite @@ -22,7 +23,7 @@ internal class Tokenizer /// /// The rule to tokenize. /// A list of tokens. - public IList Tokenize(string rule) + public IList? Tokenize(string rule) { // TODO make list of strings a reference to the original rule? (run into problems with escaped spaces). // TODO handle "s and probably replace \ character with no slash. diff --git a/src/Middleware/Rewrite/src/ApacheModRewriteOptionsExtensions.cs b/src/Middleware/Rewrite/src/ApacheModRewriteOptionsExtensions.cs index 2aff011f4e48..5d902cb1786e 100644 --- a/src/Middleware/Rewrite/src/ApacheModRewriteOptionsExtensions.cs +++ b/src/Middleware/Rewrite/src/ApacheModRewriteOptionsExtensions.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.IO; using Microsoft.AspNetCore.Rewrite.ApacheModRewrite; diff --git a/src/Middleware/Rewrite/src/Extensions/RewriteMiddlewareLoggingExtensions.cs b/src/Middleware/Rewrite/src/Extensions/RewriteMiddlewareLoggingExtensions.cs index 177469464f4f..c84a0d421ac3 100644 --- a/src/Middleware/Rewrite/src/Extensions/RewriteMiddlewareLoggingExtensions.cs +++ b/src/Middleware/Rewrite/src/Extensions/RewriteMiddlewareLoggingExtensions.cs @@ -8,20 +8,20 @@ namespace Microsoft.AspNetCore.Rewrite.Logging { internal static class RewriteMiddlewareLoggingExtensions { - private static readonly Action _requestContinueResults; - private static readonly Action _requestResponseComplete; - private static readonly Action _requestStopRules; - private static readonly Action _urlRewriteNotMatchedRule; - private static readonly Action _urlRewriteMatchedRule; - private static readonly Action _modRewriteNotMatchedRule; - private static readonly Action _modRewriteMatchedRule; - private static readonly Action _redirectedToHttps; - private static readonly Action _redirectedToWww; - private static readonly Action _redirectedToNonWww; - private static readonly Action _redirectedRequest; - private static readonly Action _rewrittenRequest; - private static readonly Action _abortedRequest; - private static readonly Action _customResponse; + private static readonly Action _requestContinueResults; + private static readonly Action _requestResponseComplete; + private static readonly Action _requestStopRules; + private static readonly Action _urlRewriteNotMatchedRule; + private static readonly Action _urlRewriteMatchedRule; + private static readonly Action _modRewriteNotMatchedRule; + private static readonly Action _modRewriteMatchedRule; + private static readonly Action _redirectedToHttps; + private static readonly Action _redirectedToWww; + private static readonly Action _redirectedToNonWww; + private static readonly Action _redirectedRequest; + private static readonly Action _rewrittenRequest; + private static readonly Action _abortedRequest; + private static readonly Action _customResponse; static RewriteMiddlewareLoggingExtensions() { @@ -40,12 +40,12 @@ static RewriteMiddlewareLoggingExtensions() new EventId(3, "RequestStopRules"), "Request is done applying rules. Url was rewritten to {rewrittenUrl}"); - _urlRewriteNotMatchedRule = LoggerMessage.Define( + _urlRewriteNotMatchedRule = LoggerMessage.Define( LogLevel.Debug, new EventId(4, "UrlRewriteNotMatchedRule"), "Request did not match current rule '{Name}'."); - _urlRewriteMatchedRule = LoggerMessage.Define( + _urlRewriteMatchedRule = LoggerMessage.Define( LogLevel.Debug, new EventId(5, "UrlRewriteMatchedRule"), "Request matched current UrlRewriteRule '{Name}'."); @@ -111,12 +111,12 @@ public static void RewriteMiddlewareRequestStopRules(this ILogger logger, string _requestStopRules(logger, rewrittenUrl, null); } - public static void UrlRewriteNotMatchedRule(this ILogger logger, string name) + public static void UrlRewriteNotMatchedRule(this ILogger logger, string? name) { _urlRewriteNotMatchedRule(logger, name, null); } - public static void UrlRewriteMatchedRule(this ILogger logger, string name) + public static void UrlRewriteMatchedRule(this ILogger logger, string? name) { _urlRewriteMatchedRule(logger, name, null); } diff --git a/src/Middleware/Rewrite/src/IISUrlRewrite/Condition.cs b/src/Middleware/Rewrite/src/IISUrlRewrite/Condition.cs index e453a1563a20..8f004e652f97 100644 --- a/src/Middleware/Rewrite/src/IISUrlRewrite/Condition.cs +++ b/src/Middleware/Rewrite/src/IISUrlRewrite/Condition.cs @@ -1,14 +1,20 @@ -// 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.Rewrite.IISUrlRewrite { internal class Condition { - public Pattern Input { get; set; } - public UrlMatch Match { get; set; } + public Condition(Pattern input, UrlMatch match) + { + Input = input; + Match = match; + } + + public Pattern Input { get; } + public UrlMatch Match { get; } - public MatchResults Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public MatchResults Evaluate(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { var pattern = Input.Evaluate(context, ruleBackReferences, conditionBackReferences); return Match.Evaluate(pattern, context); diff --git a/src/Middleware/Rewrite/src/IISUrlRewrite/ConditionEvaluator.cs b/src/Middleware/Rewrite/src/IISUrlRewrite/ConditionEvaluator.cs index c3d9f5e94525..15768a97256a 100644 --- a/src/Middleware/Rewrite/src/IISUrlRewrite/ConditionEvaluator.cs +++ b/src/Middleware/Rewrite/src/IISUrlRewrite/ConditionEvaluator.cs @@ -1,14 +1,14 @@ -// 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.Rewrite.IISUrlRewrite { internal static class ConditionEvaluator { - public static MatchResults Evaluate(ConditionCollection conditions, RewriteContext context, BackReferenceCollection backReferences) + public static MatchResults Evaluate(ConditionCollection conditions, RewriteContext context, BackReferenceCollection? backReferences) { - BackReferenceCollection prevBackReferences = null; - MatchResults condResult = null; + BackReferenceCollection? prevBackReferences = null; + MatchResults? condResult = null; var orSucceeded = false; foreach (var condition in conditions) { @@ -36,14 +36,14 @@ public static MatchResults Evaluate(ConditionCollection conditions, RewriteConte if (condResult.Success && conditions.TrackAllCaptures && prevBackReferences!= null) { - prevBackReferences.Add(currentBackReferences); + prevBackReferences.Add(currentBackReferences!); currentBackReferences = prevBackReferences; } prevBackReferences = currentBackReferences; } - return new MatchResults { BackReferences = prevBackReferences, Success = condResult.Success }; + return new MatchResults(condResult!.Success, prevBackReferences); } } -} \ No newline at end of file +} diff --git a/src/Middleware/Rewrite/src/IISUrlRewrite/IISRewriteMap.cs b/src/Middleware/Rewrite/src/IISUrlRewrite/IISRewriteMap.cs index 05b54ace4a86..e69dde12354d 100644 --- a/src/Middleware/Rewrite/src/IISUrlRewrite/IISRewriteMap.cs +++ b/src/Middleware/Rewrite/src/IISUrlRewrite/IISRewriteMap.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; @@ -21,12 +21,11 @@ public IISRewriteMap(string name) public string Name { get; } - public string this[string key] + public string? this[string key] { get { - string value; - return _map.TryGetValue(key, out value) ? value : null; + return _map.TryGetValue(key, out var value) ? value : null; } set { @@ -42,4 +41,4 @@ public string this[string key] } } } -} \ No newline at end of file +} diff --git a/src/Middleware/Rewrite/src/IISUrlRewrite/IISRewriteMapCollection.cs b/src/Middleware/Rewrite/src/IISUrlRewrite/IISRewriteMapCollection.cs index b473a5295cac..9c69d0ec18d8 100644 --- a/src/Middleware/Rewrite/src/IISUrlRewrite/IISRewriteMapCollection.cs +++ b/src/Middleware/Rewrite/src/IISUrlRewrite/IISRewriteMapCollection.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; @@ -20,12 +20,11 @@ public void Add(IISRewriteMap rewriteMap) public int Count => _rewriteMaps.Count; - public IISRewriteMap this[string key] + public IISRewriteMap? this[string key] { get { - IISRewriteMap value; - return _rewriteMaps.TryGetValue(key, out value) ? value : null; + return _rewriteMaps.TryGetValue(key, out var value) ? value : null; } } @@ -39,4 +38,4 @@ public IEnumerator GetEnumerator() return _rewriteMaps.Values.GetEnumerator(); } } -} \ No newline at end of file +} diff --git a/src/Middleware/Rewrite/src/IISUrlRewrite/IISUrlRewriteRule.cs b/src/Middleware/Rewrite/src/IISUrlRewrite/IISUrlRewriteRule.cs index 730477e06f5e..dbc7e9631428 100644 --- a/src/Middleware/Rewrite/src/IISUrlRewrite/IISUrlRewriteRule.cs +++ b/src/Middleware/Rewrite/src/IISUrlRewrite/IISUrlRewriteRule.cs @@ -8,23 +8,23 @@ namespace Microsoft.AspNetCore.Rewrite.IISUrlRewrite { internal class IISUrlRewriteRule : IRule { - public string Name { get; } + public string? Name { get; } public UrlMatch InitialMatch { get; } - public ConditionCollection Conditions { get; } + public ConditionCollection? Conditions { get; } public UrlAction Action { get; } public bool Global { get; } - public IISUrlRewriteRule(string name, + public IISUrlRewriteRule(string? name, UrlMatch initialMatch, - ConditionCollection conditions, + ConditionCollection? conditions, UrlAction action) : this(name, initialMatch, conditions, action, false) { } - public IISUrlRewriteRule(string name, + public IISUrlRewriteRule(string? name, UrlMatch initialMatch, - ConditionCollection conditions, + ConditionCollection? conditions, UrlAction action, bool global) { @@ -56,7 +56,7 @@ public virtual void ApplyRule(RewriteContext context) return; } - MatchResults condResult = null; + MatchResults? condResult = null; if (Conditions != null) { condResult = ConditionEvaluator.Evaluate(Conditions, context, initMatchResults.BackReferences); diff --git a/src/Middleware/Rewrite/src/IISUrlRewrite/InputParser.cs b/src/Middleware/Rewrite/src/IISUrlRewrite/InputParser.cs index cb7672b5de29..5e1cccba736c 100644 --- a/src/Middleware/Rewrite/src/IISUrlRewrite/InputParser.cs +++ b/src/Middleware/Rewrite/src/IISUrlRewrite/InputParser.cs @@ -13,14 +13,14 @@ internal class InputParser private const char Colon = ':'; private const char OpenBrace = '{'; private const char CloseBrace = '}'; - private readonly IISRewriteMapCollection _rewriteMaps; + private readonly IISRewriteMapCollection? _rewriteMaps; private readonly bool _alwaysUseManagedServerVariables; public InputParser() { } - public InputParser(IISRewriteMapCollection rewriteMaps, bool alwaysUseManagedServerVariables) + public InputParser(IISRewriteMapCollection? rewriteMaps, bool alwaysUseManagedServerVariables) { _rewriteMaps = rewriteMaps; _alwaysUseManagedServerVariables = alwaysUseManagedServerVariables; @@ -93,14 +93,14 @@ private void ParseParameter(ParserContext context, IList results // 3. {C:1} - Condition Parameter // 4. {function:xxx} - String function // (unless we support Reload) - string parameter; + string? parameter; while (context.Next()) { if (context.Current == CloseBrace) { // This is just a server variable, so we do a lookup and verify the server variable exists. parameter = context.Capture(); - results.Add(ServerVariables.FindServerVariable(parameter, context, uriMatchPart, _alwaysUseManagedServerVariables)); + results.Add(ServerVariables.FindServerVariable(parameter!, context, uriMatchPart, _alwaysUseManagedServerVariables)); return; } else if (context.Current == Colon) @@ -152,7 +152,7 @@ private void ParseParameter(ParserContext context, IList results return; } default: - var rewriteMap = _rewriteMaps?[parameter]; + var rewriteMap = _rewriteMaps?[parameter!]; if (rewriteMap != null) { var pattern = ParseString(context, uriMatchPart); @@ -199,7 +199,7 @@ private static int GetBackReferenceIndex(ParserContext context) private static void ParseLiteral(ParserContext context, IList results) { context.Mark(); - string literal; + string? literal; while (true) { if (context.Current == OpenBrace || context.Current == CloseBrace) @@ -216,7 +216,7 @@ private static void ParseLiteral(ParserContext context, IList re } } - results.Add(new LiteralSegment(literal)); + results.Add(new LiteralSegment(literal!)); } } } diff --git a/src/Middleware/Rewrite/src/IISUrlRewrite/RewriteMapParser.cs b/src/Middleware/Rewrite/src/IISUrlRewrite/RewriteMapParser.cs index c15105ca5539..13ecfee1e1bd 100644 --- a/src/Middleware/Rewrite/src/IISUrlRewrite/RewriteMapParser.cs +++ b/src/Middleware/Rewrite/src/IISUrlRewrite/RewriteMapParser.cs @@ -9,7 +9,7 @@ namespace Microsoft.AspNetCore.Rewrite.IISUrlRewrite { internal static class RewriteMapParser { - public static IISRewriteMapCollection Parse(XElement xmlRoot) + public static IISRewriteMapCollection? Parse(XElement xmlRoot) { if (xmlRoot == null) { @@ -25,10 +25,10 @@ public static IISRewriteMapCollection Parse(XElement xmlRoot) var rewriteMaps = new IISRewriteMapCollection(); foreach (var mapElement in mapsElement.Elements(RewriteTags.RewriteMap)) { - var map = new IISRewriteMap(mapElement.Attribute(RewriteTags.Name)?.Value); + var map = new IISRewriteMap(mapElement.Attribute(RewriteTags.Name)?.Value!); foreach (var addElement in mapElement.Elements(RewriteTags.Add)) { - map[addElement.Attribute(RewriteTags.Key).Value.ToLowerInvariant()] = addElement.Attribute(RewriteTags.Value).Value; + map[addElement.Attribute(RewriteTags.Key)!.Value.ToLowerInvariant()] = addElement.Attribute(RewriteTags.Value)!.Value; } rewriteMaps.Add(map); } @@ -36,4 +36,4 @@ public static IISRewriteMapCollection Parse(XElement xmlRoot) return rewriteMaps; } } -} \ No newline at end of file +} diff --git a/src/Middleware/Rewrite/src/IISUrlRewrite/ServerVariables.cs b/src/Middleware/Rewrite/src/IISUrlRewrite/ServerVariables.cs index 68185b6e684e..e737bb1ba888 100644 --- a/src/Middleware/Rewrite/src/IISUrlRewrite/ServerVariables.cs +++ b/src/Middleware/Rewrite/src/IISUrlRewrite/ServerVariables.cs @@ -20,7 +20,7 @@ internal static class ServerVariables /// The matching public static PatternSegment FindServerVariable(string serverVariable, ParserContext context, UriMatchPart uriMatchPart, bool alwaysUseManagedServerVariables) { - Func managedVariableThunk = default; + Func? managedVariableThunk = default; switch (serverVariable) { diff --git a/src/Middleware/Rewrite/src/IISUrlRewrite/UriMatchCondition.cs b/src/Middleware/Rewrite/src/IISUrlRewrite/UriMatchCondition.cs index 0dd92a0b847f..c4fbd2e0254f 100644 --- a/src/Middleware/Rewrite/src/IISUrlRewrite/UriMatchCondition.cs +++ b/src/Middleware/Rewrite/src/IISUrlRewrite/UriMatchCondition.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; @@ -9,9 +9,19 @@ namespace Microsoft.AspNetCore.Rewrite.IISUrlRewrite { internal class UriMatchCondition : Condition { - private TimeSpan _regexTimeout = TimeSpan.FromSeconds(1); + private static readonly TimeSpan _regexTimeout = TimeSpan.FromSeconds(1); public UriMatchCondition(InputParser inputParser, string input, string pattern, UriMatchPart uriMatchPart, bool ignoreCase, bool negate) + : base(CreatePattern(inputParser, input, uriMatchPart), CreateRegexMatch(pattern, ignoreCase, negate)) + { + } + + private static Pattern CreatePattern(InputParser inputParser, string input, UriMatchPart uriMatchPart) + { + return inputParser.ParseInputString(input, uriMatchPart); + } + + private static RegexMatch CreateRegexMatch(string pattern, bool ignoreCase, bool negate) { var regexOptions = RegexOptions.CultureInvariant | RegexOptions.Compiled; regexOptions = ignoreCase ? regexOptions | RegexOptions.IgnoreCase : regexOptions; @@ -20,8 +30,7 @@ public UriMatchCondition(InputParser inputParser, string input, string pattern, regexOptions, _regexTimeout ); - Input = inputParser.ParseInputString(input, uriMatchPart); - Match = new RegexMatch(regex, negate); + return new RegexMatch(regex, negate); } } -} \ No newline at end of file +} diff --git a/src/Middleware/Rewrite/src/IISUrlRewrite/UrlRewriteFileParser.cs b/src/Middleware/Rewrite/src/IISUrlRewrite/UrlRewriteFileParser.cs index 25f4c57f6223..6a2973b5bd4a 100644 --- a/src/Middleware/Rewrite/src/IISUrlRewrite/UrlRewriteFileParser.cs +++ b/src/Middleware/Rewrite/src/IISUrlRewrite/UrlRewriteFileParser.cs @@ -14,7 +14,7 @@ namespace Microsoft.AspNetCore.Rewrite.IISUrlRewrite { internal class UrlRewriteFileParser { - private InputParser _inputParser; + private InputParser _inputParser = default!; /// /// Parse an IIS rewrite section into a list of s. @@ -39,7 +39,7 @@ public IList Parse(TextReader reader, bool alwaysUseManagedSe return result; } - private void ParseRules(XElement rules, IList result, bool global) + private void ParseRules(XElement? rules, IList result, bool global) { if (rules == null) { @@ -104,7 +104,7 @@ private void ParseMatch(XElement match, UrlRewriteRuleBuilder builder, PatternSy builder.AddUrlMatch(parsedInputString, ignoreCase, negate, patternSyntax); } - private void ParseConditions(XElement conditions, UrlRewriteRuleBuilder builder, PatternSyntax patternSyntax) + private void ParseConditions(XElement? conditions, UrlRewriteRuleBuilder builder, PatternSyntax patternSyntax) { if (conditions == null) { @@ -159,12 +159,12 @@ private void ParseCondition(XElement conditionElement, UrlRewriteRuleBuilder bui } case MatchType.IsDirectory: { - condition = new Condition { Input = _inputParser.ParseInputString(parsedInputString, builder.UriMatchPart), Match = new IsDirectoryMatch(negate) }; + condition = new Condition(_inputParser.ParseInputString(parsedInputString, builder.UriMatchPart), new IsDirectoryMatch(negate)); break; } case MatchType.IsFile: { - condition = new Condition { Input = _inputParser.ParseInputString(parsedInputString, builder.UriMatchPart), Match = new IsFileMatch(negate) }; + condition = new Condition(_inputParser.ParseInputString(parsedInputString, builder.UriMatchPart), new IsFileMatch(negate)); break; } default: @@ -179,7 +179,7 @@ private void ParseCondition(XElement conditionElement, UrlRewriteRuleBuilder bui { throw new FormatException("Match does not have an associated pattern attribute in condition"); } - condition = new Condition { Input = _inputParser.ParseInputString(parsedInputString, builder.UriMatchPart), Match = new ExactMatch(ignoreCase, parsedPatternString, negate) }; + condition = new Condition(_inputParser.ParseInputString(parsedInputString, builder.UriMatchPart), new ExactMatch(ignoreCase, parsedPatternString, negate)); break; default: throw new FormatException("Unrecognized pattern syntax"); @@ -202,7 +202,7 @@ private void ParseUrlAction(XElement urlAction, UrlRewriteRuleBuilder builder, b var url = string.Empty; if (urlAction.Attribute(RewriteTags.Url) != null) { - url = urlAction.Attribute(RewriteTags.Url).Value; + url = urlAction.Attribute(RewriteTags.Url)!.Value; if (string.IsNullOrEmpty(url)) { throw new InvalidUrlRewriteFormatException(urlAction, "Url attribute cannot contain an empty string"); diff --git a/src/Middleware/Rewrite/src/IISUrlRewrite/UrlRewriteRuleBuilder.cs b/src/Middleware/Rewrite/src/IISUrlRewrite/UrlRewriteRuleBuilder.cs index 1e12bb05018a..1fe234b559f9 100644 --- a/src/Middleware/Rewrite/src/IISUrlRewrite/UrlRewriteRuleBuilder.cs +++ b/src/Middleware/Rewrite/src/IISUrlRewrite/UrlRewriteRuleBuilder.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,14 +12,14 @@ internal class UrlRewriteRuleBuilder { private readonly TimeSpan _regexTimeout = TimeSpan.FromSeconds(1); - public string Name { get; set; } + public string? Name { get; set; } public bool Enabled { get; set; } public bool Global { get; set; } public UriMatchPart UriMatchPart => Global ? UriMatchPart.Full : UriMatchPart.Path; - private UrlMatch _initialMatch; - private ConditionCollection _conditions; - private UrlAction _action; + private UrlMatch? _initialMatch; + private ConditionCollection? _conditions; + private UrlAction? _action; public IISUrlRewriteRule Build() { @@ -93,4 +93,4 @@ public void AddUrlConditions(IEnumerable conditions) _conditions.AddConditions(conditions); } } -} \ No newline at end of file +} diff --git a/src/Middleware/Rewrite/src/IISUrlRewriteOptionsExtensions.cs b/src/Middleware/Rewrite/src/IISUrlRewriteOptionsExtensions.cs index 84d07728c673..e8e4f05feb2b 100644 --- a/src/Middleware/Rewrite/src/IISUrlRewriteOptionsExtensions.cs +++ b/src/Middleware/Rewrite/src/IISUrlRewriteOptionsExtensions.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.Diagnostics.CodeAnalysis; using System.IO; diff --git a/src/Middleware/Rewrite/src/IRule.cs b/src/Middleware/Rewrite/src/IRule.cs index a62f97195e25..4b4561e5514b 100644 --- a/src/Middleware/Rewrite/src/IRule.cs +++ b/src/Middleware/Rewrite/src/IRule.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 - namespace Microsoft.AspNetCore.Rewrite { /// diff --git a/src/Middleware/Rewrite/src/MatchResults.cs b/src/Middleware/Rewrite/src/MatchResults.cs index 9bb18cefa881..97bd54af9239 100644 --- a/src/Middleware/Rewrite/src/MatchResults.cs +++ b/src/Middleware/Rewrite/src/MatchResults.cs @@ -1,16 +1,25 @@ -// 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; +using System.Diagnostics.CodeAnalysis; using System.Text.RegularExpressions; namespace Microsoft.AspNetCore.Rewrite { internal class MatchResults { - public static readonly MatchResults EmptySuccess = new MatchResults { Success = true }; - public static readonly MatchResults EmptyFailure = new MatchResults { Success = false }; + public static readonly MatchResults EmptySuccess = new MatchResults(success: true); + public static readonly MatchResults EmptyFailure = new MatchResults(success: false); - public bool Success { get; set; } - public BackReferenceCollection BackReferences { get; set; } + public MatchResults(bool success, BackReferenceCollection? backReferences = null) + { + Success = success; + BackReferences = backReferences; + } + + [MemberNotNullWhen(true, nameof(BackReferences))] + public bool Success { get; } + public BackReferenceCollection? BackReferences { get; } } } diff --git a/src/Middleware/Rewrite/src/Microsoft.AspNetCore.Rewrite.csproj b/src/Middleware/Rewrite/src/Microsoft.AspNetCore.Rewrite.csproj index 42ef1def5a51..7ea6d0556c2c 100644 --- a/src/Middleware/Rewrite/src/Microsoft.AspNetCore.Rewrite.csproj +++ b/src/Middleware/Rewrite/src/Microsoft.AspNetCore.Rewrite.csproj @@ -10,6 +10,7 @@ true aspnetcore;urlrewrite;mod_rewrite false + enable diff --git a/src/Middleware/Rewrite/src/ParserContext.cs b/src/Middleware/Rewrite/src/ParserContext.cs index 624404ead071..cf892b45b40a 100644 --- a/src/Middleware/Rewrite/src/ParserContext.cs +++ b/src/Middleware/Rewrite/src/ParserContext.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.Rewrite @@ -45,7 +45,7 @@ public int GetIndex() return Index; } - public string Capture() + public string? Capture() { // TODO make this return a range rather than a string. if (_mark.HasValue) diff --git a/src/Middleware/Rewrite/src/Pattern.cs b/src/Middleware/Rewrite/src/Pattern.cs index 8d5d9bd4ac3f..f6f69806ff72 100644 --- a/src/Middleware/Rewrite/src/Pattern.cs +++ b/src/Middleware/Rewrite/src/Pattern.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; @@ -13,7 +13,7 @@ public Pattern(IList patternSegments) PatternSegments = patternSegments; } - public string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public string Evaluate(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { foreach (var pattern in PatternSegments) { diff --git a/src/Middleware/Rewrite/src/PatternSegment.cs b/src/Middleware/Rewrite/src/PatternSegment.cs index 9a0635451335..70c5910975ef 100644 --- a/src/Middleware/Rewrite/src/PatternSegment.cs +++ b/src/Middleware/Rewrite/src/PatternSegment.cs @@ -1,10 +1,10 @@ -// 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.Rewrite { internal abstract class PatternSegment { - public abstract string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + public abstract string? Evaluate(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences); } } diff --git a/src/Middleware/Rewrite/src/PatternSegments/ConditionMatchSegment.cs b/src/Middleware/Rewrite/src/PatternSegments/ConditionMatchSegment.cs index 58e2c3be5163..d4cea50311fc 100644 --- a/src/Middleware/Rewrite/src/PatternSegments/ConditionMatchSegment.cs +++ b/src/Middleware/Rewrite/src/PatternSegments/ConditionMatchSegment.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.Rewrite.PatternSegments @@ -12,7 +12,7 @@ public ConditionMatchSegment(int index) _index = index; } - public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override string? Evaluate(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { return conditionBackReferences?[_index]; } diff --git a/src/Middleware/Rewrite/src/PatternSegments/DateTimeSegment.cs b/src/Middleware/Rewrite/src/PatternSegments/DateTimeSegment.cs index 7205c120e175..8b8098eb2fa2 100644 --- a/src/Middleware/Rewrite/src/PatternSegments/DateTimeSegment.cs +++ b/src/Middleware/Rewrite/src/PatternSegments/DateTimeSegment.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; @@ -43,7 +43,7 @@ public DateTimeSegment(string segment) } } - public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReference) + public override string? Evaluate(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReference) { switch (_portion) { diff --git a/src/Middleware/Rewrite/src/PatternSegments/HeaderSegment.cs b/src/Middleware/Rewrite/src/PatternSegments/HeaderSegment.cs index 8e279e482a89..98c976b39a82 100644 --- a/src/Middleware/Rewrite/src/PatternSegments/HeaderSegment.cs +++ b/src/Middleware/Rewrite/src/PatternSegments/HeaderSegment.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.Rewrite.PatternSegments @@ -12,7 +12,7 @@ public HeaderSegment(string header) _header = header; } - public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override string? Evaluate(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { return context.HttpContext.Request.Headers[_header]; } diff --git a/src/Middleware/Rewrite/src/PatternSegments/IISServerVariableSegment.cs b/src/Middleware/Rewrite/src/PatternSegments/IISServerVariableSegment.cs index a4ac6fee5847..56fcf59aa8bd 100644 --- a/src/Middleware/Rewrite/src/PatternSegments/IISServerVariableSegment.cs +++ b/src/Middleware/Rewrite/src/PatternSegments/IISServerVariableSegment.cs @@ -17,7 +17,7 @@ public IISServerVariableSegment(string variableName, Func fallba _fallbackThunk = fallbackThunk; } - public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override string? Evaluate(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { return context.HttpContext.GetServerVariable(_variableName) ?? _fallbackThunk().Evaluate(context, ruleBackReferences, conditionBackReferences); } diff --git a/src/Middleware/Rewrite/src/PatternSegments/IsHttpsModSegment.cs b/src/Middleware/Rewrite/src/PatternSegments/IsHttpsModSegment.cs index eee896614c99..54dcb5ddebad 100644 --- a/src/Middleware/Rewrite/src/PatternSegments/IsHttpsModSegment.cs +++ b/src/Middleware/Rewrite/src/PatternSegments/IsHttpsModSegment.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.Rewrite.PatternSegments @@ -7,7 +7,7 @@ internal class IsHttpsModSegment : PatternSegment { // Note: Mod rewrite pattern matches on lower case "on" and "off" // while IIS looks for capitalized "ON" and "OFF" - public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override string? Evaluate(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { return context.HttpContext.Request.IsHttps ? "on" : "off"; } diff --git a/src/Middleware/Rewrite/src/PatternSegments/IsHttpsUrlSegment.cs b/src/Middleware/Rewrite/src/PatternSegments/IsHttpsUrlSegment.cs index dda5f5ca2612..bfe59d4df7c4 100644 --- a/src/Middleware/Rewrite/src/PatternSegments/IsHttpsUrlSegment.cs +++ b/src/Middleware/Rewrite/src/PatternSegments/IsHttpsUrlSegment.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.Rewrite.PatternSegments @@ -7,7 +7,7 @@ internal class IsHttpsUrlSegment : PatternSegment { // Note: Mod rewrite pattern matches on lower case "on" and "off" // while IIS looks for capitalized "ON" and "OFF" - public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override string? Evaluate(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { return context.HttpContext.Request.IsHttps ? "ON" : "OFF"; } diff --git a/src/Middleware/Rewrite/src/PatternSegments/IsIPV6Segment.cs b/src/Middleware/Rewrite/src/PatternSegments/IsIPV6Segment.cs index b788e2a272e8..e9ef866cca33 100644 --- a/src/Middleware/Rewrite/src/PatternSegments/IsIPV6Segment.cs +++ b/src/Middleware/Rewrite/src/PatternSegments/IsIPV6Segment.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.Net.Sockets; @@ -7,7 +7,7 @@ namespace Microsoft.AspNetCore.Rewrite.PatternSegments { internal class IsIPV6Segment : PatternSegment { - public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override string? Evaluate(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { if (context.HttpContext.Connection.RemoteIpAddress == null) { diff --git a/src/Middleware/Rewrite/src/PatternSegments/LiteralSegment.cs b/src/Middleware/Rewrite/src/PatternSegments/LiteralSegment.cs index b81ba130523b..30c4f7cc9ffc 100644 --- a/src/Middleware/Rewrite/src/PatternSegments/LiteralSegment.cs +++ b/src/Middleware/Rewrite/src/PatternSegments/LiteralSegment.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.Rewrite.PatternSegments @@ -12,7 +12,7 @@ public LiteralSegment(string literal) _literal = literal; } - public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override string? Evaluate(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { return _literal; } diff --git a/src/Middleware/Rewrite/src/PatternSegments/LocalAddressSegment.cs b/src/Middleware/Rewrite/src/PatternSegments/LocalAddressSegment.cs index f3242b6f67ef..30187d708c1f 100644 --- a/src/Middleware/Rewrite/src/PatternSegments/LocalAddressSegment.cs +++ b/src/Middleware/Rewrite/src/PatternSegments/LocalAddressSegment.cs @@ -1,11 +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. namespace Microsoft.AspNetCore.Rewrite.PatternSegments { internal class LocalAddressSegment : PatternSegment { - public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override string? Evaluate(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { return context.HttpContext.Connection.LocalIpAddress?.ToString(); } diff --git a/src/Middleware/Rewrite/src/PatternSegments/LocalPortSegment.cs b/src/Middleware/Rewrite/src/PatternSegments/LocalPortSegment.cs index aab21a7b6163..b8e5bcd1272c 100644 --- a/src/Middleware/Rewrite/src/PatternSegments/LocalPortSegment.cs +++ b/src/Middleware/Rewrite/src/PatternSegments/LocalPortSegment.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.Globalization; @@ -7,7 +7,7 @@ namespace Microsoft.AspNetCore.Rewrite.PatternSegments { internal class LocalPortSegment : PatternSegment { - public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override string? Evaluate(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { return context.HttpContext.Connection.LocalPort.ToString(CultureInfo.InvariantCulture); } diff --git a/src/Middleware/Rewrite/src/PatternSegments/QueryStringSegment.cs b/src/Middleware/Rewrite/src/PatternSegments/QueryStringSegment.cs index 2b2521ad352d..b7e63bc3f211 100644 --- a/src/Middleware/Rewrite/src/PatternSegments/QueryStringSegment.cs +++ b/src/Middleware/Rewrite/src/PatternSegments/QueryStringSegment.cs @@ -1,11 +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. namespace Microsoft.AspNetCore.Rewrite.PatternSegments { internal class QueryStringSegment : PatternSegment { - public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackRefernces, BackReferenceCollection conditionBackReferences) + public override string? Evaluate(RewriteContext context, BackReferenceCollection? ruleBackRefernces, BackReferenceCollection? conditionBackReferences) { var queryString = context.HttpContext.Request.QueryString.ToString(); diff --git a/src/Middleware/Rewrite/src/PatternSegments/RemoteAddressSegment.cs b/src/Middleware/Rewrite/src/PatternSegments/RemoteAddressSegment.cs index ae28e418f212..46c8e098b054 100644 --- a/src/Middleware/Rewrite/src/PatternSegments/RemoteAddressSegment.cs +++ b/src/Middleware/Rewrite/src/PatternSegments/RemoteAddressSegment.cs @@ -1,13 +1,13 @@ -// 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.Rewrite.PatternSegments { internal class RemoteAddressSegment : PatternSegment { - public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override string? Evaluate(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { return context.HttpContext.Connection.RemoteIpAddress?.ToString(); } } -} \ No newline at end of file +} diff --git a/src/Middleware/Rewrite/src/PatternSegments/RemotePortSegment.cs b/src/Middleware/Rewrite/src/PatternSegments/RemotePortSegment.cs index 236a402144f4..60a747e99aeb 100644 --- a/src/Middleware/Rewrite/src/PatternSegments/RemotePortSegment.cs +++ b/src/Middleware/Rewrite/src/PatternSegments/RemotePortSegment.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.Globalization; @@ -7,7 +7,7 @@ namespace Microsoft.AspNetCore.Rewrite.PatternSegments { internal class RemotePortSegment : PatternSegment { - public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override string? Evaluate(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { return context.HttpContext.Connection.RemotePort.ToString(CultureInfo.InvariantCulture); } diff --git a/src/Middleware/Rewrite/src/PatternSegments/RequestFilenameSegment.cs b/src/Middleware/Rewrite/src/PatternSegments/RequestFilenameSegment.cs index 06d2f985b8ec..e4134f69d62c 100644 --- a/src/Middleware/Rewrite/src/PatternSegments/RequestFilenameSegment.cs +++ b/src/Middleware/Rewrite/src/PatternSegments/RequestFilenameSegment.cs @@ -1,11 +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. namespace Microsoft.AspNetCore.Rewrite.PatternSegments { internal class RequestFileNameSegment : PatternSegment { - public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override string? Evaluate(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { return context.HttpContext.Request.Path; } diff --git a/src/Middleware/Rewrite/src/PatternSegments/RequestMethodSegment.cs b/src/Middleware/Rewrite/src/PatternSegments/RequestMethodSegment.cs index d97ad872c188..b68d3f23d2a6 100644 --- a/src/Middleware/Rewrite/src/PatternSegments/RequestMethodSegment.cs +++ b/src/Middleware/Rewrite/src/PatternSegments/RequestMethodSegment.cs @@ -1,11 +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. namespace Microsoft.AspNetCore.Rewrite.PatternSegments { internal class RequestMethodSegment : PatternSegment { - public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override string? Evaluate(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { return context.HttpContext.Request.Method; } diff --git a/src/Middleware/Rewrite/src/PatternSegments/RewriteMapSegment.cs b/src/Middleware/Rewrite/src/PatternSegments/RewriteMapSegment.cs index ec13b10ac341..c94843bd6da6 100644 --- a/src/Middleware/Rewrite/src/PatternSegments/RewriteMapSegment.cs +++ b/src/Middleware/Rewrite/src/PatternSegments/RewriteMapSegment.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.Rewrite.IISUrlRewrite; @@ -16,10 +16,10 @@ public RewriteMapSegment(IISRewriteMap rewriteMap, Pattern pattern) _pattern = pattern; } - public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override string? Evaluate(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { var key = _pattern.Evaluate(context, ruleBackReferences, conditionBackReferences).ToLowerInvariant(); return _rewriteMap[key]; } } -} \ No newline at end of file +} diff --git a/src/Middleware/Rewrite/src/PatternSegments/RuleMatchSegment.cs b/src/Middleware/Rewrite/src/PatternSegments/RuleMatchSegment.cs index 1cdbdc68af38..3076b89815c0 100644 --- a/src/Middleware/Rewrite/src/PatternSegments/RuleMatchSegment.cs +++ b/src/Middleware/Rewrite/src/PatternSegments/RuleMatchSegment.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. +using System.Diagnostics; + namespace Microsoft.AspNetCore.Rewrite.PatternSegments { internal class RuleMatchSegment : PatternSegment @@ -12,8 +14,9 @@ public RuleMatchSegment(int index) _index = index; } - public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override string? Evaluate(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { + Debug.Assert(ruleBackReferences != null); return ruleBackReferences[_index]; } } diff --git a/src/Middleware/Rewrite/src/PatternSegments/SchemeSegment.cs b/src/Middleware/Rewrite/src/PatternSegments/SchemeSegment.cs index 1f215434a1c6..b9669facc678 100644 --- a/src/Middleware/Rewrite/src/PatternSegments/SchemeSegment.cs +++ b/src/Middleware/Rewrite/src/PatternSegments/SchemeSegment.cs @@ -1,11 +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. namespace Microsoft.AspNetCore.Rewrite.PatternSegments { internal class SchemeSegment : PatternSegment { - public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override string? Evaluate(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { return context.HttpContext.Request.Scheme; } diff --git a/src/Middleware/Rewrite/src/PatternSegments/ServerProtocolSegment.cs b/src/Middleware/Rewrite/src/PatternSegments/ServerProtocolSegment.cs index 38ea6c7446b8..dac434c47c59 100644 --- a/src/Middleware/Rewrite/src/PatternSegments/ServerProtocolSegment.cs +++ b/src/Middleware/Rewrite/src/PatternSegments/ServerProtocolSegment.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.Features; @@ -7,7 +7,7 @@ namespace Microsoft.AspNetCore.Rewrite.PatternSegments { internal class ServerProtocolSegment : PatternSegment { - public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override string? Evaluate(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { return context.HttpContext.Features.Get()?.Protocol; } diff --git a/src/Middleware/Rewrite/src/PatternSegments/ToLowerSegment.cs b/src/Middleware/Rewrite/src/PatternSegments/ToLowerSegment.cs index b7863221ccdc..29d15b868632 100644 --- a/src/Middleware/Rewrite/src/PatternSegments/ToLowerSegment.cs +++ b/src/Middleware/Rewrite/src/PatternSegments/ToLowerSegment.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.Text; @@ -14,7 +14,7 @@ public ToLowerSegment(Pattern pattern) _pattern = pattern; } - public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override string? Evaluate(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { // PERF as we share the string builder across the context, we need to make a new one here to evaluate // lowercase segments. diff --git a/src/Middleware/Rewrite/src/PatternSegments/UrlEncodeSegment.cs b/src/Middleware/Rewrite/src/PatternSegments/UrlEncodeSegment.cs index c3930165a0e4..9d728494737a 100644 --- a/src/Middleware/Rewrite/src/PatternSegments/UrlEncodeSegment.cs +++ b/src/Middleware/Rewrite/src/PatternSegments/UrlEncodeSegment.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.Text; @@ -15,7 +15,7 @@ public UrlEncodeSegment(Pattern pattern) _pattern = pattern; } - public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override string? Evaluate(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { var oldBuilder = context.Builder; // PERF diff --git a/src/Middleware/Rewrite/src/PatternSegments/UrlSegment.cs b/src/Middleware/Rewrite/src/PatternSegments/UrlSegment.cs index 74c16b6816e2..34f21519cbca 100644 --- a/src/Middleware/Rewrite/src/PatternSegments/UrlSegment.cs +++ b/src/Middleware/Rewrite/src/PatternSegments/UrlSegment.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.Extensions; @@ -20,9 +20,9 @@ public UrlSegment(UriMatchPart uriMatchPart) _uriMatchPart = uriMatchPart; } - public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override string? Evaluate(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { return _uriMatchPart == UriMatchPart.Full ? context.HttpContext.Request.GetEncodedUrl() : (string)context.HttpContext.Request.Path; } } -} \ No newline at end of file +} diff --git a/src/Middleware/Rewrite/src/PublicAPI.Shipped.txt b/src/Middleware/Rewrite/src/PublicAPI.Shipped.txt index aaaa6dc15d37..6922915dc838 100644 --- a/src/Middleware/Rewrite/src/PublicAPI.Shipped.txt +++ b/src/Middleware/Rewrite/src/PublicAPI.Shipped.txt @@ -15,42 +15,42 @@ Microsoft.AspNetCore.Rewrite.RuleResult Microsoft.AspNetCore.Rewrite.RuleResult.ContinueRules = 0 -> Microsoft.AspNetCore.Rewrite.RuleResult Microsoft.AspNetCore.Rewrite.RuleResult.EndResponse = 1 -> Microsoft.AspNetCore.Rewrite.RuleResult Microsoft.AspNetCore.Rewrite.RuleResult.SkipRemainingRules = 2 -> Microsoft.AspNetCore.Rewrite.RuleResult -~Microsoft.AspNetCore.Rewrite.IRule.ApplyRule(Microsoft.AspNetCore.Rewrite.RewriteContext context) -> void -~Microsoft.AspNetCore.Rewrite.RewriteContext.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext -~Microsoft.AspNetCore.Rewrite.RewriteContext.HttpContext.set -> void -~Microsoft.AspNetCore.Rewrite.RewriteContext.Logger.get -> Microsoft.Extensions.Logging.ILogger -~Microsoft.AspNetCore.Rewrite.RewriteContext.Logger.set -> void -~Microsoft.AspNetCore.Rewrite.RewriteContext.StaticFileProvider.get -> Microsoft.Extensions.FileProviders.IFileProvider -~Microsoft.AspNetCore.Rewrite.RewriteContext.StaticFileProvider.set -> void -~Microsoft.AspNetCore.Rewrite.RewriteMiddleware.Invoke(Microsoft.AspNetCore.Http.HttpContext context) -> System.Threading.Tasks.Task -~Microsoft.AspNetCore.Rewrite.RewriteMiddleware.RewriteMiddleware(Microsoft.AspNetCore.Http.RequestDelegate next, Microsoft.AspNetCore.Hosting.IWebHostEnvironment hostingEnvironment, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.Extensions.Options.IOptions options) -> void -~Microsoft.AspNetCore.Rewrite.RewriteOptions.Rules.get -> System.Collections.Generic.IList -~Microsoft.AspNetCore.Rewrite.RewriteOptions.StaticFileProvider.get -> Microsoft.Extensions.FileProviders.IFileProvider -~Microsoft.AspNetCore.Rewrite.RewriteOptions.StaticFileProvider.set -> void -~static Microsoft.AspNetCore.Builder.RewriteBuilderExtensions.UseRewriter(this Microsoft.AspNetCore.Builder.IApplicationBuilder app) -> Microsoft.AspNetCore.Builder.IApplicationBuilder -~static Microsoft.AspNetCore.Builder.RewriteBuilderExtensions.UseRewriter(this Microsoft.AspNetCore.Builder.IApplicationBuilder app, Microsoft.AspNetCore.Rewrite.RewriteOptions options) -> Microsoft.AspNetCore.Builder.IApplicationBuilder -~static Microsoft.AspNetCore.Rewrite.ApacheModRewriteOptionsExtensions.AddApacheModRewrite(this Microsoft.AspNetCore.Rewrite.RewriteOptions options, Microsoft.Extensions.FileProviders.IFileProvider fileProvider, string filePath) -> Microsoft.AspNetCore.Rewrite.RewriteOptions -~static Microsoft.AspNetCore.Rewrite.ApacheModRewriteOptionsExtensions.AddApacheModRewrite(this Microsoft.AspNetCore.Rewrite.RewriteOptions options, System.IO.TextReader reader) -> Microsoft.AspNetCore.Rewrite.RewriteOptions -~static Microsoft.AspNetCore.Rewrite.IISUrlRewriteOptionsExtensions.AddIISUrlRewrite(this Microsoft.AspNetCore.Rewrite.RewriteOptions options, Microsoft.Extensions.FileProviders.IFileProvider fileProvider, string filePath, bool alwaysUseManagedServerVariables = false) -> Microsoft.AspNetCore.Rewrite.RewriteOptions -~static Microsoft.AspNetCore.Rewrite.IISUrlRewriteOptionsExtensions.AddIISUrlRewrite(this Microsoft.AspNetCore.Rewrite.RewriteOptions options, System.IO.TextReader reader, bool alwaysUseManagedServerVariables = false) -> Microsoft.AspNetCore.Rewrite.RewriteOptions -~static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.Add(this Microsoft.AspNetCore.Rewrite.RewriteOptions options, Microsoft.AspNetCore.Rewrite.IRule rule) -> Microsoft.AspNetCore.Rewrite.RewriteOptions -~static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.Add(this Microsoft.AspNetCore.Rewrite.RewriteOptions options, System.Action applyRule) -> Microsoft.AspNetCore.Rewrite.RewriteOptions -~static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirect(this Microsoft.AspNetCore.Rewrite.RewriteOptions options, string regex, string replacement) -> Microsoft.AspNetCore.Rewrite.RewriteOptions -~static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirect(this Microsoft.AspNetCore.Rewrite.RewriteOptions options, string regex, string replacement, int statusCode) -> Microsoft.AspNetCore.Rewrite.RewriteOptions -~static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToHttps(this Microsoft.AspNetCore.Rewrite.RewriteOptions options) -> Microsoft.AspNetCore.Rewrite.RewriteOptions -~static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToHttps(this Microsoft.AspNetCore.Rewrite.RewriteOptions options, int statusCode) -> Microsoft.AspNetCore.Rewrite.RewriteOptions -~static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToHttps(this Microsoft.AspNetCore.Rewrite.RewriteOptions options, int statusCode, int? sslPort) -> Microsoft.AspNetCore.Rewrite.RewriteOptions -~static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToHttpsPermanent(this Microsoft.AspNetCore.Rewrite.RewriteOptions options) -> Microsoft.AspNetCore.Rewrite.RewriteOptions -~static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToNonWww(this Microsoft.AspNetCore.Rewrite.RewriteOptions options) -> Microsoft.AspNetCore.Rewrite.RewriteOptions -~static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToNonWww(this Microsoft.AspNetCore.Rewrite.RewriteOptions options, int statusCode) -> Microsoft.AspNetCore.Rewrite.RewriteOptions -~static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToNonWww(this Microsoft.AspNetCore.Rewrite.RewriteOptions options, int statusCode, params string[] domains) -> Microsoft.AspNetCore.Rewrite.RewriteOptions -~static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToNonWww(this Microsoft.AspNetCore.Rewrite.RewriteOptions options, params string[] domains) -> Microsoft.AspNetCore.Rewrite.RewriteOptions -~static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToNonWwwPermanent(this Microsoft.AspNetCore.Rewrite.RewriteOptions options) -> Microsoft.AspNetCore.Rewrite.RewriteOptions -~static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToNonWwwPermanent(this Microsoft.AspNetCore.Rewrite.RewriteOptions options, params string[] domains) -> Microsoft.AspNetCore.Rewrite.RewriteOptions -~static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToWww(this Microsoft.AspNetCore.Rewrite.RewriteOptions options) -> Microsoft.AspNetCore.Rewrite.RewriteOptions -~static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToWww(this Microsoft.AspNetCore.Rewrite.RewriteOptions options, int statusCode) -> Microsoft.AspNetCore.Rewrite.RewriteOptions -~static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToWww(this Microsoft.AspNetCore.Rewrite.RewriteOptions options, int statusCode, params string[] domains) -> Microsoft.AspNetCore.Rewrite.RewriteOptions -~static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToWww(this Microsoft.AspNetCore.Rewrite.RewriteOptions options, params string[] domains) -> Microsoft.AspNetCore.Rewrite.RewriteOptions -~static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToWwwPermanent(this Microsoft.AspNetCore.Rewrite.RewriteOptions options) -> Microsoft.AspNetCore.Rewrite.RewriteOptions -~static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToWwwPermanent(this Microsoft.AspNetCore.Rewrite.RewriteOptions options, params string[] domains) -> Microsoft.AspNetCore.Rewrite.RewriteOptions -~static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRewrite(this Microsoft.AspNetCore.Rewrite.RewriteOptions options, string regex, string replacement, bool skipRemainingRules) -> Microsoft.AspNetCore.Rewrite.RewriteOptions +Microsoft.AspNetCore.Rewrite.IRule.ApplyRule(Microsoft.AspNetCore.Rewrite.RewriteContext! context) -> void +Microsoft.AspNetCore.Rewrite.RewriteContext.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext! +Microsoft.AspNetCore.Rewrite.RewriteContext.HttpContext.set -> void +Microsoft.AspNetCore.Rewrite.RewriteContext.Logger.get -> Microsoft.Extensions.Logging.ILogger! +Microsoft.AspNetCore.Rewrite.RewriteContext.Logger.set -> void +Microsoft.AspNetCore.Rewrite.RewriteContext.StaticFileProvider.get -> Microsoft.Extensions.FileProviders.IFileProvider! +Microsoft.AspNetCore.Rewrite.RewriteContext.StaticFileProvider.set -> void +Microsoft.AspNetCore.Rewrite.RewriteMiddleware.Invoke(Microsoft.AspNetCore.Http.HttpContext! context) -> System.Threading.Tasks.Task! +~Microsoft.AspNetCore.Rewrite.RewriteMiddleware.RewriteMiddleware(Microsoft.AspNetCore.Http.RequestDelegate! next, Microsoft.AspNetCore.Hosting.IWebHostEnvironment! hostingEnvironment, Microsoft.Extensions.Logging.ILoggerFactory! loggerFactory, Microsoft.Extensions.Options.IOptions! options) -> void +Microsoft.AspNetCore.Rewrite.RewriteOptions.Rules.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Rewrite.RewriteOptions.StaticFileProvider.get -> Microsoft.Extensions.FileProviders.IFileProvider! +Microsoft.AspNetCore.Rewrite.RewriteOptions.StaticFileProvider.set -> void +static Microsoft.AspNetCore.Builder.RewriteBuilderExtensions.UseRewriter(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! +static Microsoft.AspNetCore.Builder.RewriteBuilderExtensions.UseRewriter(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, Microsoft.AspNetCore.Rewrite.RewriteOptions! options) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! +static Microsoft.AspNetCore.Rewrite.ApacheModRewriteOptionsExtensions.AddApacheModRewrite(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, Microsoft.Extensions.FileProviders.IFileProvider! fileProvider, string! filePath) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! +static Microsoft.AspNetCore.Rewrite.ApacheModRewriteOptionsExtensions.AddApacheModRewrite(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, System.IO.TextReader! reader) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! +static Microsoft.AspNetCore.Rewrite.IISUrlRewriteOptionsExtensions.AddIISUrlRewrite(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, Microsoft.Extensions.FileProviders.IFileProvider! fileProvider, string! filePath, bool alwaysUseManagedServerVariables = false) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! +static Microsoft.AspNetCore.Rewrite.IISUrlRewriteOptionsExtensions.AddIISUrlRewrite(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, System.IO.TextReader! reader, bool alwaysUseManagedServerVariables = false) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! +static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.Add(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, Microsoft.AspNetCore.Rewrite.IRule! rule) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! +static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.Add(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, System.Action! applyRule) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! +static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirect(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, string! regex, string! replacement) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! +static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirect(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, string! regex, string! replacement, int statusCode) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! +static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToHttps(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! +static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToHttps(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, int statusCode) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! +static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToHttps(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, int statusCode, int? sslPort) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! +static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToHttpsPermanent(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! +static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToNonWww(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! +static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToNonWww(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, int statusCode) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! +static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToNonWww(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, int statusCode, params string![]! domains) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! +static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToNonWww(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, params string![]! domains) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! +static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToNonWwwPermanent(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! +static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToNonWwwPermanent(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, params string![]! domains) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! +static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToWww(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! +static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToWww(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, int statusCode) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! +static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToWww(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, int statusCode, params string![]! domains) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! +static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToWww(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, params string![]! domains) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! +static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToWwwPermanent(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! +static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToWwwPermanent(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, params string![]! domains) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! +static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRewrite(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, string! regex, string! replacement, bool skipRemainingRules) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! diff --git a/src/Middleware/Rewrite/src/PublicAPI.Unshipped.txt b/src/Middleware/Rewrite/src/PublicAPI.Unshipped.txt index 64c2e4c1ec1a..7dc5c58110bf 100644 --- a/src/Middleware/Rewrite/src/PublicAPI.Unshipped.txt +++ b/src/Middleware/Rewrite/src/PublicAPI.Unshipped.txt @@ -1,34 +1 @@ #nullable enable -Microsoft.AspNetCore.Rewrite.IRule.ApplyRule(Microsoft.AspNetCore.Rewrite.RewriteContext! context) -> void -Microsoft.AspNetCore.Rewrite.RewriteMiddleware.Invoke(Microsoft.AspNetCore.Http.HttpContext! context) -> System.Threading.Tasks.Task! -~Microsoft.AspNetCore.Rewrite.RewriteMiddleware.RewriteMiddleware(Microsoft.AspNetCore.Http.RequestDelegate! next, Microsoft.AspNetCore.Hosting.IWebHostEnvironment! hostingEnvironment, Microsoft.Extensions.Logging.ILoggerFactory! loggerFactory, Microsoft.Extensions.Options.IOptions! options) -> void -Microsoft.AspNetCore.Rewrite.RewriteOptions.Rules.get -> System.Collections.Generic.IList! -Microsoft.AspNetCore.Rewrite.RewriteOptions.StaticFileProvider.get -> Microsoft.Extensions.FileProviders.IFileProvider! -Microsoft.AspNetCore.Rewrite.RewriteOptions.StaticFileProvider.set -> void -static Microsoft.AspNetCore.Builder.RewriteBuilderExtensions.UseRewriter(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! -static Microsoft.AspNetCore.Builder.RewriteBuilderExtensions.UseRewriter(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, Microsoft.AspNetCore.Rewrite.RewriteOptions! options) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! -static Microsoft.AspNetCore.Rewrite.ApacheModRewriteOptionsExtensions.AddApacheModRewrite(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, Microsoft.Extensions.FileProviders.IFileProvider! fileProvider, string! filePath) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! -static Microsoft.AspNetCore.Rewrite.ApacheModRewriteOptionsExtensions.AddApacheModRewrite(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, System.IO.TextReader! reader) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! -static Microsoft.AspNetCore.Rewrite.IISUrlRewriteOptionsExtensions.AddIISUrlRewrite(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, Microsoft.Extensions.FileProviders.IFileProvider! fileProvider, string! filePath, bool alwaysUseManagedServerVariables = false) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! -static Microsoft.AspNetCore.Rewrite.IISUrlRewriteOptionsExtensions.AddIISUrlRewrite(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, System.IO.TextReader! reader, bool alwaysUseManagedServerVariables = false) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! -static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.Add(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, Microsoft.AspNetCore.Rewrite.IRule! rule) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! -static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.Add(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, System.Action! applyRule) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! -static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirect(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, string! regex, string! replacement) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! -static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirect(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, string! regex, string! replacement, int statusCode) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! -static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToHttps(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! -static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToHttps(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, int statusCode) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! -static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToHttps(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, int statusCode, int? sslPort) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! -static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToHttpsPermanent(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! -static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToNonWww(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! -static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToNonWww(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, int statusCode) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! -static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToNonWww(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, int statusCode, params string![]! domains) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! -static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToNonWww(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, params string![]! domains) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! -static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToNonWwwPermanent(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! -static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToNonWwwPermanent(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, params string![]! domains) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! -static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToWww(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! -static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToWww(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, int statusCode) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! -static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToWww(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, int statusCode, params string![]! domains) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! -static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToWww(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, params string![]! domains) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! -static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToWwwPermanent(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! -static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRedirectToWwwPermanent(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, params string![]! domains) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! -static Microsoft.AspNetCore.Rewrite.RewriteOptionsExtensions.AddRewrite(this Microsoft.AspNetCore.Rewrite.RewriteOptions! options, string! regex, string! replacement, bool skipRemainingRules) -> Microsoft.AspNetCore.Rewrite.RewriteOptions! diff --git a/src/Middleware/Rewrite/src/RedirectToNonWwwRule.cs b/src/Middleware/Rewrite/src/RedirectToNonWwwRule.cs index 1c6c0a7fbc6f..18ae85ed96d2 100644 --- a/src/Middleware/Rewrite/src/RedirectToNonWwwRule.cs +++ b/src/Middleware/Rewrite/src/RedirectToNonWwwRule.cs @@ -11,7 +11,7 @@ internal class RedirectToNonWwwRule : IRule { private const string WwwDot = "www."; - private readonly string[] _domains; + private readonly string[]? _domains; private readonly int _statusCode; public RedirectToNonWwwRule(int statusCode) diff --git a/src/Middleware/Rewrite/src/RedirectToWwwHelper.cs b/src/Middleware/Rewrite/src/RedirectToWwwHelper.cs index 4550e7ad9d49..00a1499c6ac3 100644 --- a/src/Middleware/Rewrite/src/RedirectToWwwHelper.cs +++ b/src/Middleware/Rewrite/src/RedirectToWwwHelper.cs @@ -12,7 +12,7 @@ internal static class RedirectToWwwHelper { private const string Localhost = "localhost"; - public static bool IsHostInDomains(HttpRequest request, string[] domains) + public static bool IsHostInDomains(HttpRequest request, string[]? domains) { if (request.Host.Host.Equals(Localhost, StringComparison.OrdinalIgnoreCase)) { diff --git a/src/Middleware/Rewrite/src/RedirectToWwwRule.cs b/src/Middleware/Rewrite/src/RedirectToWwwRule.cs index f5b715a6488f..f1d772e96f64 100644 --- a/src/Middleware/Rewrite/src/RedirectToWwwRule.cs +++ b/src/Middleware/Rewrite/src/RedirectToWwwRule.cs @@ -11,7 +11,7 @@ internal class RedirectToWwwRule : IRule { private const string WwwDot = "www."; - private readonly string[] _domains; + private readonly string[]? _domains; private readonly int _statusCode; public RedirectToWwwRule(int statusCode) diff --git a/src/Middleware/Rewrite/src/RewriteBuilderExtensions.cs b/src/Middleware/Rewrite/src/RewriteBuilderExtensions.cs index 69f82454475d..a0f3ff17ee94 100644 --- a/src/Middleware/Rewrite/src/RewriteBuilderExtensions.cs +++ b/src/Middleware/Rewrite/src/RewriteBuilderExtensions.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 Microsoft.AspNetCore.Rewrite; using Microsoft.Extensions.Options; diff --git a/src/Middleware/Rewrite/src/RewriteMiddleware.cs b/src/Middleware/Rewrite/src/RewriteMiddleware.cs index fc98cba6507e..14ec5e2429c3 100644 --- a/src/Middleware/Rewrite/src/RewriteMiddleware.cs +++ b/src/Middleware/Rewrite/src/RewriteMiddleware.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.Threading.Tasks; using Microsoft.AspNetCore.Hosting; diff --git a/src/Middleware/Rewrite/src/RewriteOptions.cs b/src/Middleware/Rewrite/src/RewriteOptions.cs index 1fa621f681e8..c3f9edeab65a 100644 --- a/src/Middleware/Rewrite/src/RewriteOptions.cs +++ b/src/Middleware/Rewrite/src/RewriteOptions.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.Collections.Generic; using Microsoft.Extensions.FileProviders; using Microsoft.AspNetCore.Hosting; diff --git a/src/Middleware/Rewrite/src/RewriteOptionsExtensions.cs b/src/Middleware/Rewrite/src/RewriteOptionsExtensions.cs index c35a7228e77e..28d2660faec8 100644 --- a/src/Middleware/Rewrite/src/RewriteOptionsExtensions.cs +++ b/src/Middleware/Rewrite/src/RewriteOptionsExtensions.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 Microsoft.AspNetCore.Http; diff --git a/src/Middleware/Rewrite/src/UrlAction.cs b/src/Middleware/Rewrite/src/UrlAction.cs index 67cfe24eea72..efc3f8574d08 100644 --- a/src/Middleware/Rewrite/src/UrlAction.cs +++ b/src/Middleware/Rewrite/src/UrlAction.cs @@ -1,11 +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. namespace Microsoft.AspNetCore.Rewrite { internal abstract class UrlAction { - protected Pattern Url { get; set; } - public abstract void ApplyAction(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + protected Pattern? Url { get; set; } + + public abstract void ApplyAction(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences); } } diff --git a/src/Middleware/Rewrite/src/UrlActions/AbortAction.cs b/src/Middleware/Rewrite/src/UrlActions/AbortAction.cs index 850b2fa56607..67f8d06e03cb 100644 --- a/src/Middleware/Rewrite/src/UrlActions/AbortAction.cs +++ b/src/Middleware/Rewrite/src/UrlActions/AbortAction.cs @@ -7,7 +7,7 @@ namespace Microsoft.AspNetCore.Rewrite.UrlActions { internal class AbortAction : UrlAction { - public override void ApplyAction(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override void ApplyAction(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { context.HttpContext.Abort(); context.Result = RuleResult.EndResponse; diff --git a/src/Middleware/Rewrite/src/UrlActions/ChangeCookieAction.cs b/src/Middleware/Rewrite/src/UrlActions/ChangeCookieAction.cs index b3b6452ac42c..36e3f1aec4c0 100644 --- a/src/Middleware/Rewrite/src/UrlActions/ChangeCookieAction.cs +++ b/src/Middleware/Rewrite/src/UrlActions/ChangeCookieAction.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; @@ -9,7 +9,7 @@ namespace Microsoft.AspNetCore.Rewrite.UrlActions internal class ChangeCookieAction : UrlAction { private readonly Func _timeSource; - private CookieOptions _cachedOptions; + private CookieOptions? _cachedOptions; public ChangeCookieAction(string name) : this(name, () => DateTimeOffset.UtcNow) @@ -30,14 +30,14 @@ internal ChangeCookieAction(string name, Func timeSource) } public string Name { get; } - public string Value { get; set; } - public string Domain { get; set; } + public string? Value { get; set; } + public string? Domain { get; set; } public TimeSpan Lifetime { get; set; } - public string Path { get; set; } + public string? Path { get; set; } public bool Secure { get; set; } public bool HttpOnly { get; set; } - public override void ApplyAction(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override void ApplyAction(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { var options = GetOrCreateOptions(); context.HttpContext.Response.Cookies.Append(Name, Value ?? string.Empty, options); diff --git a/src/Middleware/Rewrite/src/UrlActions/CustomResponseAction.cs b/src/Middleware/Rewrite/src/UrlActions/CustomResponseAction.cs index 1b3fb4c2fbee..ecd63fd32d6c 100644 --- a/src/Middleware/Rewrite/src/UrlActions/CustomResponseAction.cs +++ b/src/Middleware/Rewrite/src/UrlActions/CustomResponseAction.cs @@ -11,15 +11,15 @@ namespace Microsoft.AspNetCore.Rewrite.UrlActions internal class CustomResponseAction : UrlAction { public int StatusCode { get; } - public string StatusReason { get; set; } - public string StatusDescription { get; set; } + public string? StatusReason { get; set; } + public string? StatusDescription { get; set; } public CustomResponseAction(int statusCode) { StatusCode = statusCode; } - public override void ApplyAction(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override void ApplyAction(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { var response = context.HttpContext.Response; response.StatusCode = StatusCode; diff --git a/src/Middleware/Rewrite/src/UrlActions/ForbiddenAction.cs b/src/Middleware/Rewrite/src/UrlActions/ForbiddenAction.cs index cfa007b3b8b8..e57cac2cdcdd 100644 --- a/src/Middleware/Rewrite/src/UrlActions/ForbiddenAction.cs +++ b/src/Middleware/Rewrite/src/UrlActions/ForbiddenAction.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; @@ -7,7 +7,7 @@ namespace Microsoft.AspNetCore.Rewrite.UrlActions { internal class ForbiddenAction : UrlAction { - public override void ApplyAction(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override void ApplyAction(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { context.HttpContext.Response.StatusCode = StatusCodes.Status403Forbidden; context.Result = RuleResult.EndResponse; diff --git a/src/Middleware/Rewrite/src/UrlActions/GoneAction.cs b/src/Middleware/Rewrite/src/UrlActions/GoneAction.cs index 553d5ca92385..968880bb541d 100644 --- a/src/Middleware/Rewrite/src/UrlActions/GoneAction.cs +++ b/src/Middleware/Rewrite/src/UrlActions/GoneAction.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; @@ -7,7 +7,7 @@ namespace Microsoft.AspNetCore.Rewrite.UrlActions { internal class GoneAction : UrlAction { - public override void ApplyAction(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override void ApplyAction(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { context.HttpContext.Response.StatusCode = StatusCodes.Status410Gone; context.Result = RuleResult.EndResponse; diff --git a/src/Middleware/Rewrite/src/UrlActions/NoneAction.cs b/src/Middleware/Rewrite/src/UrlActions/NoneAction.cs index 691f4534126a..efe45ae561c7 100644 --- a/src/Middleware/Rewrite/src/UrlActions/NoneAction.cs +++ b/src/Middleware/Rewrite/src/UrlActions/NoneAction.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.Rewrite.UrlActions @@ -12,7 +12,7 @@ public NoneAction(RuleResult result) Result = result; } // Explicitly say that nothing happens - public override void ApplyAction(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override void ApplyAction(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { context.Result = Result; } diff --git a/src/Middleware/Rewrite/src/UrlActions/RedirectAction.cs b/src/Middleware/Rewrite/src/UrlActions/RedirectAction.cs index d263adc727e7..0d4ea5c54039 100644 --- a/src/Middleware/Rewrite/src/UrlActions/RedirectAction.cs +++ b/src/Middleware/Rewrite/src/UrlActions/RedirectAction.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,9 +28,9 @@ public RedirectAction( EscapeBackReferences = escapeBackReferences; } - public override void ApplyAction(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override void ApplyAction(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { - var pattern = Url.Evaluate(context, ruleBackReferences, conditionBackReferences); + var pattern = Url!.Evaluate(context, ruleBackReferences, conditionBackReferences); var response = context.HttpContext.Response; var pathBase = context.HttpContext.Request.PathBase; if (EscapeBackReferences) diff --git a/src/Middleware/Rewrite/src/UrlActions/RewriteAction.cs b/src/Middleware/Rewrite/src/UrlActions/RewriteAction.cs index 03fbc1415a3f..b5f51eb5fd35 100644 --- a/src/Middleware/Rewrite/src/UrlActions/RewriteAction.cs +++ b/src/Middleware/Rewrite/src/UrlActions/RewriteAction.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; @@ -43,9 +43,9 @@ public RewriteAction( } - public override void ApplyAction(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences) + public override void ApplyAction(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { - var pattern = Url.Evaluate(context, ruleBackReferences, conditionBackReferences); + var pattern = Url!.Evaluate(context, ruleBackReferences, conditionBackReferences); var request = context.HttpContext.Request; if (string.IsNullOrEmpty(pattern)) diff --git a/src/Middleware/Rewrite/src/UrlMatches/ExactMatch.cs b/src/Middleware/Rewrite/src/UrlMatches/ExactMatch.cs index 578d40d8550d..b890d3141654 100644 --- a/src/Middleware/Rewrite/src/UrlMatches/ExactMatch.cs +++ b/src/Middleware/Rewrite/src/UrlMatches/ExactMatch.cs @@ -23,7 +23,7 @@ public override MatchResults Evaluate(string pattern, RewriteContext context) var success = pathMatch != Negate; if (success) { - return new MatchResults { Success = success, BackReferences = new BackReferenceCollection(pattern) }; + return new MatchResults(success, new BackReferenceCollection(pattern)); } else { diff --git a/src/Middleware/Rewrite/src/UrlMatches/IntegerMatch.cs b/src/Middleware/Rewrite/src/UrlMatches/IntegerMatch.cs index e6dd7996c355..a29845ab3a35 100644 --- a/src/Middleware/Rewrite/src/UrlMatches/IntegerMatch.cs +++ b/src/Middleware/Rewrite/src/UrlMatches/IntegerMatch.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,7 +51,7 @@ public override MatchResults Evaluate(string input, RewriteContext context) case IntegerOperationType.NotEqual: return compValue != _value ? MatchResults.EmptySuccess : MatchResults.EmptyFailure; default: - return null; + throw new ArgumentOutOfRangeException("operation"); // Will never be thrown } } } diff --git a/src/Middleware/Rewrite/src/UrlMatches/IsDirectoryMatch.cs b/src/Middleware/Rewrite/src/UrlMatches/IsDirectoryMatch.cs index f8745855b4fc..1c26360cfea1 100644 --- a/src/Middleware/Rewrite/src/UrlMatches/IsDirectoryMatch.cs +++ b/src/Middleware/Rewrite/src/UrlMatches/IsDirectoryMatch.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.Rewrite.UrlMatches @@ -13,7 +13,7 @@ public IsDirectoryMatch(bool negate) public override MatchResults Evaluate(string pattern, RewriteContext context) { var res = context.StaticFileProvider.GetFileInfo(pattern).IsDirectory; - return new MatchResults { Success = (res != Negate) }; + return new MatchResults(success: res != Negate); } } } diff --git a/src/Middleware/Rewrite/src/UrlMatches/IsFileMatch.cs b/src/Middleware/Rewrite/src/UrlMatches/IsFileMatch.cs index e951d6df4aeb..44fd56bc7aaa 100644 --- a/src/Middleware/Rewrite/src/UrlMatches/IsFileMatch.cs +++ b/src/Middleware/Rewrite/src/UrlMatches/IsFileMatch.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.Rewrite.UrlMatches @@ -13,7 +13,7 @@ public IsFileMatch(bool negate) public override MatchResults Evaluate(string pattern, RewriteContext context) { var res = context.StaticFileProvider.GetFileInfo(pattern).Exists; - return new MatchResults { Success = (res != Negate) }; + return new MatchResults(success: res != Negate); } } } diff --git a/src/Middleware/Rewrite/src/UrlMatches/RegexMatch.cs b/src/Middleware/Rewrite/src/UrlMatches/RegexMatch.cs index e0d0319a5237..8c223212d575 100644 --- a/src/Middleware/Rewrite/src/UrlMatches/RegexMatch.cs +++ b/src/Middleware/Rewrite/src/UrlMatches/RegexMatch.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.Text.RegularExpressions; @@ -18,7 +18,7 @@ public RegexMatch(Regex match, bool negate) public override MatchResults Evaluate(string pattern, RewriteContext context) { var res = _match.Match(pattern); - return new MatchResults { BackReferences = new BackReferenceCollection(res.Groups), Success = (res.Success != Negate) }; + return new MatchResults(success: res.Success != Negate, new BackReferenceCollection(res.Groups)); } } } diff --git a/src/Middleware/Rewrite/src/UrlMatches/StringMatch.cs b/src/Middleware/Rewrite/src/UrlMatches/StringMatch.cs index 798b2c6b5003..f2feb79c3e39 100644 --- a/src/Middleware/Rewrite/src/UrlMatches/StringMatch.cs +++ b/src/Middleware/Rewrite/src/UrlMatches/StringMatch.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; @@ -33,7 +33,7 @@ public override MatchResults Evaluate(string input, RewriteContext context) case StringOperationType.LessEqual: return string.Compare(input, _value, _stringComparison) <= 0 ? MatchResults.EmptySuccess : MatchResults.EmptyFailure; default: - return null; + throw new ArgumentOutOfRangeException("operation"); // Will never be thrown } } } diff --git a/src/Middleware/Rewrite/test/IISUrlRewrite/FileParserTests.cs b/src/Middleware/Rewrite/test/IISUrlRewrite/FileParserTests.cs index d5d7323aaa22..b2ed94bf946f 100644 --- a/src/Middleware/Rewrite/test/IISUrlRewrite/FileParserTests.cs +++ b/src/Middleware/Rewrite/test/IISUrlRewrite/FileParserTests.cs @@ -57,11 +57,7 @@ public void RuleParse_ParseSingleRuleWithSingleCondition() "; var condList = new ConditionCollection(); - condList.Add(new Condition - { - Input = new InputParser().ParseInputString("{HTTPS}"), - Match = new RegexMatch(new Regex("^OFF$"), false) - }); + condList.Add(new Condition(new InputParser().ParseInputString("{HTTPS}"), new RegexMatch(new Regex("^OFF$"), false))); var expected = new List(); expected.Add(CreateTestRule(condList, @@ -101,11 +97,7 @@ public void RuleParse_ParseMultipleRules() "; var condList = new ConditionCollection(); - condList.Add(new Condition - { - Input = new InputParser().ParseInputString("{HTTPS}"), - Match = new RegexMatch(new Regex("^OFF$"), false) - }); + condList.Add(new Condition(new InputParser().ParseInputString("{HTTPS}"), new RegexMatch(new Regex("^OFF$"), false))); var expected = new List(); expected.Add(CreateTestRule(condList, diff --git a/src/Middleware/Rewrite/test/IISUrlRewrite/InputParserTests.cs b/src/Middleware/Rewrite/test/IISUrlRewrite/InputParserTests.cs index a737da083f44..c92ec087c89f 100644 --- a/src/Middleware/Rewrite/test/IISUrlRewrite/InputParserTests.cs +++ b/src/Middleware/Rewrite/test/IISUrlRewrite/InputParserTests.cs @@ -149,13 +149,13 @@ private BackReferenceCollection CreateTestCondBackReferences() private MatchResults CreateRewriteMapRuleMatch(string input) { var match = Regex.Match(input, "([^/]*)/?(.*)"); - return new MatchResults { BackReferences = new BackReferenceCollection(match.Groups), Success = match.Success }; + return new MatchResults(match.Success, new BackReferenceCollection(match.Groups)); } private MatchResults CreateRewriteMapConditionMatch(string input) { var match = Regex.Match(input, "(.+)"); - return new MatchResults { BackReferences = new BackReferenceCollection(match.Groups), Success = match.Success }; + return new MatchResults(match.Success, new BackReferenceCollection(match.Groups)); } } } diff --git a/src/Middleware/Rewrite/test/IISUrlRewrite/ServerVariableTests.cs b/src/Middleware/Rewrite/test/IISUrlRewrite/ServerVariableTests.cs index d4aedd866cc0..dab130394c64 100644 --- a/src/Middleware/Rewrite/test/IISUrlRewrite/ServerVariableTests.cs +++ b/src/Middleware/Rewrite/test/IISUrlRewrite/ServerVariableTests.cs @@ -159,13 +159,13 @@ private RewriteContext CreateTestRewriteContext(HttpContext context = null) private MatchResults CreateTestRuleMatch() { var match = Regex.Match("foo/bar/baz", "(.*)/(.*)/(.*)"); - return new MatchResults { BackReferences = new BackReferenceCollection(match.Groups), Success = match.Success }; + return new MatchResults(match.Success, new BackReferenceCollection(match.Groups)); } private MatchResults CreateTestCondMatch() { var match = Regex.Match("foo/bar/baz", "(.*)/(.*)/(.*)"); - return new MatchResults { BackReferences = new BackReferenceCollection(match.Groups), Success = match.Success }; + return new MatchResults(match.Success, new BackReferenceCollection(match.Groups)); } [Fact] diff --git a/src/Middleware/Rewrite/test/PatternSegments/ConditionMatchSegmentTests.cs b/src/Middleware/Rewrite/test/PatternSegments/ConditionMatchSegmentTests.cs index e568636304e8..22e79dab48d3 100644 --- a/src/Middleware/Rewrite/test/PatternSegments/ConditionMatchSegmentTests.cs +++ b/src/Middleware/Rewrite/test/PatternSegments/ConditionMatchSegmentTests.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.Text.RegularExpressions; @@ -30,7 +30,7 @@ public void ConditionMatch_AssertBackreferencesObtainsCorrectValue(int index, st private static MatchResults CreateTestMatch() { var match = Regex.Match("foo/bar/baz", "(.*)/(.*)/(.*)"); - return new MatchResults { BackReferences = new BackReferenceCollection(match.Groups), Success = match.Success }; + return new MatchResults(match.Success, new BackReferenceCollection(match.Groups)); } } } diff --git a/src/Middleware/Rewrite/test/PatternSegments/RuleMatchSegmentTests.cs b/src/Middleware/Rewrite/test/PatternSegments/RuleMatchSegmentTests.cs index a7add8111517..ac8016dce789 100644 --- a/src/Middleware/Rewrite/test/PatternSegments/RuleMatchSegmentTests.cs +++ b/src/Middleware/Rewrite/test/PatternSegments/RuleMatchSegmentTests.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.Text.RegularExpressions; @@ -29,7 +29,7 @@ public void RuleMatch_AssertBackreferencesObtainsCorrectValue(int index, string private static MatchResults CreateTestMatch() { var match = Regex.Match("foo/bar/baz", "(.*)/(.*)/(.*)"); - return new MatchResults { BackReferences = new BackReferenceCollection(match.Groups), Success = match.Success }; + return new MatchResults(match.Success, new BackReferenceCollection(match.Groups)); } } } diff --git a/src/Shared/Diagnostics/BaseView.cs b/src/Shared/Diagnostics/BaseView.cs index cb24122c0a5f..08bb26f9297f 100644 --- a/src/Shared/Diagnostics/BaseView.cs +++ b/src/Shared/Diagnostics/BaseView.cs @@ -12,6 +12,8 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Http; +#nullable enable + namespace Microsoft.AspNetCore.DiagnosticsViewPage.Views { internal abstract class BaseView @@ -19,22 +21,22 @@ internal abstract class BaseView /// /// The request context /// - protected HttpContext Context { get; private set; } + protected HttpContext Context { get; private set; } = default!; /// /// The request /// - protected HttpRequest Request { get; private set; } + protected HttpRequest Request { get; private set; } = default!; /// /// The response /// - protected HttpResponse Response { get; private set; } + protected HttpResponse Response { get; private set; } = default!; /// /// The output stream /// - protected StreamWriter Output { get; private set; } + protected StreamWriter Output { get; private set; } = default!; /// /// Html encoder used to encode content. @@ -88,7 +90,7 @@ protected void WriteLiteral(object value) WriteLiteralTo(Output, value); } - private List AttributeValues { get; set; } + private List? AttributeValues { get; set; } protected void WriteAttributeValue(string thingy, int startPostion, object value, int endValue, int dealyo, bool yesno) { @@ -97,10 +99,10 @@ protected void WriteAttributeValue(string thingy, int startPostion, object value AttributeValues = new List(); } - AttributeValues.Add(value.ToString()); + AttributeValues.Add(value.ToString()!); } - private string AttributeEnding { get; set; } + private string? AttributeEnding { get; set; } protected void BeginWriteAttribute(string name, string beginning, int startPosition, string ending, int endPosition, int thingy) { @@ -112,6 +114,7 @@ protected void BeginWriteAttribute(string name, string beginning, int startPosit protected void EndWriteAttribute() { + Debug.Assert(AttributeValues != null); Debug.Assert(!string.IsNullOrEmpty(AttributeEnding)); var attributes = string.Join(" ", AttributeValues); @@ -167,7 +170,7 @@ protected void WriteAttributeTo( // value might be a bool. If the value is the bool 'true' we want to write the attribute name // instead of the string 'true'. If the value is the bool 'false' we don't want to write anything. // Otherwise the value is another object (perhaps an HtmlString) and we'll ask it to format itself. - string stringValue; + string? stringValue; if (value.Value is bool) { if ((bool)value.Value) @@ -218,7 +221,7 @@ protected void Write(object value) /// Html encode and write /// /// - protected void Write(string value) + protected void Write(string? value) { WriteTo(Output, value); } @@ -263,9 +266,12 @@ protected void WriteTo(TextWriter writer, object value) /// /// The instance to write to. /// The to write. - protected void WriteTo(TextWriter writer, string value) + protected void WriteTo(TextWriter writer, string? value) { - WriteLiteralTo(writer, HtmlEncoder.Encode(value)); + if (!string.IsNullOrEmpty(value)) + { + WriteLiteralTo(writer, HtmlEncoder.Encode(value)); + } } /// @@ -275,7 +281,7 @@ protected void WriteTo(TextWriter writer, string value) /// The to write. protected void WriteLiteralTo(TextWriter writer, object value) { - WriteLiteralTo(writer, Convert.ToString(value, CultureInfo.InvariantCulture)); + WriteLiteralTo(writer, Convert.ToString(value, CultureInfo.InvariantCulture)!); } /// @@ -305,4 +311,4 @@ protected string HtmlEncodeAndReplaceLineBreaks(string input) .Select(HtmlEncoder.Encode)); } } -} \ No newline at end of file +}