diff --git a/src/Http/Http.Abstractions/src/Routing/Endpoint.cs b/src/Http/Http.Abstractions/src/Routing/Endpoint.cs
index 4733177674ba..1f795f74ad42 100644
--- a/src/Http/Http.Abstractions/src/Routing/Endpoint.cs
+++ b/src/Http/Http.Abstractions/src/Routing/Endpoint.cs
@@ -20,8 +20,8 @@ public class Endpoint
///
public Endpoint(
RequestDelegate requestDelegate,
- EndpointMetadataCollection metadata,
- string displayName)
+ EndpointMetadataCollection? metadata,
+ string? displayName)
{
// All are allowed to be null
RequestDelegate = requestDelegate;
@@ -32,7 +32,7 @@ public Endpoint(
///
/// Gets the informational display name of this endpoint.
///
- public string DisplayName { get; }
+ public string? DisplayName { get; }
///
/// Gets the collection of metadata associated with this endpoint.
diff --git a/src/Http/Routing.Abstractions/src/IRouteConstraint.cs b/src/Http/Routing.Abstractions/src/IRouteConstraint.cs
index 076706dcd9e6..37ea18c67230 100644
--- a/src/Http/Routing.Abstractions/src/IRouteConstraint.cs
+++ b/src/Http/Routing.Abstractions/src/IRouteConstraint.cs
@@ -25,7 +25,7 @@ public interface IRouteConstraint : IParameterPolicy
/// true if the URL parameter contains a valid value; otherwise, false.
bool Match(
HttpContext? httpContext,
- IRouter route,
+ IRouter? route,
string routeKey,
RouteValueDictionary values,
RouteDirection routeDirection);
diff --git a/src/Http/Routing/src/ArrayBuilder.cs b/src/Http/Routing/src/ArrayBuilder.cs
index ff20c2e64dc5..ede0f990b618 100644
--- a/src/Http/Routing/src/ArrayBuilder.cs
+++ b/src/Http/Routing/src/ArrayBuilder.cs
@@ -6,6 +6,7 @@
//
// See https://github.com/dotnet/corefx/blob/143df51926f2ad397fef9c9ca7ede88e2721e801/src/Common/src/System/Collections/Generic/ArrayBuilder.cs
+#nullable disable
using System;
using System.Diagnostics;
diff --git a/src/Http/Routing/src/Builder/EndpointRoutingApplicationBuilderExtensions.cs b/src/Http/Routing/src/Builder/EndpointRoutingApplicationBuilderExtensions.cs
index d1d3617210e3..dbc343210739 100644
--- a/src/Http/Routing/src/Builder/EndpointRoutingApplicationBuilderExtensions.cs
+++ b/src/Http/Routing/src/Builder/EndpointRoutingApplicationBuilderExtensions.cs
@@ -128,7 +128,7 @@ private static void VerifyEndpointRoutingMiddlewareIsRegistered(IApplicationBuil
}
// If someone messes with this, just let it crash.
- endpointRouteBuilder = (DefaultEndpointRouteBuilder)obj;
+ endpointRouteBuilder = (DefaultEndpointRouteBuilder)obj!;
// This check handles the case where Map or something else that forks the pipeline is called between the two
// routing middleware.
diff --git a/src/Http/Routing/src/CompositeEndpointDataSource.cs b/src/Http/Routing/src/CompositeEndpointDataSource.cs
index 008ad09a9cf9..9d0a97c832c8 100644
--- a/src/Http/Routing/src/CompositeEndpointDataSource.cs
+++ b/src/Http/Routing/src/CompositeEndpointDataSource.cs
@@ -1,4 +1,4 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
@@ -6,6 +6,7 @@
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Text;
using System.Threading;
@@ -21,8 +22,8 @@ namespace Microsoft.AspNetCore.Routing
public sealed class CompositeEndpointDataSource : EndpointDataSource
{
private readonly object _lock;
- private readonly ICollection _dataSources;
- private IReadOnlyList _endpoints;
+ private readonly ICollection _dataSources = default!;
+ private IReadOnlyList _endpoints = default!;
private IChangeToken _consumerChangeToken;
private CancellationTokenSource _cts;
@@ -49,7 +50,7 @@ public CompositeEndpointDataSource(IEnumerable endpointDataS
}
}
- private void OnDataSourcesChanged(object sender, NotifyCollectionChangedEventArgs e)
+ private void OnDataSourcesChanged(object? sender, NotifyCollectionChangedEventArgs e)
{
lock (_lock)
{
@@ -140,6 +141,7 @@ private void HandleChange()
}
}
+ [MemberNotNull(nameof(_cts), nameof(_consumerChangeToken))]
private void CreateChangeToken()
{
_cts = new CancellationTokenSource();
@@ -198,7 +200,7 @@ private string DebuggerDisplayString
}
return sb.ToString();
- IEnumerable FormatValues(IEnumerable> values)
+ IEnumerable FormatValues(IEnumerable> values)
{
return values.Select(
kvp =>
diff --git a/src/Http/Routing/src/Constraints/BoolRouteConstraint.cs b/src/Http/Routing/src/Constraints/BoolRouteConstraint.cs
index d19000f9debb..26a37c2e80d3 100644
--- a/src/Http/Routing/src/Constraints/BoolRouteConstraint.cs
+++ b/src/Http/Routing/src/Constraints/BoolRouteConstraint.cs
@@ -14,8 +14,8 @@ public class BoolRouteConstraint : IRouteConstraint
{
///
public bool Match(
- HttpContext httpContext,
- IRouter route,
+ HttpContext? httpContext,
+ IRouter? route,
string routeKey,
RouteValueDictionary values,
RouteDirection routeDirection)
@@ -44,4 +44,4 @@ public bool Match(
return false;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Http/Routing/src/Constraints/CompositeRouteConstraint.cs b/src/Http/Routing/src/Constraints/CompositeRouteConstraint.cs
index 468699ce8a6f..023a32eae8ce 100644
--- a/src/Http/Routing/src/Constraints/CompositeRouteConstraint.cs
+++ b/src/Http/Routing/src/Constraints/CompositeRouteConstraint.cs
@@ -33,8 +33,8 @@ public CompositeRouteConstraint(IEnumerable constraints)
///
public bool Match(
- HttpContext httpContext,
- IRouter route,
+ HttpContext? httpContext,
+ IRouter? route,
string routeKey,
RouteValueDictionary values,
RouteDirection routeDirection)
@@ -60,4 +60,4 @@ public bool Match(
return true;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Http/Routing/src/Constraints/DateTimeRouteConstraint.cs b/src/Http/Routing/src/Constraints/DateTimeRouteConstraint.cs
index a912a84f52b6..2d7fdd1bc2c7 100644
--- a/src/Http/Routing/src/Constraints/DateTimeRouteConstraint.cs
+++ b/src/Http/Routing/src/Constraints/DateTimeRouteConstraint.cs
@@ -20,8 +20,8 @@ public class DateTimeRouteConstraint : IRouteConstraint
{
///
public bool Match(
- HttpContext httpContext,
- IRouter route,
+ HttpContext? httpContext,
+ IRouter? route,
string routeKey,
RouteValueDictionary values,
RouteDirection routeDirection)
@@ -50,4 +50,4 @@ public bool Match(
return false;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Http/Routing/src/Constraints/DecimalRouteConstraint.cs b/src/Http/Routing/src/Constraints/DecimalRouteConstraint.cs
index 9fcc80a9f17d..b08d13d5154e 100644
--- a/src/Http/Routing/src/Constraints/DecimalRouteConstraint.cs
+++ b/src/Http/Routing/src/Constraints/DecimalRouteConstraint.cs
@@ -14,8 +14,8 @@ public class DecimalRouteConstraint : IRouteConstraint
{
///
public bool Match(
- HttpContext httpContext,
- IRouter route,
+ HttpContext? httpContext,
+ IRouter? route,
string routeKey,
RouteValueDictionary values,
RouteDirection routeDirection)
@@ -44,4 +44,4 @@ public bool Match(
return false;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Http/Routing/src/Constraints/DoubleRouteConstraint.cs b/src/Http/Routing/src/Constraints/DoubleRouteConstraint.cs
index 405e46cb0d2e..e3c351d3e869 100644
--- a/src/Http/Routing/src/Constraints/DoubleRouteConstraint.cs
+++ b/src/Http/Routing/src/Constraints/DoubleRouteConstraint.cs
@@ -14,8 +14,8 @@ public class DoubleRouteConstraint : IRouteConstraint
{
///
public bool Match(
- HttpContext httpContext,
- IRouter route,
+ HttpContext? httpContext,
+ IRouter? route,
string routeKey,
RouteValueDictionary values,
RouteDirection routeDirection)
@@ -48,4 +48,4 @@ public bool Match(
return false;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Http/Routing/src/Constraints/FileNameRouteConstraint.cs b/src/Http/Routing/src/Constraints/FileNameRouteConstraint.cs
index 50d85eb86ff8..0051ef3fb121 100644
--- a/src/Http/Routing/src/Constraints/FileNameRouteConstraint.cs
+++ b/src/Http/Routing/src/Constraints/FileNameRouteConstraint.cs
@@ -85,8 +85,8 @@ public class FileNameRouteConstraint : IRouteConstraint
{
///
public bool Match(
- HttpContext httpContext,
- IRouter route,
+ HttpContext? httpContext,
+ IRouter? route,
string routeKey,
RouteValueDictionary values,
RouteDirection routeDirection)
diff --git a/src/Http/Routing/src/Constraints/FloatRouteConstraint.cs b/src/Http/Routing/src/Constraints/FloatRouteConstraint.cs
index fbdd3c87d6c6..5108da1bcb95 100644
--- a/src/Http/Routing/src/Constraints/FloatRouteConstraint.cs
+++ b/src/Http/Routing/src/Constraints/FloatRouteConstraint.cs
@@ -14,8 +14,8 @@ public class FloatRouteConstraint : IRouteConstraint
{
///
public bool Match(
- HttpContext httpContext,
- IRouter route,
+ HttpContext? httpContext,
+ IRouter? route,
string routeKey,
RouteValueDictionary values,
RouteDirection routeDirection)
@@ -48,4 +48,4 @@ public bool Match(
return false;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Http/Routing/src/Constraints/GuidRouteConstraint.cs b/src/Http/Routing/src/Constraints/GuidRouteConstraint.cs
index b87069df986a..101621c068e8 100644
--- a/src/Http/Routing/src/Constraints/GuidRouteConstraint.cs
+++ b/src/Http/Routing/src/Constraints/GuidRouteConstraint.cs
@@ -16,8 +16,8 @@ public class GuidRouteConstraint : IRouteConstraint
{
///
public bool Match(
- HttpContext httpContext,
- IRouter route,
+ HttpContext? httpContext,
+ IRouter? route,
string routeKey,
RouteValueDictionary values,
RouteDirection routeDirection)
@@ -46,4 +46,4 @@ public bool Match(
return false;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Http/Routing/src/Constraints/HttpMethodRouteConstraint.cs b/src/Http/Routing/src/Constraints/HttpMethodRouteConstraint.cs
index ea20e8141977..b2ad0eff33a2 100644
--- a/src/Http/Routing/src/Constraints/HttpMethodRouteConstraint.cs
+++ b/src/Http/Routing/src/Constraints/HttpMethodRouteConstraint.cs
@@ -35,8 +35,8 @@ public HttpMethodRouteConstraint(params string[] allowedMethods)
///
public virtual bool Match(
- HttpContext httpContext,
- IRouter route,
+ HttpContext? httpContext,
+ IRouter? route,
string routeKey,
RouteValueDictionary values,
RouteDirection routeDirection)
diff --git a/src/Http/Routing/src/Constraints/IntRouteConstraint.cs b/src/Http/Routing/src/Constraints/IntRouteConstraint.cs
index 34ff02331e24..6190180858c4 100644
--- a/src/Http/Routing/src/Constraints/IntRouteConstraint.cs
+++ b/src/Http/Routing/src/Constraints/IntRouteConstraint.cs
@@ -14,8 +14,8 @@ public class IntRouteConstraint : IRouteConstraint
{
///
public bool Match(
- HttpContext httpContext,
- IRouter route,
+ HttpContext? httpContext,
+ IRouter? route,
string routeKey,
RouteValueDictionary values,
RouteDirection routeDirection)
@@ -44,4 +44,4 @@ public bool Match(
return false;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Http/Routing/src/Constraints/LengthRouteConstraint.cs b/src/Http/Routing/src/Constraints/LengthRouteConstraint.cs
index 8964f2549eef..52fecb9d4224 100644
--- a/src/Http/Routing/src/Constraints/LengthRouteConstraint.cs
+++ b/src/Http/Routing/src/Constraints/LengthRouteConstraint.cs
@@ -71,8 +71,8 @@ public LengthRouteConstraint(int minLength, int maxLength)
///
public bool Match(
- HttpContext httpContext,
- IRouter route,
+ HttpContext? httpContext,
+ IRouter? route,
string routeKey,
RouteValueDictionary values,
RouteDirection routeDirection)
@@ -89,7 +89,7 @@ public bool Match(
if (values.TryGetValue(routeKey, out var value) && value != null)
{
- var valueString = Convert.ToString(value, CultureInfo.InvariantCulture);
+ var valueString = Convert.ToString(value, CultureInfo.InvariantCulture)!;
var length = valueString.Length;
return length >= MinLength && length <= MaxLength;
}
@@ -97,4 +97,4 @@ public bool Match(
return false;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Http/Routing/src/Constraints/LongRouteConstraint.cs b/src/Http/Routing/src/Constraints/LongRouteConstraint.cs
index 8ed5cccc467e..493be38eb1b8 100644
--- a/src/Http/Routing/src/Constraints/LongRouteConstraint.cs
+++ b/src/Http/Routing/src/Constraints/LongRouteConstraint.cs
@@ -14,8 +14,8 @@ public class LongRouteConstraint : IRouteConstraint
{
///
public bool Match(
- HttpContext httpContext,
- IRouter route,
+ HttpContext? httpContext,
+ IRouter? route,
string routeKey,
RouteValueDictionary values,
RouteDirection routeDirection)
@@ -44,4 +44,4 @@ public bool Match(
return false;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Http/Routing/src/Constraints/MaxLengthRouteConstraint.cs b/src/Http/Routing/src/Constraints/MaxLengthRouteConstraint.cs
index 4005a041aaa4..470f9110d832 100644
--- a/src/Http/Routing/src/Constraints/MaxLengthRouteConstraint.cs
+++ b/src/Http/Routing/src/Constraints/MaxLengthRouteConstraint.cs
@@ -34,8 +34,8 @@ public MaxLengthRouteConstraint(int maxLength)
///
public bool Match(
- HttpContext httpContext,
- IRouter route,
+ HttpContext? httpContext,
+ IRouter? route,
string routeKey,
RouteValueDictionary values,
RouteDirection routeDirection)
@@ -52,11 +52,11 @@ public bool Match(
if (values.TryGetValue(routeKey, out var value) && value != null)
{
- var valueString = Convert.ToString(value, CultureInfo.InvariantCulture);
+ var valueString = Convert.ToString(value, CultureInfo.InvariantCulture)!;
return valueString.Length <= MaxLength;
}
return false;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Http/Routing/src/Constraints/MaxRouteConstraint.cs b/src/Http/Routing/src/Constraints/MaxRouteConstraint.cs
index dab22f5075ff..c7d5e91dfef5 100644
--- a/src/Http/Routing/src/Constraints/MaxRouteConstraint.cs
+++ b/src/Http/Routing/src/Constraints/MaxRouteConstraint.cs
@@ -28,8 +28,8 @@ public MaxRouteConstraint(long max)
///
public bool Match(
- HttpContext httpContext,
- IRouter route,
+ HttpContext? httpContext,
+ IRouter? route,
string routeKey,
RouteValueDictionary values,
RouteDirection routeDirection)
@@ -56,4 +56,4 @@ public bool Match(
return false;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Http/Routing/src/Constraints/MinLengthRouteConstraint.cs b/src/Http/Routing/src/Constraints/MinLengthRouteConstraint.cs
index c58bd0b30d80..9c7b54704bcb 100644
--- a/src/Http/Routing/src/Constraints/MinLengthRouteConstraint.cs
+++ b/src/Http/Routing/src/Constraints/MinLengthRouteConstraint.cs
@@ -34,8 +34,8 @@ public MinLengthRouteConstraint(int minLength)
///
public bool Match(
- HttpContext httpContext,
- IRouter route,
+ HttpContext? httpContext,
+ IRouter? route,
string routeKey,
RouteValueDictionary values,
RouteDirection routeDirection)
@@ -52,11 +52,11 @@ public bool Match(
if (values.TryGetValue(routeKey, out var value) && value != null)
{
- var valueString = Convert.ToString(value, CultureInfo.InvariantCulture);
+ var valueString = Convert.ToString(value, CultureInfo.InvariantCulture)!;
return valueString.Length >= MinLength;
}
return false;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Http/Routing/src/Constraints/MinRouteConstraint.cs b/src/Http/Routing/src/Constraints/MinRouteConstraint.cs
index 450ed46fbf73..ef504f446d24 100644
--- a/src/Http/Routing/src/Constraints/MinRouteConstraint.cs
+++ b/src/Http/Routing/src/Constraints/MinRouteConstraint.cs
@@ -28,8 +28,8 @@ public MinRouteConstraint(long min)
///
public bool Match(
- HttpContext httpContext,
- IRouter route,
+ HttpContext? httpContext,
+ IRouter? route,
string routeKey,
RouteValueDictionary values,
RouteDirection routeDirection)
@@ -56,4 +56,4 @@ public bool Match(
return false;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Http/Routing/src/Constraints/NonFileNameRouteConstraint.cs b/src/Http/Routing/src/Constraints/NonFileNameRouteConstraint.cs
index c6867b6e05ba..9d58423b9ae5 100644
--- a/src/Http/Routing/src/Constraints/NonFileNameRouteConstraint.cs
+++ b/src/Http/Routing/src/Constraints/NonFileNameRouteConstraint.cs
@@ -81,8 +81,8 @@ public class NonFileNameRouteConstraint : IRouteConstraint
{
///
public bool Match(
- HttpContext httpContext,
- IRouter route,
+ HttpContext? httpContext,
+ IRouter? route,
string routeKey,
RouteValueDictionary values,
RouteDirection routeDirection)
diff --git a/src/Http/Routing/src/Constraints/NullRouteConstraint.cs b/src/Http/Routing/src/Constraints/NullRouteConstraint.cs
index f61e74041945..7accfcb16623 100644
--- a/src/Http/Routing/src/Constraints/NullRouteConstraint.cs
+++ b/src/Http/Routing/src/Constraints/NullRouteConstraint.cs
@@ -1,4 +1,4 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using Microsoft.AspNetCore.Http;
@@ -13,7 +13,7 @@ private NullRouteConstraint()
{
}
- public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
+ public bool Match(HttpContext? httpContext, IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
{
return true;
}
diff --git a/src/Http/Routing/src/Constraints/OptionalRouteConstraint.cs b/src/Http/Routing/src/Constraints/OptionalRouteConstraint.cs
index 6b7cf8a1a5ad..f66bdd67de9b 100644
--- a/src/Http/Routing/src/Constraints/OptionalRouteConstraint.cs
+++ b/src/Http/Routing/src/Constraints/OptionalRouteConstraint.cs
@@ -24,8 +24,8 @@ public OptionalRouteConstraint(IRouteConstraint innerConstraint)
public IRouteConstraint InnerConstraint { get; }
public bool Match(
- HttpContext httpContext,
- IRouter route,
+ HttpContext? httpContext,
+ IRouter? route,
string routeKey,
RouteValueDictionary values,
RouteDirection routeDirection)
@@ -52,4 +52,4 @@ public bool Match(
return true;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Http/Routing/src/Constraints/RangeRouteConstraint.cs b/src/Http/Routing/src/Constraints/RangeRouteConstraint.cs
index 34c946fa6623..3e7dde78cb17 100644
--- a/src/Http/Routing/src/Constraints/RangeRouteConstraint.cs
+++ b/src/Http/Routing/src/Constraints/RangeRouteConstraint.cs
@@ -42,8 +42,8 @@ public RangeRouteConstraint(long min, long max)
///
public bool Match(
- HttpContext httpContext,
- IRouter route,
+ HttpContext? httpContext,
+ IRouter? route,
string routeKey,
RouteValueDictionary values,
RouteDirection routeDirection)
@@ -70,4 +70,4 @@ public bool Match(
return false;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Http/Routing/src/Constraints/RegexRouteConstraint.cs b/src/Http/Routing/src/Constraints/RegexRouteConstraint.cs
index 9269de51a30c..4d17f5d7ea37 100644
--- a/src/Http/Routing/src/Constraints/RegexRouteConstraint.cs
+++ b/src/Http/Routing/src/Constraints/RegexRouteConstraint.cs
@@ -38,8 +38,8 @@ public RegexRouteConstraint(string regexPattern)
public Regex Constraint { get; private set; }
public bool Match(
- HttpContext httpContext,
- IRouter route,
+ HttpContext? httpContext,
+ IRouter? route,
string routeKey,
RouteValueDictionary values,
RouteDirection routeDirection)
@@ -57,7 +57,7 @@ public bool Match(
if (values.TryGetValue(routeKey, out var routeValue)
&& routeValue != null)
{
- var parameterValueString = Convert.ToString(routeValue, CultureInfo.InvariantCulture);
+ var parameterValueString = Convert.ToString(routeValue, CultureInfo.InvariantCulture)!;
return Constraint.IsMatch(parameterValueString);
}
diff --git a/src/Http/Routing/src/Constraints/RequiredRouteConstraint.cs b/src/Http/Routing/src/Constraints/RequiredRouteConstraint.cs
index e33e1e23a667..71b594a07b20 100644
--- a/src/Http/Routing/src/Constraints/RequiredRouteConstraint.cs
+++ b/src/Http/Routing/src/Constraints/RequiredRouteConstraint.cs
@@ -18,8 +18,8 @@ public class RequiredRouteConstraint : IRouteConstraint
{
///
public bool Match(
- HttpContext httpContext,
- IRouter route,
+ HttpContext? httpContext,
+ IRouter? route,
string routeKey,
RouteValueDictionary values,
RouteDirection routeDirection)
@@ -44,4 +44,4 @@ public bool Match(
return false;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Http/Routing/src/Constraints/StringRouteConstraint.cs b/src/Http/Routing/src/Constraints/StringRouteConstraint.cs
index fb6a3568c340..737cf228128f 100644
--- a/src/Http/Routing/src/Constraints/StringRouteConstraint.cs
+++ b/src/Http/Routing/src/Constraints/StringRouteConstraint.cs
@@ -1,4 +1,4 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
@@ -29,7 +29,7 @@ public StringRouteConstraint(string value)
}
///
- public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
+ public bool Match(HttpContext? httpContext, IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
{
if (routeKey == null)
{
@@ -44,7 +44,7 @@ public bool Match(HttpContext httpContext, IRouter route, string routeKey, Route
if (values.TryGetValue(routeKey, out var routeValue)
&& routeValue != null)
{
- var parameterValueString = Convert.ToString(routeValue, CultureInfo.InvariantCulture);
+ var parameterValueString = Convert.ToString(routeValue, CultureInfo.InvariantCulture)!;
return parameterValueString.Equals(_value, StringComparison.OrdinalIgnoreCase);
}
@@ -52,4 +52,4 @@ public bool Match(HttpContext httpContext, IRouter route, string routeKey, Route
return false;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Http/Routing/src/DataSourceDependentCache.cs b/src/Http/Routing/src/DataSourceDependentCache.cs
index f31807e171ca..53b8572694ef 100644
--- a/src/Http/Routing/src/DataSourceDependentCache.cs
+++ b/src/Http/Routing/src/DataSourceDependentCache.cs
@@ -1,6 +1,8 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+#nullable disable
+
using System;
using System.Collections.Generic;
using System.Threading;
diff --git a/src/Http/Routing/src/DecisionTree/DecisionCriterion.cs b/src/Http/Routing/src/DecisionTree/DecisionCriterion.cs
index efc9c742d26d..ce8ec1149893 100644
--- a/src/Http/Routing/src/DecisionTree/DecisionCriterion.cs
+++ b/src/Http/Routing/src/DecisionTree/DecisionCriterion.cs
@@ -1,6 +1,8 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+#nullable disable
+
using System.Collections.Generic;
namespace Microsoft.AspNetCore.Routing.DecisionTree
@@ -11,4 +13,4 @@ internal class DecisionCriterion
public Dictionary
- public RouteValueDictionary Values { get; internal set; }
+ public RouteValueDictionary? Values { get; internal set; }
}
}
diff --git a/src/Http/Routing/src/Matching/DataSourceDependentMatcher.cs b/src/Http/Routing/src/Matching/DataSourceDependentMatcher.cs
index c757b1646ec9..bf6c02102eb9 100644
--- a/src/Http/Routing/src/Matching/DataSourceDependentMatcher.cs
+++ b/src/Http/Routing/src/Matching/DataSourceDependentMatcher.cs
@@ -57,10 +57,10 @@ private Matcher CreateMatcher(IReadOnlyList endpoints)
public sealed class Lifetime : IDisposable
{
private readonly object _lock = new object();
- private DataSourceDependentCache _cache;
+ private DataSourceDependentCache? _cache;
private bool _disposed;
- public DataSourceDependentCache Cache
+ public DataSourceDependentCache? Cache
{
get => _cache;
set
diff --git a/src/Http/Routing/src/Matching/DefaultEndpointSelector.cs b/src/Http/Routing/src/Matching/DefaultEndpointSelector.cs
index cc455d4eb7b1..31c863a5a9ac 100644
--- a/src/Http/Routing/src/Matching/DefaultEndpointSelector.cs
+++ b/src/Http/Routing/src/Matching/DefaultEndpointSelector.cs
@@ -47,7 +47,7 @@ internal static void Select(HttpContext httpContext, CandidateState[] candidateS
if (CandidateSet.IsValidCandidate(ref state))
{
httpContext.SetEndpoint(state.Endpoint);
- httpContext.Request.RouteValues = state.Values;
+ httpContext.Request.RouteValues = state.Values!;
}
break;
@@ -67,8 +67,8 @@ private static void ProcessFinalCandidates(
HttpContext httpContext,
CandidateState[] candidateState)
{
- Endpoint endpoint = null;
- RouteValueDictionary values = null;
+ Endpoint? endpoint = null;
+ RouteValueDictionary? values = null;
int? foundScore = null;
for (var i = 0; i < candidateState.Length; i++)
{
@@ -110,7 +110,7 @@ private static void ProcessFinalCandidates(
if (endpoint != null)
{
httpContext.SetEndpoint(endpoint);
- httpContext.Request.RouteValues = values;
+ httpContext.Request.RouteValues = values!;
}
}
diff --git a/src/Http/Routing/src/Matching/DfaMatcher.cs b/src/Http/Routing/src/Matching/DfaMatcher.cs
index d79f13e2abac..e40e21e252a9 100644
--- a/src/Http/Routing/src/Matching/DfaMatcher.cs
+++ b/src/Http/Routing/src/Matching/DfaMatcher.cs
@@ -40,7 +40,7 @@ public sealed override Task MatchAsync(HttpContext httpContext)
// The sequence of actions we take is optimized to avoid doing expensive work
// like creating substrings, creating route value dictionaries, and calling
// into policies like versioning.
- var path = httpContext.Request.Path.Value;
+ var path = httpContext.Request.Path.Value!;
// First tokenize the path into series of segments.
Span buffer = stackalloc PathSegment[_maxSegmentCount];
@@ -119,7 +119,7 @@ public sealed override Task MatchAsync(HttpContext httpContext)
// We want to create a new array for the route values based on Slots
// as a prototype.
var prototype = candidate.Slots;
- var slots = new KeyValuePair[prototype.Length];
+ var slots = new KeyValuePair[prototype.Length];
if ((flags & Candidate.CandidateFlags.HasDefaults) != 0)
{
@@ -221,7 +221,7 @@ public sealed override Task MatchAsync(HttpContext httpContext)
}
private void ProcessCaptures(
- KeyValuePair[] slots,
+ KeyValuePair[] slots,
(string parameterName, int segmentIndex, int slotIndex)[] captures,
string path,
ReadOnlySpan segments)
@@ -235,7 +235,7 @@ private void ProcessCaptures(
var segment = segments[segmentIndex];
if (parameterName != null && segment.Length > 0)
{
- slots[slotIndex] = new KeyValuePair(
+ slots[slotIndex] = new KeyValuePair(
parameterName,
path.Substring(segment.Start, segment.Length));
}
@@ -244,7 +244,7 @@ private void ProcessCaptures(
}
private void ProcessCatchAll(
- KeyValuePair[] slots,
+ KeyValuePair[] slots,
in (string parameterName, int segmentIndex, int slotIndex) catchAll,
string path,
ReadOnlySpan segments)
@@ -255,7 +255,7 @@ private void ProcessCatchAll(
if ((uint)segmentIndex < (uint)segments.Length)
{
var segment = segments[segmentIndex];
- slots[catchAll.slotIndex] = new KeyValuePair(
+ slots[catchAll.slotIndex] = new KeyValuePair(
catchAll.parameterName,
path.Substring(segment.Start));
}
@@ -333,6 +333,7 @@ internal static class EventIds
public static readonly EventId CandidateValid = new EventId(1005, "CandiateValid");
}
+#nullable disable
private static class Logger
{
private static readonly Action _candidatesNotFound = LoggerMessage.Define(
diff --git a/src/Http/Routing/src/Matching/DfaMatcherBuilder.cs b/src/Http/Routing/src/Matching/DfaMatcherBuilder.cs
index 2782f8a3ae5e..c10c34d12b59 100644
--- a/src/Http/Routing/src/Matching/DfaMatcherBuilder.cs
+++ b/src/Http/Routing/src/Matching/DfaMatcherBuilder.cs
@@ -1,6 +1,8 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+#nullable disable
+
using System;
using System.Collections.Generic;
using System.Linq;
diff --git a/src/Http/Routing/src/Matching/DfaNode.cs b/src/Http/Routing/src/Matching/DfaNode.cs
index 602a48a0e267..b0ba4b9887d0 100644
--- a/src/Http/Routing/src/Matching/DfaNode.cs
+++ b/src/Http/Routing/src/Matching/DfaNode.cs
@@ -1,6 +1,8 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+#nullable disable
+
using System;
using System.Collections.Generic;
using System.Diagnostics;
diff --git a/src/Http/Routing/src/Matching/EndpointComparer.cs b/src/Http/Routing/src/Matching/EndpointComparer.cs
index 7df5de8ea42e..b76802f2e638 100644
--- a/src/Http/Routing/src/Matching/EndpointComparer.cs
+++ b/src/Http/Routing/src/Matching/EndpointComparer.cs
@@ -38,7 +38,7 @@ public EndpointComparer(IEndpointComparerPolicy[] policies)
}
}
- public int Compare(Endpoint x, Endpoint y)
+ public int Compare(Endpoint? x, Endpoint? y)
{
// We don't expose this publicly, and we should never call it on
// a null endpoint.
@@ -74,7 +74,7 @@ private int ComparePattern(Endpoint x, Endpoint y)
return 0;
}
- public bool Equals(Endpoint x, Endpoint y)
+ public bool Equals(Endpoint? x, Endpoint? y)
{
// We don't expose this publicly, and we should never call it on
// a null endpoint.
@@ -109,7 +109,7 @@ private class OrderComparer : IComparer
{
public static readonly IComparer Instance = new OrderComparer();
- public int Compare(Endpoint x, Endpoint y)
+ public int Compare(Endpoint? x, Endpoint? y)
{
var routeEndpointX = x as RouteEndpoint;
var routeEndpointY = y as RouteEndpoint;
@@ -136,7 +136,7 @@ private class PrecedenceComparer : IComparer
{
public static readonly IComparer Instance = new PrecedenceComparer();
- public int Compare(Endpoint x, Endpoint y)
+ public int Compare(Endpoint? x, Endpoint? y)
{
var routeEndpointX = x as RouteEndpoint;
var routeEndpointY = y as RouteEndpoint;
diff --git a/src/Http/Routing/src/Matching/HostMatcherPolicy.cs b/src/Http/Routing/src/Matching/HostMatcherPolicy.cs
index be6f5bbf847a..d0f29612e469 100644
--- a/src/Http/Routing/src/Matching/HostMatcherPolicy.cs
+++ b/src/Http/Routing/src/Matching/HostMatcherPolicy.cs
@@ -342,7 +342,7 @@ private static (string host, int? port) GetHostAndPort(HttpContext httpContext)
private class HostMetadataEndpointComparer : EndpointMetadataComparer
{
- protected override int CompareMetadata(IHostMetadata x, IHostMetadata y)
+ protected override int CompareMetadata(IHostMetadata? x, IHostMetadata? y)
{
// Ignore the metadata if it has an empty list of hosts.
return base.CompareMetadata(
@@ -391,9 +391,9 @@ public override int GetDestination(HttpContext httpContext)
public readonly int? Port;
public readonly string Host;
- private readonly string _wildcardEndsWith;
+ private readonly string? _wildcardEndsWith;
- public EdgeKey(string host, int? port)
+ public EdgeKey(string? host, int? port)
{
Host = host ?? WildcardHost;
Port = port;
@@ -421,9 +421,9 @@ public int CompareTo(EdgeKey other)
return Comparer.Default.Compare(Port, other.Port);
}
- public int CompareTo(object obj)
+ public int CompareTo(object? obj)
{
- return CompareTo((EdgeKey)obj);
+ return CompareTo((EdgeKey)obj!);
}
public bool Equals(EdgeKey other)
@@ -437,7 +437,7 @@ public bool MatchHost(string host)
{
if (HasHostWildcard)
{
- return host.EndsWith(_wildcardEndsWith, StringComparison.OrdinalIgnoreCase);
+ return host.EndsWith(_wildcardEndsWith!, StringComparison.OrdinalIgnoreCase);
}
else
{
@@ -454,7 +454,7 @@ public override int GetHashCode()
return (Host?.GetHashCode() ?? 0) ^ (Port?.GetHashCode() ?? 0);
}
- public override bool Equals(object obj)
+ public override bool Equals(object? obj)
{
if (obj is EdgeKey key)
{
diff --git a/src/Http/Routing/src/Matching/HttpMethodMatcherPolicy.cs b/src/Http/Routing/src/Matching/HttpMethodMatcherPolicy.cs
index 2dfdefcf020e..039d889fed53 100644
--- a/src/Http/Routing/src/Matching/HttpMethodMatcherPolicy.cs
+++ b/src/Http/Routing/src/Matching/HttpMethodMatcherPolicy.cs
@@ -108,7 +108,7 @@ public Task ApplyAsync(HttpContext httpContext, CandidateSet candidates)
// We want to return a 405 iff we eliminated ALL of the currently valid endpoints due to HTTP method
// mismatch.
bool? needs405Endpoint = null;
- HashSet methods = null;
+ HashSet? methods = null;
for (var i = 0; i < candidates.Count; i++)
{
@@ -168,8 +168,8 @@ public Task ApplyAsync(HttpContext httpContext, CandidateSet candidates)
if (needs405Endpoint == true)
{
// We saw some endpoints coming in, and we eliminated them all.
- httpContext.SetEndpoint(CreateRejectionEndpoint(methods.OrderBy(m => m, StringComparer.OrdinalIgnoreCase)));
- httpContext.Request.RouteValues = null;
+ httpContext.SetEndpoint(CreateRejectionEndpoint(methods!.OrderBy(m => m, StringComparer.OrdinalIgnoreCase)));
+ httpContext.Request.RouteValues = null!;
}
return Task.CompletedTask;
@@ -329,8 +329,8 @@ public IReadOnlyList GetEdges(IReadOnlyList endpoints)
///
public PolicyJumpTable BuildJumpTable(int exitDestination, IReadOnlyList edges)
{
- Dictionary destinations = null;
- Dictionary corsPreflightDestinations = null;
+ Dictionary? destinations = null;
+ Dictionary? corsPreflightDestinations = null;
for (var i = 0; i < edges.Count; i++)
{
// We create this data, so it's safe to cast it.
@@ -421,17 +421,17 @@ private static bool ContainsHttpMethod(List httpMethods, string httpMeth
private class HttpMethodPolicyJumpTable : PolicyJumpTable
{
private readonly int _exitDestination;
- private readonly Dictionary _destinations;
+ private readonly Dictionary? _destinations;
private readonly int _corsPreflightExitDestination;
- private readonly Dictionary _corsPreflightDestinations;
+ private readonly Dictionary? _corsPreflightDestinations;
private readonly bool _supportsCorsPreflight;
public HttpMethodPolicyJumpTable(
int exitDestination,
- Dictionary destinations,
+ Dictionary? destinations,
int corsPreflightExitDestination,
- Dictionary corsPreflightDestinations)
+ Dictionary? corsPreflightDestinations)
{
_exitDestination = exitDestination;
_destinations = destinations;
@@ -466,7 +466,7 @@ public override int GetDestination(HttpContext httpContext)
private class HttpMethodMetadataEndpointComparer : EndpointMetadataComparer
{
- protected override int CompareMetadata(IHttpMethodMetadata x, IHttpMethodMetadata y)
+ protected override int CompareMetadata(IHttpMethodMetadata? x, IHttpMethodMetadata? y)
{
// Ignore the metadata if it has an empty list of HTTP methods.
return base.CompareMetadata(
@@ -501,9 +501,9 @@ public int CompareTo(EdgeKey other)
return IsCorsPreflightRequest.CompareTo(other.IsCorsPreflightRequest);
}
- public int CompareTo(object obj)
+ public int CompareTo(object? obj)
{
- return CompareTo((EdgeKey)obj);
+ return CompareTo((EdgeKey)obj!);
}
public bool Equals(EdgeKey other)
@@ -513,7 +513,7 @@ public bool Equals(EdgeKey other)
HttpMethods.Equals(HttpMethod, other.HttpMethod);
}
- public override bool Equals(object obj)
+ public override bool Equals(object? obj)
{
var other = obj as EdgeKey?;
return other == null ? false : Equals(other.Value);
diff --git a/src/Http/Routing/src/Matching/ILEmitTrieFactory.cs b/src/Http/Routing/src/Matching/ILEmitTrieFactory.cs
index 3cb240c2fa28..18a60c4e0d94 100644
--- a/src/Http/Routing/src/Matching/ILEmitTrieFactory.cs
+++ b/src/Http/Routing/src/Matching/ILEmitTrieFactory.cs
@@ -1,6 +1,8 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+#nullable disable
+
using System;
using System.Diagnostics;
using System.Linq;
diff --git a/src/Http/Routing/src/Matching/ILEmitTrieJumpTable.cs b/src/Http/Routing/src/Matching/ILEmitTrieJumpTable.cs
index e59f2834354a..18bdd2bc356e 100644
--- a/src/Http/Routing/src/Matching/ILEmitTrieJumpTable.cs
+++ b/src/Http/Routing/src/Matching/ILEmitTrieJumpTable.cs
@@ -1,6 +1,8 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+#nullable disable
+
using System;
using System.Threading;
using System.Threading.Tasks;
diff --git a/src/Http/Routing/src/Matching/PathSegment.cs b/src/Http/Routing/src/Matching/PathSegment.cs
index a5f570f8b527..fd8d8a9223c1 100644
--- a/src/Http/Routing/src/Matching/PathSegment.cs
+++ b/src/Http/Routing/src/Matching/PathSegment.cs
@@ -1,4 +1,4 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
@@ -16,7 +16,7 @@ public PathSegment(int start, int length)
Length = length;
}
- public override bool Equals(object obj)
+ public override bool Equals(object? obj)
{
return obj is PathSegment segment ? Equals(segment) : false;
}
diff --git a/src/Http/Routing/src/Microsoft.AspNetCore.Routing.csproj b/src/Http/Routing/src/Microsoft.AspNetCore.Routing.csproj
index 1937aae7f6a0..9ff392522517 100644
--- a/src/Http/Routing/src/Microsoft.AspNetCore.Routing.csproj
+++ b/src/Http/Routing/src/Microsoft.AspNetCore.Routing.csproj
@@ -12,7 +12,7 @@ Microsoft.AspNetCore.Routing.RouteCollection
aspnetcore;routing
true
false
- annotations
+ enable
diff --git a/src/Http/Routing/src/NullRouter.cs b/src/Http/Routing/src/NullRouter.cs
index 9fd1908942f4..2823067b5e41 100644
--- a/src/Http/Routing/src/NullRouter.cs
+++ b/src/Http/Routing/src/NullRouter.cs
@@ -1,4 +1,4 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Threading.Tasks;
@@ -13,7 +13,7 @@ private NullRouter()
{
}
- public VirtualPathData GetVirtualPath(VirtualPathContext context)
+ public VirtualPathData? GetVirtualPath(VirtualPathContext context)
{
return null;
}
diff --git a/src/Http/Routing/src/ParameterPolicyActivator.cs b/src/Http/Routing/src/ParameterPolicyActivator.cs
index b83c5c186bd8..81da4d49e96e 100644
--- a/src/Http/Routing/src/ParameterPolicyActivator.cs
+++ b/src/Http/Routing/src/ParameterPolicyActivator.cs
@@ -1,12 +1,13 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+#nullable disable
+
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Reflection;
-using System.Text;
using Microsoft.Extensions.DependencyInjection;
namespace Microsoft.AspNetCore.Routing
diff --git a/src/Http/Routing/src/ParameterPolicyFactory.cs b/src/Http/Routing/src/ParameterPolicyFactory.cs
index 2d8e665b47a8..95212e126309 100644
--- a/src/Http/Routing/src/ParameterPolicyFactory.cs
+++ b/src/Http/Routing/src/ParameterPolicyFactory.cs
@@ -26,7 +26,7 @@ public abstract class ParameterPolicyFactory
/// The parameter the parameter policy is being created for.
/// An existing parameter policy.
/// The for the parameter.
- public abstract IParameterPolicy Create(RoutePatternParameterPart parameter, IParameterPolicy parameterPolicy);
+ public abstract IParameterPolicy Create(RoutePatternParameterPart? parameter, IParameterPolicy parameterPolicy);
///
/// Creates a parameter policy.
@@ -34,7 +34,7 @@ public abstract class ParameterPolicyFactory
/// The parameter the parameter policy is being created for.
/// The reference to resolve.
/// The for the parameter.
- public IParameterPolicy Create(RoutePatternParameterPart parameter, RoutePatternParameterPolicyReference reference)
+ public IParameterPolicy Create(RoutePatternParameterPart? parameter, RoutePatternParameterPolicyReference reference)
{
if (reference == null)
{
diff --git a/src/Http/Routing/src/PathTokenizer.cs b/src/Http/Routing/src/PathTokenizer.cs
index 307dfb115944..79f971e49738 100644
--- a/src/Http/Routing/src/PathTokenizer.cs
+++ b/src/Http/Routing/src/PathTokenizer.cs
@@ -1,6 +1,8 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+#nullable disable
+
using System;
using System.Collections;
using System.Collections.Generic;
diff --git a/src/Http/Routing/src/Patterns/DefaultRoutePatternTransformer.cs b/src/Http/Routing/src/Patterns/DefaultRoutePatternTransformer.cs
index 39adf3a4d038..c79946c728a1 100644
--- a/src/Http/Routing/src/Patterns/DefaultRoutePatternTransformer.cs
+++ b/src/Http/Routing/src/Patterns/DefaultRoutePatternTransformer.cs
@@ -1,6 +1,8 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+#nullable disable
+
using System;
using System.Collections.Generic;
diff --git a/src/Http/Routing/src/Patterns/RouteParameterParser.cs b/src/Http/Routing/src/Patterns/RouteParameterParser.cs
index 07c8d91bb910..072ab0d8fc91 100644
--- a/src/Http/Routing/src/Patterns/RouteParameterParser.cs
+++ b/src/Http/Routing/src/Patterns/RouteParameterParser.cs
@@ -78,7 +78,7 @@ public static RoutePatternParameterPart ParseRouteParameter(string parameter)
var parseResults = ParseConstraints(parameter, currentIndex, endIndex);
currentIndex = parseResults.CurrentIndex;
- string defaultValue = null;
+ string? defaultValue = null;
if (currentIndex <= endIndex &&
parameter[currentIndex] == '=')
{
diff --git a/src/Http/Routing/src/Patterns/RoutePattern.cs b/src/Http/Routing/src/Patterns/RoutePattern.cs
index 4cd881c8e20c..055a06266989 100644
--- a/src/Http/Routing/src/Patterns/RoutePattern.cs
+++ b/src/Http/Routing/src/Patterns/RoutePattern.cs
@@ -27,7 +27,7 @@ public sealed class RoutePattern
///
public static readonly object RequiredValueAny = new RequiredValueAnySentinal();
- internal static bool IsRequiredValueAny(object value)
+ internal static bool IsRequiredValueAny(object? value)
{
return object.ReferenceEquals(RequiredValueAny, value);
}
@@ -35,10 +35,10 @@ internal static bool IsRequiredValueAny(object value)
private const string SeparatorString = "/";
internal RoutePattern(
- string rawText,
- IReadOnlyDictionary defaults,
+ string? rawText,
+ IReadOnlyDictionary defaults,
IReadOnlyDictionary> parameterPolicies,
- IReadOnlyDictionary requiredValues,
+ IReadOnlyDictionary requiredValues,
IReadOnlyList parameters,
IReadOnlyList pathSegments)
{
@@ -63,7 +63,7 @@ internal RoutePattern(
/// Gets the set of default values for the route pattern.
/// The keys of are the route parameter names.
///
- public IReadOnlyDictionary Defaults { get; }
+ public IReadOnlyDictionary Defaults { get; }
///
/// Gets the set of parameter policy references for the route pattern.
@@ -92,7 +92,7 @@ internal RoutePattern(
///
///
///
- public IReadOnlyDictionary RequiredValues { get; }
+ public IReadOnlyDictionary RequiredValues { get; }
///
/// Gets the precedence value of the route pattern for URL matching.
@@ -115,7 +115,7 @@ internal RoutePattern(
///
/// Gets the raw text supplied when parsing the route pattern. May be null.
///
- public string RawText { get; }
+ public string? RawText { get; }
///
/// Gets the list of route parameters.
@@ -132,7 +132,7 @@ internal RoutePattern(
///
/// The name of the parameter to match.
/// The matching parameter or null if no parameter matches the given name.
- public RoutePatternParameterPart GetParameter(string name)
+ public RoutePatternParameterPart? GetParameter(string name)
{
if (name == null)
{
diff --git a/src/Http/Routing/src/Patterns/RoutePatternException.cs b/src/Http/Routing/src/Patterns/RoutePatternException.cs
index 7b21ac0ac5f0..c7c95f068c3a 100644
--- a/src/Http/Routing/src/Patterns/RoutePatternException.cs
+++ b/src/Http/Routing/src/Patterns/RoutePatternException.cs
@@ -1,4 +1,4 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
@@ -15,7 +15,7 @@ public sealed class RoutePatternException : Exception
private RoutePatternException(SerializationInfo info, StreamingContext context)
: base(info, context)
{
- Pattern = (string)info.GetValue(nameof(Pattern), typeof(string));
+ Pattern = (string)info.GetValue(nameof(Pattern), typeof(string))!;
}
///
diff --git a/src/Http/Routing/src/Patterns/RoutePatternFactory.cs b/src/Http/Routing/src/Patterns/RoutePatternFactory.cs
index 91c8ae8b385d..8832e94e599d 100644
--- a/src/Http/Routing/src/Patterns/RoutePatternFactory.cs
+++ b/src/Http/Routing/src/Patterns/RoutePatternFactory.cs
@@ -17,8 +17,8 @@ namespace Microsoft.AspNetCore.Routing.Patterns
///
public static class RoutePatternFactory
{
- private static readonly IReadOnlyDictionary EmptyDictionary =
- new ReadOnlyDictionary(new Dictionary());
+ private static readonly IReadOnlyDictionary EmptyDictionary =
+ new ReadOnlyDictionary(new Dictionary());
private static readonly IReadOnlyDictionary> EmptyPoliciesDictionary =
new ReadOnlyDictionary>(new Dictionary>());
@@ -55,7 +55,7 @@ public static RoutePattern Parse(string pattern)
/// Multiple policies can be specified for a key by providing a collection as the value.
///
/// The .
- public static RoutePattern Parse(string pattern, object defaults, object parameterPolicies)
+ public static RoutePattern Parse(string pattern, object? defaults, object? parameterPolicies)
{
if (pattern == null)
{
@@ -86,7 +86,7 @@ public static RoutePattern Parse(string pattern, object defaults, object paramet
/// Route values that can be substituted for parameters in the route pattern. See remarks on .
///
/// The .
- public static RoutePattern Parse(string pattern, object defaults, object parameterPolicies, object requiredValues)
+ public static RoutePattern Parse(string pattern, object? defaults, object? parameterPolicies, object? requiredValues)
{
if (pattern == null)
{
@@ -118,7 +118,7 @@ public static RoutePattern Pattern(IEnumerable segments
/// The raw text to associate with the route pattern. May be null.
/// The collection of segments.
/// The .
- public static RoutePattern Pattern(string rawText, IEnumerable segments)
+ public static RoutePattern Pattern(string? rawText, IEnumerable segments)
{
if (segments == null)
{
@@ -146,8 +146,8 @@ public static RoutePattern Pattern(string rawText, IEnumerableThe collection of segments.
/// The .
public static RoutePattern Pattern(
- object defaults,
- object parameterPolicies,
+ object? defaults,
+ object? parameterPolicies,
IEnumerable segments)
{
if (segments == null)
@@ -177,9 +177,9 @@ public static RoutePattern Pattern(
/// The collection of segments.
/// The .
public static RoutePattern Pattern(
- string rawText,
- object defaults,
- object parameterPolicies,
+ string? rawText,
+ object? defaults,
+ object? parameterPolicies,
IEnumerable segments)
{
if (segments == null)
@@ -239,8 +239,8 @@ public static RoutePattern Pattern(string rawText, params RoutePatternPathSegmen
/// The collection of segments.
/// The .
public static RoutePattern Pattern(
- object defaults,
- object parameterPolicies,
+ object? defaults,
+ object? parameterPolicies,
params RoutePatternPathSegment[] segments)
{
if (segments == null)
@@ -270,9 +270,9 @@ public static RoutePattern Pattern(
/// The collection of segments.
/// The .
public static RoutePattern Pattern(
- string rawText,
- object defaults,
- object parameterPolicies,
+ string? rawText,
+ object? defaults,
+ object? parameterPolicies,
params RoutePatternPathSegment[] segments)
{
if (segments == null)
@@ -284,10 +284,10 @@ public static RoutePattern Pattern(
}
private static RoutePattern PatternCore(
- string rawText,
- RouteValueDictionary defaults,
- RouteValueDictionary parameterPolicies,
- RouteValueDictionary requiredValues,
+ string? rawText,
+ RouteValueDictionary? defaults,
+ RouteValueDictionary? parameterPolicies,
+ RouteValueDictionary? requiredValues,
IEnumerable segments)
{
// We want to merge the segment data with the 'out of line' defaults and parameter policies.
@@ -301,10 +301,10 @@ private static RoutePattern PatternCore(
// It's important that these two views of the data are consistent. We don't want
// values specified out of line to have a different behavior.
- Dictionary updatedDefaults = null;
+ Dictionary? updatedDefaults = null;
if (defaults != null && defaults.Count > 0)
{
- updatedDefaults = new Dictionary(defaults.Count, StringComparer.OrdinalIgnoreCase);
+ updatedDefaults = new Dictionary(defaults.Count, StringComparer.OrdinalIgnoreCase);
foreach (var kvp in defaults)
{
@@ -312,7 +312,7 @@ private static RoutePattern PatternCore(
}
}
- Dictionary> updatedParameterPolicies = null;
+ Dictionary>? updatedParameterPolicies = null;
if (parameterPolicies != null && parameterPolicies.Count > 0)
{
updatedParameterPolicies = new Dictionary>(parameterPolicies.Count, StringComparer.OrdinalIgnoreCase);
@@ -349,7 +349,7 @@ private static RoutePattern PatternCore(
}
}
- List parameters = null;
+ List? parameters = null;
var updatedSegments = segments.ToArray();
for (var i = 0; i < updatedSegments.Length; i++)
{
@@ -420,12 +420,12 @@ private static RoutePattern PatternCore(
? updatedParameterPolicies.ToDictionary(kvp => kvp.Key, kvp => (IReadOnlyList)kvp.Value.ToArray())
: EmptyPoliciesDictionary,
requiredValues ?? EmptyDictionary,
- (IReadOnlyList)parameters ?? Array.Empty(),
+ (IReadOnlyList?)parameters ?? Array.Empty(),
updatedSegments);
RoutePatternPathSegment VisitSegment(RoutePatternPathSegment segment)
{
- RoutePatternPart[] updatedParts = null;
+ RoutePatternPart[]? updatedParts = null;
for (var i = 0; i < segment.Parts.Count; i++)
{
var part = segment.Parts[i];
@@ -482,13 +482,13 @@ RoutePatternPart VisitPart(RoutePatternPart part)
{
if (updatedDefaults == null)
{
- updatedDefaults = new Dictionary(StringComparer.OrdinalIgnoreCase);
+ updatedDefaults = new Dictionary(StringComparer.OrdinalIgnoreCase);
}
updatedDefaults[parameter.Name] = parameter.Default;
}
- List parameterConstraints = null;
+ List? parameterConstraints = null;
if ((updatedParameterPolicies == null || !updatedParameterPolicies.TryGetValue(parameter.Name, out parameterConstraints)) &&
parameter.ParameterPolicies.Count > 0)
{
@@ -503,7 +503,7 @@ RoutePatternPart VisitPart(RoutePatternPart part)
if (parameter.ParameterPolicies.Count > 0)
{
- parameterConstraints.AddRange(parameter.ParameterPolicies);
+ parameterConstraints!.AddRange(parameter.ParameterPolicies);
}
if (Equals(parameter.Default, @default)
@@ -667,7 +667,7 @@ public static RoutePatternParameterPart ParameterPart(string parameterName, obje
/// The .
public static RoutePatternParameterPart ParameterPart(
string parameterName,
- object @default,
+ object? @default,
RoutePatternParameterKind parameterKind)
{
if (string.IsNullOrEmpty(parameterName))
@@ -703,7 +703,7 @@ public static RoutePatternParameterPart ParameterPart(
/// The .
public static RoutePatternParameterPart ParameterPart(
string parameterName,
- object @default,
+ object? @default,
RoutePatternParameterKind parameterKind,
IEnumerable parameterPolicies)
{
@@ -745,7 +745,7 @@ public static RoutePatternParameterPart ParameterPart(
/// The .
public static RoutePatternParameterPart ParameterPart(
string parameterName,
- object @default,
+ object? @default,
RoutePatternParameterKind parameterKind,
params RoutePatternParameterPolicyReference[] parameterPolicies)
{
@@ -778,7 +778,7 @@ public static RoutePatternParameterPart ParameterPart(
private static RoutePatternParameterPart ParameterPartCore(
string parameterName,
- object @default,
+ object? @default,
RoutePatternParameterKind parameterKind,
RoutePatternParameterPolicyReference[] parameterPolicies)
{
@@ -787,7 +787,7 @@ private static RoutePatternParameterPart ParameterPartCore(
private static RoutePatternParameterPart ParameterPartCore(
string parameterName,
- object @default,
+ object? @default,
RoutePatternParameterKind parameterKind,
RoutePatternParameterPolicyReference[] parameterPolicies,
bool encodeSlashes)
@@ -906,7 +906,7 @@ private static RoutePatternParameterPolicyReference ParameterPolicyCore(IParamet
return new RoutePatternParameterPolicyReference(parameterPolicy);
}
- private static RouteValueDictionary Wrap(object values)
+ private static RouteValueDictionary? Wrap(object? values)
{
return values == null ? null : new RouteValueDictionary(values);
}
diff --git a/src/Http/Routing/src/Patterns/RoutePatternMatcher.cs b/src/Http/Routing/src/Patterns/RoutePatternMatcher.cs
index 15bc489a64fd..f82d860e8373 100644
--- a/src/Http/Routing/src/Patterns/RoutePatternMatcher.cs
+++ b/src/Http/Routing/src/Patterns/RoutePatternMatcher.cs
@@ -1,6 +1,8 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+#nullable disable
+
using System;
using System.Diagnostics;
using Microsoft.AspNetCore.Http;
diff --git a/src/Http/Routing/src/Patterns/RoutePatternParameterPart.cs b/src/Http/Routing/src/Patterns/RoutePatternParameterPart.cs
index 2b5f40826883..30cb7db2da72 100644
--- a/src/Http/Routing/src/Patterns/RoutePatternParameterPart.cs
+++ b/src/Http/Routing/src/Patterns/RoutePatternParameterPart.cs
@@ -1,4 +1,4 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Generic;
@@ -16,7 +16,7 @@ public sealed class RoutePatternParameterPart : RoutePatternPart
{
internal RoutePatternParameterPart(
string parameterName,
- object @default,
+ object? @default,
RoutePatternParameterKind parameterKind,
RoutePatternParameterPolicyReference[] parameterPolicies)
: this(parameterName, @default, parameterKind, parameterPolicies, encodeSlashes: true)
@@ -25,7 +25,7 @@ internal RoutePatternParameterPart(
internal RoutePatternParameterPart(
string parameterName,
- object @default,
+ object? @default,
RoutePatternParameterKind parameterKind,
RoutePatternParameterPolicyReference[] parameterPolicies,
bool encodeSlashes)
@@ -53,7 +53,7 @@ internal RoutePatternParameterPart(
///
/// Gets the default value of this route parameter. May be null.
///
- public object Default { get; }
+ public object? Default { get; }
///
/// Returns true if this part is a catch-all parameter.
diff --git a/src/Http/Routing/src/Patterns/RoutePatternParameterPolicyReference.cs b/src/Http/Routing/src/Patterns/RoutePatternParameterPolicyReference.cs
index 65f58087c141..3fb95983f428 100644
--- a/src/Http/Routing/src/Patterns/RoutePatternParameterPolicyReference.cs
+++ b/src/Http/Routing/src/Patterns/RoutePatternParameterPolicyReference.cs
@@ -1,4 +1,4 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Diagnostics;
@@ -26,16 +26,16 @@ internal RoutePatternParameterPolicyReference(IParameterPolicy parameterPolicy)
///
/// Gets the constraint text.
///
- public string Content { get; }
+ public string? Content { get; }
///
/// Gets a pre-existing that was used to construct this reference.
///
- public IParameterPolicy ParameterPolicy { get; }
+ public IParameterPolicy? ParameterPolicy { get; }
- private string DebuggerToString()
+ private string? DebuggerToString()
{
return Content;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Http/Routing/src/Patterns/RoutePatternParser.cs b/src/Http/Routing/src/Patterns/RoutePatternParser.cs
index 990d1854fc5b..8b8f181f52c1 100644
--- a/src/Http/Routing/src/Patterns/RoutePatternParser.cs
+++ b/src/Http/Routing/src/Patterns/RoutePatternParser.cs
@@ -1,6 +1,8 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+#nullable disable
+
using System;
using System.Collections.Generic;
using System.Diagnostics;
diff --git a/src/Http/Routing/src/Patterns/RoutePatternTransformer.cs b/src/Http/Routing/src/Patterns/RoutePatternTransformer.cs
index bea4c610fc0e..b16ab4cb0e3c 100644
--- a/src/Http/Routing/src/Patterns/RoutePatternTransformer.cs
+++ b/src/Http/Routing/src/Patterns/RoutePatternTransformer.cs
@@ -1,4 +1,4 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
namespace Microsoft.AspNetCore.Routing.Patterns
@@ -30,6 +30,6 @@ public abstract class RoutePatternTransformer
/// return null if any required value cannot be substituted.
///
///
- public abstract RoutePattern SubstituteRequiredValues(RoutePattern original, object requiredValues);
+ public abstract RoutePattern? SubstituteRequiredValues(RoutePattern original, object requiredValues);
}
}
diff --git a/src/Http/Routing/src/RequestDelegateRouteBuilderExtensions.cs b/src/Http/Routing/src/RequestDelegateRouteBuilderExtensions.cs
index f376683c4d92..8a9e228e46c3 100644
--- a/src/Http/Routing/src/RequestDelegateRouteBuilderExtensions.cs
+++ b/src/Http/Routing/src/RequestDelegateRouteBuilderExtensions.cs
@@ -259,7 +259,7 @@ public static IRouteBuilder MapVerb(
new RouteHandler(handler),
template,
defaults: null,
- constraints: new RouteValueDictionary(new { httpMethod = new HttpMethodRouteConstraint(verb) }),
+ constraints: new RouteValueDictionary(new { httpMethod = new HttpMethodRouteConstraint(verb) })!,
dataTokens: null,
inlineConstraintResolver: GetConstraintResolver(builder));
diff --git a/src/Http/Routing/src/Route.cs b/src/Http/Routing/src/Route.cs
index 0a6afd3b2603..555c328127cc 100644
--- a/src/Http/Routing/src/Route.cs
+++ b/src/Http/Routing/src/Route.cs
@@ -1,8 +1,6 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-#nullable enable
-
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
@@ -62,7 +60,7 @@ public Route(
_target = target;
}
- public string RouteTemplate => ParsedTemplate.TemplateText;
+ public string? RouteTemplate => ParsedTemplate.TemplateText;
protected override Task OnRouteMatched(RouteContext context)
{
diff --git a/src/Http/Routing/src/RouteBase.cs b/src/Http/Routing/src/RouteBase.cs
index 2ba62fbcab11..5c9db8f026e5 100644
--- a/src/Http/Routing/src/RouteBase.cs
+++ b/src/Http/Routing/src/RouteBase.cs
@@ -1,8 +1,6 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-#nullable enable
-
using System;
using System.Collections.Generic;
using System.Diagnostics;
@@ -110,7 +108,7 @@ public virtual Task RouteAsync(RouteContext context)
{
return Task.CompletedTask;
}
- _logger.RequestMatchedRoute(Name!, ParsedTemplate.TemplateText);
+ _logger.RequestMatchedRoute(Name!, ParsedTemplate.TemplateText!);
return OnRouteMatched(context);
}
@@ -175,7 +173,7 @@ protected static IDictionary GetConstraints(
RouteTemplate parsedTemplate,
IDictionary? constraints)
{
- var constraintBuilder = new RouteConstraintBuilder(inlineConstraintResolver, parsedTemplate.TemplateText);
+ var constraintBuilder = new RouteConstraintBuilder(inlineConstraintResolver, parsedTemplate.TemplateText!);
if (constraints != null)
{
@@ -189,12 +187,12 @@ protected static IDictionary GetConstraints(
{
if (parameter.IsOptional)
{
- constraintBuilder.SetOptional(parameter.Name);
+ constraintBuilder.SetOptional(parameter.Name!);
}
foreach (var inlineConstraint in parameter.InlineConstraints)
{
- constraintBuilder.AddResolvedConstraint(parameter.Name, inlineConstraint.Constraint);
+ constraintBuilder.AddResolvedConstraint(parameter.Name!, inlineConstraint.Constraint);
}
}
@@ -219,7 +217,7 @@ protected static RouteValueDictionary GetDefaults(
parameter.Name));
}
#else
- if (result.ContainsKey(parameter.Name))
+ if (result.ContainsKey(parameter.Name!))
{
throw new InvalidOperationException(
Resources.FormatTemplateRoute_CannotHaveDefaultValueSpecifiedInlineAndExplicitly(
@@ -227,7 +225,7 @@ protected static RouteValueDictionary GetDefaults(
}
else
{
- result.Add(parameter.Name, parameter.DefaultValue);
+ result.Add(parameter.Name!, parameter.DefaultValue);
}
#endif
}
@@ -300,7 +298,7 @@ private void EnsureMatcher()
public override string ToString()
{
- return ParsedTemplate.TemplateText;
+ return ParsedTemplate.TemplateText!;
}
}
}
diff --git a/src/Http/Routing/src/RouteConstraintMatcher.cs b/src/Http/Routing/src/RouteConstraintMatcher.cs
index 26728e817a5c..268e4110cc3a 100644
--- a/src/Http/Routing/src/RouteConstraintMatcher.cs
+++ b/src/Http/Routing/src/RouteConstraintMatcher.cs
@@ -53,7 +53,7 @@ public static bool Match(
{
routeValues.TryGetValue(kvp.Key, out var routeValue);
- logger.ConstraintNotMatched(routeValue, kvp.Key, kvp.Value);
+ logger.ConstraintNotMatched(routeValue!, kvp.Key, kvp.Value);
}
return false;
diff --git a/src/Http/Routing/src/RouteEndpoint.cs b/src/Http/Routing/src/RouteEndpoint.cs
index a6750a2ef6c5..db4f9d4d2b37 100644
--- a/src/Http/Routing/src/RouteEndpoint.cs
+++ b/src/Http/Routing/src/RouteEndpoint.cs
@@ -1,4 +1,4 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
@@ -28,8 +28,8 @@ public RouteEndpoint(
RequestDelegate requestDelegate,
RoutePattern routePattern,
int order,
- EndpointMetadataCollection metadata,
- string displayName)
+ EndpointMetadataCollection? metadata,
+ string? displayName)
: base(requestDelegate, metadata, displayName)
{
if (requestDelegate == null)
diff --git a/src/Http/Routing/src/RouteEndpointModel.cs b/src/Http/Routing/src/RouteEndpointBuilder.cs
similarity index 82%
rename from src/Http/Routing/src/RouteEndpointModel.cs
rename to src/Http/Routing/src/RouteEndpointBuilder.cs
index f06ccba0bfbe..4397c51cfc97 100644
--- a/src/Http/Routing/src/RouteEndpointModel.cs
+++ b/src/Http/Routing/src/RouteEndpointBuilder.cs
@@ -1,6 +1,7 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing.Patterns;
@@ -25,6 +26,11 @@ public RouteEndpointBuilder(
public override Endpoint Build()
{
+ if (RequestDelegate is null)
+ {
+ throw new InvalidOperationException($"{nameof(RequestDelegate)} must be specified to construct a {nameof(RouteEndpoint)}.");
+ }
+
var routeEndpoint = new RouteEndpoint(
RequestDelegate,
RoutePattern,
diff --git a/src/Http/Routing/src/RouteOptions.cs b/src/Http/Routing/src/RouteOptions.cs
index dcff5482e706..796554dd5800 100644
--- a/src/Http/Routing/src/RouteOptions.cs
+++ b/src/Http/Routing/src/RouteOptions.cs
@@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Routing
public class RouteOptions
{
private IDictionary _constraintTypeMap = GetDefaultConstraintMap();
- private ICollection _endpointDataSources;
+ private ICollection _endpointDataSources = default!;
///
/// Gets a collection of instances configured with routing.
diff --git a/src/Http/Routing/src/RouteValueEqualityComparer.cs b/src/Http/Routing/src/RouteValueEqualityComparer.cs
index f7cf0570c978..18ffc3070b7d 100644
--- a/src/Http/Routing/src/RouteValueEqualityComparer.cs
+++ b/src/Http/Routing/src/RouteValueEqualityComparer.cs
@@ -18,12 +18,12 @@ namespace Microsoft.AspNetCore.Routing
///
/// strings are compared using .
///
- public class RouteValueEqualityComparer : IEqualityComparer