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
+}