Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions eng/SourceBuildPrebuiltBaseline.xml
Original file line number Diff line number Diff line change
Expand Up @@ -41,5 +41,9 @@
<!-- Transivite dependency of Microsoft.CodeAnalysis.ExternalAccess.AspNetCore -> Microsoft.CodeAnalysis.Features.
In product build the dependency is bumped to latest, which also bumps the version of DiaSymReader -->
<UsagePattern IdentityGlob="Microsoft.DiaSymReader/*2.0.0*" />

<!-- Transitive dependency of Roslyn dependencies. -->
<UsagePattern IdentityGlob="System.Text.Json/8.0.0*" />
<UsagePattern IdentityGlob="System.Text.Encodings.Web/8.0.0*" />
</IgnorePatterns>
</UsageData>
20 changes: 10 additions & 10 deletions eng/Version.Details.xml
Original file line number Diff line number Diff line change
Expand Up @@ -341,26 +341,26 @@
<SourceBuild RepoName="source-build-reference-packages" ManagedOnly="true" />
</Dependency>
<!-- Not updated automatically -->
<Dependency Name="Microsoft.CodeAnalysis.Common" Version="4.8.0-3.23518.7">
<Dependency Name="Microsoft.CodeAnalysis.Common" Version="4.11.0-1.24218.5">
<Uri>https://github.com/dotnet/roslyn</Uri>
<Sha>1aa759af23d2a29043ea44fcef5bd6823dafa5d0</Sha>
<Sha>afa1eb6821f62183651ab017b2f5c3fbeb934904</Sha>
</Dependency>
<Dependency Name="Microsoft.CodeAnalysis.ExternalAccess.AspNetCore" Version="4.8.0-3.23518.7">
<Dependency Name="Microsoft.CodeAnalysis.ExternalAccess.AspNetCore" Version="4.11.0-1.24218.5">
<Uri>https://github.com/dotnet/roslyn</Uri>
<Sha>1aa759af23d2a29043ea44fcef5bd6823dafa5d0</Sha>
<Sha>afa1eb6821f62183651ab017b2f5c3fbeb934904</Sha>
</Dependency>
<Dependency Name="Microsoft.CodeAnalysis.CSharp" Version="4.8.0-3.23518.7">
<Dependency Name="Microsoft.CodeAnalysis.CSharp" Version="4.11.0-1.24218.5">
<Uri>https://github.com/dotnet/roslyn</Uri>
<Sha>1aa759af23d2a29043ea44fcef5bd6823dafa5d0</Sha>
<Sha>afa1eb6821f62183651ab017b2f5c3fbeb934904</Sha>
</Dependency>
<Dependency Name="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="4.8.0-3.23518.7">
<Dependency Name="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="4.11.0-1.24218.5">
<Uri>https://github.com/dotnet/roslyn</Uri>
<Sha>1aa759af23d2a29043ea44fcef5bd6823dafa5d0</Sha>
<Sha>afa1eb6821f62183651ab017b2f5c3fbeb934904</Sha>
</Dependency>
<!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.roslyn" Version="4.8.0-3.23518.7">
<Dependency Name="Microsoft.SourceBuild.Intermediate.roslyn" Version="4.11.0-1.24218.5">
<Uri>https://github.com/dotnet/roslyn</Uri>
<Sha>1aa759af23d2a29043ea44fcef5bd6823dafa5d0</Sha>
<Sha>afa1eb6821f62183651ab017b2f5c3fbeb934904</Sha>
<SourceBuild RepoName="roslyn" ManagedOnly="true" />
</Dependency>
<Dependency Name="System.Composition" Version="9.0.0-preview.4.24217.19">
Expand Down
20 changes: 10 additions & 10 deletions eng/Versions.props
Original file line number Diff line number Diff line change
Expand Up @@ -148,11 +148,11 @@
<MicrosoftEntityFrameworkCoreVersion>9.0.0-preview.4.24217.1</MicrosoftEntityFrameworkCoreVersion>
<MicrosoftEntityFrameworkCoreDesignVersion>9.0.0-preview.4.24217.1</MicrosoftEntityFrameworkCoreDesignVersion>
<!-- Packages from dotnet/roslyn -->
<MicrosoftCodeAnalysisCommonVersion>4.8.0-3.23518.7</MicrosoftCodeAnalysisCommonVersion>
<MicrosoftCodeAnalysisExternalAccessAspNetCoreVersion>4.8.0-3.23518.7</MicrosoftCodeAnalysisExternalAccessAspNetCoreVersion>
<MicrosoftCodeAnalysisCSharpVersion>4.8.0-3.23518.7</MicrosoftCodeAnalysisCSharpVersion>
<MicrosoftCodeAnalysisCSharpWorkspacesVersion>4.8.0-3.23518.7</MicrosoftCodeAnalysisCSharpWorkspacesVersion>
<MicrosoftSourceBuildIntermediateroslynVersion>4.8.0-3.23518.7</MicrosoftSourceBuildIntermediateroslynVersion>
<MicrosoftCodeAnalysisCommonVersion>4.11.0-1.24218.5</MicrosoftCodeAnalysisCommonVersion>
<MicrosoftCodeAnalysisExternalAccessAspNetCoreVersion>4.11.0-1.24218.5</MicrosoftCodeAnalysisExternalAccessAspNetCoreVersion>
<MicrosoftCodeAnalysisCSharpVersion>4.11.0-1.24218.5</MicrosoftCodeAnalysisCSharpVersion>
<MicrosoftCodeAnalysisCSharpWorkspacesVersion>4.11.0-1.24218.5</MicrosoftCodeAnalysisCSharpWorkspacesVersion>
<MicrosoftSourceBuildIntermediateroslynVersion>4.11.0-1.24218.5</MicrosoftSourceBuildIntermediateroslynVersion>
<!-- Packages from NuGet/Nuget.client -->
<!-- If you update these versions, make sure to also update https://github.com/dotnet/aspnetcore/blob/main/eng/SourceBuildPrebuiltBaseline.xml -->
<NuGetPackagingVersion>6.2.4</NuGetPackagingVersion>
Expand Down Expand Up @@ -248,11 +248,11 @@
<Analyzer_MicrosoftCodeAnalysisCSharpWorkspacesVersion>3.3.1</Analyzer_MicrosoftCodeAnalysisCSharpWorkspacesVersion>
<!-- Pin the version of the M.CA dependencies that we utilize with a cutom version property $(MicrosoftCodeAnalysisVersion_LatestVS) to avoid automatically
consuming the newest version of the packages when using the $(MicrosoftCodeAnalysisCSharpVersion) properties in source-build. -->
<MicrosoftCodeAnalysisVersion_LatestVS>4.8.0-3.23518.7</MicrosoftCodeAnalysisVersion_LatestVS>
<MicrosoftCodeAnalysisExternalAccessAspNetCoreVersion>4.8.0-3.23518.7</MicrosoftCodeAnalysisExternalAccessAspNetCoreVersion>
<MicrosoftCodeAnalysisCommonVersion>4.8.0-3.23518.7</MicrosoftCodeAnalysisCommonVersion>
<MicrosoftCodeAnalysisCSharpVersion>4.8.0-3.23518.7</MicrosoftCodeAnalysisCSharpVersion>
<MicrosoftCodeAnalysisCSharpWorkspacesVersion>4.8.0-3.23518.7</MicrosoftCodeAnalysisCSharpWorkspacesVersion>
<MicrosoftCodeAnalysisVersion_LatestVS>4.11.0-1.24218.5</MicrosoftCodeAnalysisVersion_LatestVS>
<MicrosoftCodeAnalysisExternalAccessAspNetCoreVersion>4.11.0-1.24218.5</MicrosoftCodeAnalysisExternalAccessAspNetCoreVersion>
<MicrosoftCodeAnalysisCommonVersion>4.11.0-1.24218.5</MicrosoftCodeAnalysisCommonVersion>
<MicrosoftCodeAnalysisCSharpVersion>4.11.0-1.24218.5</MicrosoftCodeAnalysisCSharpVersion>
<MicrosoftCodeAnalysisCSharpWorkspacesVersion>4.11.0-1.24218.5</MicrosoftCodeAnalysisCSharpWorkspacesVersion>
<MicrosoftCodeAnalysisPublicApiAnalyzersVersion>3.3.3</MicrosoftCodeAnalysisPublicApiAnalyzersVersion>
<MicrosoftCodeAnalysisCSharpAnalyzerTestingXUnitVersion>1.1.2-beta1.24121.1</MicrosoftCodeAnalysisCSharpAnalyzerTestingXUnitVersion>
<MicrosoftCodeAnalysisCSharpCodeFixTestingXUnitVersion>1.1.2-beta1.24121.1</MicrosoftCodeAnalysisCSharpCodeFixTestingXUnitVersion>
Expand Down
6 changes: 4 additions & 2 deletions src/Http/Http.Extensions/gen/RequestDelegateGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,15 +54,17 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
.WithTrackingName(GeneratorSteps.EndpointsWithoutDiagnosicsStep);

var interceptorDefinitions = endpoints
.GroupWith((endpoint) => endpoint.Location, EndpointDelegateComparer.Instance)
.GroupWith((endpoint) => endpoint.InterceptableLocation, EndpointDelegateComparer.Instance)
.Select((endpointWithLocations, _) =>
{
var endpoint = endpointWithLocations.Source;
using var stringWriter = new StringWriter(CultureInfo.InvariantCulture);
using var codeWriter = new CodeWriter(stringWriter, baseIndent: 2);
foreach (var location in endpointWithLocations.Elements)
{
codeWriter.WriteLine($$"""[InterceptsLocation(@"{{location.File}}", {{location.LineNumber}}, {{location.CharacterNumber}})]""");
#pragma warning disable RSEXPERIMENTAL002 // Experimental interceptable location API
codeWriter.WriteLine(location.GetInterceptsLocationAttributeSyntax());
#pragma warning restore RSEXPERIMENTAL002
}
codeWriter.WriteLine($"internal static RouteHandlerBuilder {endpoint.HttpMethod}{endpointWithLocations.Index}(");
codeWriter.Indent++;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -471,7 +471,7 @@ namespace System.Runtime.CompilerServices
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
file sealed class InterceptsLocationAttribute : Attribute
{
public InterceptsLocationAttribute(string filePath, int line, int column)
public InterceptsLocationAttribute(int version, string data)
{
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using Microsoft.AspNetCore.App.Analyzers.Infrastructure;
using Microsoft.AspNetCore.Http.RequestDelegateGenerator.StaticRouteHandlerModel.Emitters;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Operations;

Expand All @@ -19,6 +20,9 @@ public Endpoint(IInvocationOperation operation, WellKnownTypes wellKnownTypes, S
{
Operation = operation;
Location = GetLocation(operation);
#pragma warning disable RSEXPERIMENTAL002 // Experimental interceptable location API
InterceptableLocation = semanticModel.GetInterceptableLocation((InvocationExpressionSyntax)operation.Syntax)!;
#pragma warning restore RSEXPERIMENTAL002
HttpMethod = GetHttpMethod(operation);
EmitterContext = new EmitterContext();

Expand Down Expand Up @@ -98,10 +102,13 @@ parameter is not null &&
public List<Diagnostic> Diagnostics { get; } = new List<Diagnostic>();

public (string File, int LineNumber, int CharacterNumber) Location { get; }
#pragma warning disable RSEXPERIMENTAL002 // Experimental interceptable location API
public InterceptableLocation InterceptableLocation { get; }
#pragma warning restore RSEXPERIMENTAL002
public IInvocationOperation Operation { get; }

public override bool Equals(object o) =>
o is Endpoint other && Location == other.Location && SignatureEquals(this, other);
o is Endpoint other && InterceptableLocation == other.InterceptableLocation && SignatureEquals(this, other);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we implemented operator == on these. That might be a bug on our side. I'll have to follow up.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

An explicit == implementation would be nice. I assume this does implement equality checks correctly though given that it does the correct things in our cache invalidation tests for incremental generators.


public override int GetHashCode() =>
HashCode.Combine(Location, GetSignatureHashCode(this));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ namespace System.Runtime.CompilerServices
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
file sealed class InterceptsLocationAttribute : Attribute
{
public InterceptsLocationAttribute(string filePath, int line, int column)
public InterceptsLocationAttribute(int version, string data)
{
}
}
Expand Down Expand Up @@ -58,7 +58,7 @@ namespace Microsoft.AspNetCore.Http.Generated
private static readonly JsonOptions FallbackJsonOptions = new();
private static readonly string[] GetVerb = new[] { global::Microsoft.AspNetCore.Http.HttpMethods.Get };

[InterceptsLocation(@"TestMapActions.cs", 9, 13)]
%INTERCEPTSLOCATIONATTRIBUTE%
internal static RouteHandlerBuilder MapGet0(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ namespace System.Runtime.CompilerServices
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
file sealed class InterceptsLocationAttribute : Attribute
{
public InterceptsLocationAttribute(string filePath, int line, int column)
public InterceptsLocationAttribute(int version, string data)
{
}
}
Expand Down Expand Up @@ -58,8 +58,8 @@ namespace Microsoft.AspNetCore.Http.Generated
private static readonly JsonOptions FallbackJsonOptions = new();
private static readonly string[] GetVerb = new[] { global::Microsoft.AspNetCore.Http.HttpMethods.Get };

[InterceptsLocation(@"TestMapActions.cs", 26, 13)]
[InterceptsLocation(@"TestMapActions.cs", 27, 5)]
%INTERCEPTSLOCATIONATTRIBUTE%
%INTERCEPTSLOCATIONATTRIBUTE%
internal static RouteHandlerBuilder MapGet0(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
Expand Down Expand Up @@ -168,8 +168,8 @@ namespace Microsoft.AspNetCore.Http.Generated
castHandler.Method);
}

[InterceptsLocation(@"TestMapActions.cs", 29, 5)]
[InterceptsLocation(@"TestMapActions.cs", 30, 5)]
%INTERCEPTSLOCATIONATTRIBUTE%
%INTERCEPTSLOCATIONATTRIBUTE%
internal static RouteHandlerBuilder MapGet1(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ namespace System.Runtime.CompilerServices
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
file sealed class InterceptsLocationAttribute : Attribute
{
public InterceptsLocationAttribute(string filePath, int line, int column)
public InterceptsLocationAttribute(int version, string data)
{
}
}
Expand Down Expand Up @@ -58,7 +58,7 @@ namespace Microsoft.AspNetCore.Http.Generated
private static readonly JsonOptions FallbackJsonOptions = new();
private static readonly string[] GetVerb = new[] { global::Microsoft.AspNetCore.Http.HttpMethods.Get };

[InterceptsLocation(@"TestMapActions.cs", 26, 13)]
%INTERCEPTSLOCATIONATTRIBUTE%
internal static RouteHandlerBuilder MapGet0(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
Expand Down Expand Up @@ -169,7 +169,7 @@ namespace Microsoft.AspNetCore.Http.Generated
castHandler.Method);
}

[InterceptsLocation(@"TestMapActions.cs", 27, 5)]
%INTERCEPTSLOCATIONATTRIBUTE%
internal static RouteHandlerBuilder MapGet1(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
Expand Down Expand Up @@ -266,7 +266,7 @@ namespace Microsoft.AspNetCore.Http.Generated
castHandler.Method);
}

[InterceptsLocation(@"TestMapActions.cs", 28, 5)]
%INTERCEPTSLOCATIONATTRIBUTE%
internal static RouteHandlerBuilder MapGet2(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
Expand Down Expand Up @@ -365,7 +365,7 @@ namespace Microsoft.AspNetCore.Http.Generated
castHandler.Method);
}

[InterceptsLocation(@"TestMapActions.cs", 29, 5)]
%INTERCEPTSLOCATIONATTRIBUTE%
internal static RouteHandlerBuilder MapGet3(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
Expand Down Expand Up @@ -462,7 +462,7 @@ namespace Microsoft.AspNetCore.Http.Generated
castHandler.Method);
}

[InterceptsLocation(@"TestMapActions.cs", 30, 5)]
%INTERCEPTSLOCATIONATTRIBUTE%
internal static RouteHandlerBuilder MapGet4(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
Expand Down Expand Up @@ -573,7 +573,7 @@ namespace Microsoft.AspNetCore.Http.Generated
castHandler.Method);
}

[InterceptsLocation(@"TestMapActions.cs", 31, 5)]
%INTERCEPTSLOCATIONATTRIBUTE%
internal static RouteHandlerBuilder MapGet5(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
Expand Down Expand Up @@ -670,7 +670,7 @@ namespace Microsoft.AspNetCore.Http.Generated
castHandler.Method);
}

[InterceptsLocation(@"TestMapActions.cs", 32, 5)]
%INTERCEPTSLOCATIONATTRIBUTE%
internal static RouteHandlerBuilder MapGet6(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
Expand Down Expand Up @@ -769,7 +769,7 @@ namespace Microsoft.AspNetCore.Http.Generated
castHandler.Method);
}

[InterceptsLocation(@"TestMapActions.cs", 33, 5)]
%INTERCEPTSLOCATIONATTRIBUTE%
internal static RouteHandlerBuilder MapGet7(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
Expand Down Expand Up @@ -866,7 +866,7 @@ namespace Microsoft.AspNetCore.Http.Generated
castHandler.Method);
}

[InterceptsLocation(@"TestMapActions.cs", 34, 5)]
%INTERCEPTSLOCATIONATTRIBUTE%
internal static RouteHandlerBuilder MapGet8(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
Expand Down Expand Up @@ -976,7 +976,7 @@ namespace Microsoft.AspNetCore.Http.Generated
castHandler.Method);
}

[InterceptsLocation(@"TestMapActions.cs", 35, 5)]
%INTERCEPTSLOCATIONATTRIBUTE%
internal static RouteHandlerBuilder MapGet9(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
Expand Down Expand Up @@ -1072,7 +1072,7 @@ namespace Microsoft.AspNetCore.Http.Generated
castHandler.Method);
}

[InterceptsLocation(@"TestMapActions.cs", 36, 5)]
%INTERCEPTSLOCATIONATTRIBUTE%
internal static RouteHandlerBuilder MapGet10(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
Expand Down Expand Up @@ -1170,7 +1170,7 @@ namespace Microsoft.AspNetCore.Http.Generated
castHandler.Method);
}

[InterceptsLocation(@"TestMapActions.cs", 37, 5)]
%INTERCEPTSLOCATIONATTRIBUTE%
internal static RouteHandlerBuilder MapGet11(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
Expand Down Expand Up @@ -1266,7 +1266,7 @@ namespace Microsoft.AspNetCore.Http.Generated
castHandler.Method);
}

[InterceptsLocation(@"TestMapActions.cs", 38, 5)]
%INTERCEPTSLOCATIONATTRIBUTE%
internal static RouteHandlerBuilder MapGet12(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
Expand Down Expand Up @@ -1377,7 +1377,7 @@ namespace Microsoft.AspNetCore.Http.Generated
castHandler.Method);
}

[InterceptsLocation(@"TestMapActions.cs", 39, 5)]
%INTERCEPTSLOCATIONATTRIBUTE%
internal static RouteHandlerBuilder MapGet13(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
Expand Down Expand Up @@ -1474,7 +1474,7 @@ namespace Microsoft.AspNetCore.Http.Generated
castHandler.Method);
}

[InterceptsLocation(@"TestMapActions.cs", 40, 5)]
%INTERCEPTSLOCATIONATTRIBUTE%
internal static RouteHandlerBuilder MapGet14(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
Expand Down Expand Up @@ -1584,7 +1584,7 @@ namespace Microsoft.AspNetCore.Http.Generated
castHandler.Method);
}

[InterceptsLocation(@"TestMapActions.cs", 41, 5)]
%INTERCEPTSLOCATIONATTRIBUTE%
internal static RouteHandlerBuilder MapGet15(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
Expand Down Expand Up @@ -1680,7 +1680,7 @@ namespace Microsoft.AspNetCore.Http.Generated
castHandler.Method);
}

[InterceptsLocation(@"TestMapActions.cs", 42, 5)]
%INTERCEPTSLOCATIONATTRIBUTE%
internal static RouteHandlerBuilder MapGet16(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
Expand Down Expand Up @@ -1791,7 +1791,7 @@ namespace Microsoft.AspNetCore.Http.Generated
castHandler.Method);
}

[InterceptsLocation(@"TestMapActions.cs", 43, 5)]
%INTERCEPTSLOCATIONATTRIBUTE%
internal static RouteHandlerBuilder MapGet17(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
Expand Down Expand Up @@ -1888,7 +1888,7 @@ namespace Microsoft.AspNetCore.Http.Generated
castHandler.Method);
}

[InterceptsLocation(@"TestMapActions.cs", 44, 5)]
%INTERCEPTSLOCATIONATTRIBUTE%
internal static RouteHandlerBuilder MapGet18(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
Expand Down Expand Up @@ -1998,7 +1998,7 @@ namespace Microsoft.AspNetCore.Http.Generated
castHandler.Method);
}

[InterceptsLocation(@"TestMapActions.cs", 45, 5)]
%INTERCEPTSLOCATIONATTRIBUTE%
internal static RouteHandlerBuilder MapGet19(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
Expand Down
Loading