Skip to content

Commit 498cd15

Browse files
authored
Add WithOrder to IEndpointConventionBuilder (#49093)
1 parent 53259bd commit 498cd15

File tree

3 files changed

+38
-0
lines changed

3 files changed

+38
-0
lines changed

src/Http/Routing/src/Builder/RoutingEndpointConventionBuilderExtensions.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,29 @@ public static TBuilder WithGroupName<TBuilder>(this TBuilder builder, string end
126126
return builder;
127127
}
128128

129+
/// <summary>
130+
/// Sets the <see cref="RouteEndpointBuilder.Order"/> to the provided <paramref name="order"/> for all
131+
/// builders created by <paramref name="builder"/>.
132+
/// </summary>
133+
/// <param name="builder">The <see cref="IEndpointConventionBuilder"/>.</param>
134+
/// <param name="order">The order assigned to the endpoint.</param>
135+
/// <returns>The <see cref="IEndpointConventionBuilder"/>.</returns>
136+
public static TBuilder WithOrder<TBuilder>(this TBuilder builder, int order) where TBuilder : IEndpointConventionBuilder
137+
{
138+
builder.Add(builder =>
139+
{
140+
if (builder is RouteEndpointBuilder routeEndpointBuilder)
141+
{
142+
routeEndpointBuilder.Order = order;
143+
}
144+
else
145+
{
146+
throw new InvalidOperationException("This endpoint does not support Order.");
147+
}
148+
});
149+
return builder;
150+
}
151+
129152
/// <summary>
130153
/// Disables anti-forgery token validation for all endpoints produced on
131154
/// the target <see cref="IEndpointConventionBuilder"/>.

src/Http/Routing/src/PublicAPI.Unshipped.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ override Microsoft.AspNetCore.Routing.HttpMethodMetadata.ToString() -> string!
88
override Microsoft.AspNetCore.Routing.RouteNameMetadata.ToString() -> string!
99
override Microsoft.AspNetCore.Routing.SuppressLinkGenerationMetadata.ToString() -> string!
1010
override Microsoft.AspNetCore.Routing.SuppressMatchingMetadata.ToString() -> string!
11+
static Microsoft.AspNetCore.Builder.RoutingEndpointConventionBuilderExtensions.WithOrder<TBuilder>(this TBuilder builder, int order) -> TBuilder
1112
Microsoft.AspNetCore.Builder.RouteShortCircuitEndpointConventionBuilderExtensions
1213
Microsoft.AspNetCore.Routing.RouteShortCircuitEndpointRouteBuilderExtensions
1314
static Microsoft.AspNetCore.Builder.RouteShortCircuitEndpointConventionBuilderExtensions.ShortCircuit(this Microsoft.AspNetCore.Builder.IEndpointConventionBuilder! builder, int? statusCode = null) -> Microsoft.AspNetCore.Builder.IEndpointConventionBuilder!

src/Http/Routing/test/UnitTests/Builder/RoutingEndpointConventionBuilderExtensionsTest.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,20 @@ public void FinallyConventions_CanExamineMetadataInFIFOOrder()
223223
Assert.Equal(new[] { "test-metadata", "inner-metadata", "inner-metadata-2" }, metadata);
224224
}
225225

226+
[Fact]
227+
public void WithOrder_Func_SetsOrder()
228+
{
229+
// Arrange
230+
var builder = CreateBuilder();
231+
232+
// Act
233+
builder.WithOrder(47);
234+
235+
// Assert
236+
var endpoint = builder.Build() as RouteEndpoint;
237+
Assert.Equal(47, endpoint.Order);
238+
}
239+
226240
private TestEndpointConventionBuilder CreateBuilder()
227241
{
228242
var conventionBuilder = new DefaultEndpointConventionBuilder(new RouteEndpointBuilder(

0 commit comments

Comments
 (0)