Simplify Map methods
This commit is contained in:
parent
4b4614635f
commit
0dc14a61ce
|
|
@ -5,20 +5,13 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
{
|
{
|
||||||
public static partial class EndpointRouteBuilderExtensions
|
public static partial class EndpointRouteBuilderExtensions
|
||||||
{
|
{
|
||||||
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder Map(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder routes, Microsoft.AspNetCore.Routing.Patterns.RoutePattern pattern, Microsoft.AspNetCore.Http.RequestDelegate requestDelegate, params object[] metadata) { throw null; }
|
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder Map(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder routes, Microsoft.AspNetCore.Routing.Patterns.RoutePattern pattern, Microsoft.AspNetCore.Http.RequestDelegate requestDelegate) { throw null; }
|
||||||
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder Map(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder routes, Microsoft.AspNetCore.Routing.Patterns.RoutePattern pattern, string displayName, Microsoft.AspNetCore.Http.RequestDelegate requestDelegate, params object[] metadata) { throw null; }
|
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder Map(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder routes, string pattern, Microsoft.AspNetCore.Http.RequestDelegate requestDelegate) { throw null; }
|
||||||
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder Map(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder routes, string pattern, Microsoft.AspNetCore.Http.RequestDelegate requestDelegate, params object[] metadata) { throw null; }
|
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder MapDelete(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder routes, string pattern, Microsoft.AspNetCore.Http.RequestDelegate requestDelegate) { throw null; }
|
||||||
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder Map(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder routes, string pattern, string displayName, Microsoft.AspNetCore.Http.RequestDelegate requestDelegate, params object[] metadata) { throw null; }
|
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder MapGet(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder routes, string pattern, Microsoft.AspNetCore.Http.RequestDelegate requestDelegate) { throw null; }
|
||||||
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder MapDelete(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder routes, string pattern, Microsoft.AspNetCore.Http.RequestDelegate requestDelegate, params object[] metadata) { throw null; }
|
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder MapMethods(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder routes, string pattern, System.Collections.Generic.IEnumerable<string> httpMethods, Microsoft.AspNetCore.Http.RequestDelegate requestDelegate) { throw null; }
|
||||||
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder MapDelete(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder routes, string pattern, string displayName, Microsoft.AspNetCore.Http.RequestDelegate requestDelegate, params object[] metadata) { throw null; }
|
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder MapPost(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder routes, string pattern, Microsoft.AspNetCore.Http.RequestDelegate requestDelegate) { throw null; }
|
||||||
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder MapGet(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder routes, string pattern, Microsoft.AspNetCore.Http.RequestDelegate requestDelegate, params object[] metadata) { throw null; }
|
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder MapPut(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder routes, string pattern, Microsoft.AspNetCore.Http.RequestDelegate requestDelegate) { throw null; }
|
||||||
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder MapGet(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder routes, string pattern, string displayName, Microsoft.AspNetCore.Http.RequestDelegate requestDelegate, params object[] metadata) { throw null; }
|
|
||||||
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder MapPost(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder routes, string pattern, Microsoft.AspNetCore.Http.RequestDelegate requestDelegate, params object[] metadata) { throw null; }
|
|
||||||
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder MapPost(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder routes, string pattern, string displayName, Microsoft.AspNetCore.Http.RequestDelegate requestDelegate, params object[] metadata) { throw null; }
|
|
||||||
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder MapPut(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder routes, string pattern, Microsoft.AspNetCore.Http.RequestDelegate requestDelegate, params object[] metadata) { throw null; }
|
|
||||||
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder MapPut(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder routes, string pattern, string displayName, Microsoft.AspNetCore.Http.RequestDelegate requestDelegate, params object[] metadata) { throw null; }
|
|
||||||
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder MapVerbs(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder routes, string pattern, Microsoft.AspNetCore.Http.RequestDelegate requestDelegate, System.Collections.Generic.IList<string> httpMethods, params object[] metadata) { throw null; }
|
|
||||||
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder MapVerbs(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder routes, string pattern, string displayName, Microsoft.AspNetCore.Http.RequestDelegate requestDelegate, System.Collections.Generic.IList<string> httpMethods, params object[] metadata) { throw null; }
|
|
||||||
}
|
}
|
||||||
public static partial class EndpointRoutingApplicationBuilderExtensions
|
public static partial class EndpointRoutingApplicationBuilderExtensions
|
||||||
{
|
{
|
||||||
|
|
@ -51,6 +44,9 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
public static partial class RoutingEndpointConventionBuilderExtensions
|
public static partial class RoutingEndpointConventionBuilderExtensions
|
||||||
{
|
{
|
||||||
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder RequireHost(this Microsoft.AspNetCore.Builder.IEndpointConventionBuilder builder, params string[] hosts) { throw null; }
|
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder RequireHost(this Microsoft.AspNetCore.Builder.IEndpointConventionBuilder builder, params string[] hosts) { throw null; }
|
||||||
|
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder WithDisplayName(this Microsoft.AspNetCore.Builder.IEndpointConventionBuilder builder, System.Func<Microsoft.AspNetCore.Builder.EndpointBuilder, string> func) { throw null; }
|
||||||
|
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder WithDisplayName(this Microsoft.AspNetCore.Builder.IEndpointConventionBuilder builder, string displayName) { throw null; }
|
||||||
|
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder WithMetadata(this Microsoft.AspNetCore.Builder.IEndpointConventionBuilder builder, params object[] items) { throw null; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
namespace Microsoft.AspNetCore.Routing
|
namespace Microsoft.AspNetCore.Routing
|
||||||
|
|
|
||||||
|
|
@ -29,35 +29,13 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
/// <param name="routes">The <see cref="IEndpointRouteBuilder"/> to add the route to.</param>
|
/// <param name="routes">The <see cref="IEndpointRouteBuilder"/> to add the route to.</param>
|
||||||
/// <param name="pattern">The route pattern.</param>
|
/// <param name="pattern">The route pattern.</param>
|
||||||
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
|
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
|
||||||
/// <param name="metadata">Metadata that is added to the endpoint.</param>
|
|
||||||
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
|
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
|
||||||
public static IEndpointConventionBuilder MapGet(
|
public static IEndpointConventionBuilder MapGet(
|
||||||
this IEndpointRouteBuilder routes,
|
this IEndpointRouteBuilder routes,
|
||||||
string pattern,
|
string pattern,
|
||||||
RequestDelegate requestDelegate,
|
RequestDelegate requestDelegate)
|
||||||
params object[] metadata)
|
|
||||||
{
|
{
|
||||||
return MapVerbs(routes, pattern, displayName: null, requestDelegate, GetVerb, metadata);
|
return MapMethods(routes, pattern, GetVerb, requestDelegate);
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Adds a <see cref="RouteEndpoint"/> to the <see cref="IEndpointRouteBuilder"/> that matches HTTP GET requests
|
|
||||||
/// for the specified pattern.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="routes">The <see cref="IEndpointRouteBuilder"/> to add the route to.</param>
|
|
||||||
/// <param name="pattern">The route pattern.</param>
|
|
||||||
/// <param name="displayName">The display name for the endpoint.</param>
|
|
||||||
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
|
|
||||||
/// <param name="metadata">Metadata that is added to the endpoint.</param>
|
|
||||||
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
|
|
||||||
public static IEndpointConventionBuilder MapGet(
|
|
||||||
this IEndpointRouteBuilder routes,
|
|
||||||
string pattern,
|
|
||||||
string displayName,
|
|
||||||
RequestDelegate requestDelegate,
|
|
||||||
params object[] metadata)
|
|
||||||
{
|
|
||||||
return MapVerbs(routes, pattern, displayName, requestDelegate, GetVerb, metadata);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -67,35 +45,13 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
/// <param name="routes">The <see cref="IEndpointRouteBuilder"/> to add the route to.</param>
|
/// <param name="routes">The <see cref="IEndpointRouteBuilder"/> to add the route to.</param>
|
||||||
/// <param name="pattern">The route pattern.</param>
|
/// <param name="pattern">The route pattern.</param>
|
||||||
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
|
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
|
||||||
/// <param name="metadata">Metadata that is added to the endpoint.</param>
|
|
||||||
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
|
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
|
||||||
public static IEndpointConventionBuilder MapPost(
|
public static IEndpointConventionBuilder MapPost(
|
||||||
this IEndpointRouteBuilder routes,
|
this IEndpointRouteBuilder routes,
|
||||||
string pattern,
|
string pattern,
|
||||||
RequestDelegate requestDelegate,
|
RequestDelegate requestDelegate)
|
||||||
params object[] metadata)
|
|
||||||
{
|
{
|
||||||
return MapVerbs(routes, pattern, displayName: null, requestDelegate, PostVerb, metadata);
|
return MapMethods(routes, pattern, PostVerb, requestDelegate);
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Adds a <see cref="RouteEndpoint"/> to the <see cref="IEndpointRouteBuilder"/> that matches HTTP POST requests
|
|
||||||
/// for the specified pattern.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="routes">The <see cref="IEndpointRouteBuilder"/> to add the route to.</param>
|
|
||||||
/// <param name="pattern">The route pattern.</param>
|
|
||||||
/// <param name="displayName">The display name for the endpoint.</param>
|
|
||||||
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
|
|
||||||
/// <param name="metadata">Metadata that is added to the endpoint.</param>
|
|
||||||
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
|
|
||||||
public static IEndpointConventionBuilder MapPost(
|
|
||||||
this IEndpointRouteBuilder routes,
|
|
||||||
string pattern,
|
|
||||||
string displayName,
|
|
||||||
RequestDelegate requestDelegate,
|
|
||||||
params object[] metadata)
|
|
||||||
{
|
|
||||||
return MapVerbs(routes, pattern, displayName, requestDelegate, PostVerb, metadata);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -105,35 +61,13 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
/// <param name="routes">The <see cref="IEndpointRouteBuilder"/> to add the route to.</param>
|
/// <param name="routes">The <see cref="IEndpointRouteBuilder"/> to add the route to.</param>
|
||||||
/// <param name="pattern">The route pattern.</param>
|
/// <param name="pattern">The route pattern.</param>
|
||||||
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
|
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
|
||||||
/// <param name="metadata">Metadata that is added to the endpoint.</param>
|
|
||||||
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
|
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
|
||||||
public static IEndpointConventionBuilder MapPut(
|
public static IEndpointConventionBuilder MapPut(
|
||||||
this IEndpointRouteBuilder routes,
|
this IEndpointRouteBuilder routes,
|
||||||
string pattern,
|
string pattern,
|
||||||
RequestDelegate requestDelegate,
|
RequestDelegate requestDelegate)
|
||||||
params object[] metadata)
|
|
||||||
{
|
{
|
||||||
return MapVerbs(routes, pattern, displayName: null, requestDelegate, PutVerb, metadata);
|
return MapMethods(routes, pattern, PutVerb, requestDelegate);
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Adds a <see cref="RouteEndpoint"/> to the <see cref="IEndpointRouteBuilder"/> that matches HTTP PUT requests
|
|
||||||
/// for the specified pattern.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="routes">The <see cref="IEndpointRouteBuilder"/> to add the route to.</param>
|
|
||||||
/// <param name="pattern">The route pattern.</param>
|
|
||||||
/// <param name="displayName">The display name for the endpoint.</param>
|
|
||||||
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
|
|
||||||
/// <param name="metadata">Metadata that is added to the endpoint.</param>
|
|
||||||
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
|
|
||||||
public static IEndpointConventionBuilder MapPut(
|
|
||||||
this IEndpointRouteBuilder routes,
|
|
||||||
string pattern,
|
|
||||||
string displayName,
|
|
||||||
RequestDelegate requestDelegate,
|
|
||||||
params object[] metadata)
|
|
||||||
{
|
|
||||||
return MapVerbs(routes, pattern, displayName, requestDelegate, PutVerb, metadata);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -143,35 +77,13 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
/// <param name="routes">The <see cref="IEndpointRouteBuilder"/> to add the route to.</param>
|
/// <param name="routes">The <see cref="IEndpointRouteBuilder"/> to add the route to.</param>
|
||||||
/// <param name="pattern">The route pattern.</param>
|
/// <param name="pattern">The route pattern.</param>
|
||||||
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
|
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
|
||||||
/// <param name="metadata">Metadata that is added to the endpoint.</param>
|
|
||||||
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
|
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
|
||||||
public static IEndpointConventionBuilder MapDelete(
|
public static IEndpointConventionBuilder MapDelete(
|
||||||
this IEndpointRouteBuilder routes,
|
this IEndpointRouteBuilder routes,
|
||||||
string pattern,
|
string pattern,
|
||||||
RequestDelegate requestDelegate,
|
RequestDelegate requestDelegate)
|
||||||
params object[] metadata)
|
|
||||||
{
|
{
|
||||||
return MapVerbs(routes, pattern, displayName: null, requestDelegate, DeleteVerb, metadata);
|
return MapMethods(routes, pattern, DeleteVerb, requestDelegate);
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Adds a <see cref="RouteEndpoint"/> to the <see cref="IEndpointRouteBuilder"/> that matches HTTP DELETE requests
|
|
||||||
/// for the specified pattern.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="routes">The <see cref="IEndpointRouteBuilder"/> to add the route to.</param>
|
|
||||||
/// <param name="pattern">The route pattern.</param>
|
|
||||||
/// <param name="displayName">The display name for the endpoint.</param>
|
|
||||||
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
|
|
||||||
/// <param name="metadata">Metadata that is added to the endpoint.</param>
|
|
||||||
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
|
|
||||||
public static IEndpointConventionBuilder MapDelete(
|
|
||||||
this IEndpointRouteBuilder routes,
|
|
||||||
string pattern,
|
|
||||||
string displayName,
|
|
||||||
RequestDelegate requestDelegate,
|
|
||||||
params object[] metadata)
|
|
||||||
{
|
|
||||||
return MapVerbs(routes, pattern, displayName, requestDelegate, DeleteVerb, metadata);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -182,50 +94,22 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
/// <param name="pattern">The route pattern.</param>
|
/// <param name="pattern">The route pattern.</param>
|
||||||
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
|
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
|
||||||
/// <param name="httpMethods">HTTP methods that the endpoint will match.</param>
|
/// <param name="httpMethods">HTTP methods that the endpoint will match.</param>
|
||||||
/// <param name="metadata">Metadata that is added to the endpoint.</param>
|
|
||||||
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
|
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
|
||||||
public static IEndpointConventionBuilder MapVerbs(
|
public static IEndpointConventionBuilder MapMethods(
|
||||||
this IEndpointRouteBuilder routes,
|
this IEndpointRouteBuilder routes,
|
||||||
string pattern,
|
string pattern,
|
||||||
RequestDelegate requestDelegate,
|
IEnumerable<string> httpMethods,
|
||||||
IList<string> httpMethods,
|
RequestDelegate requestDelegate)
|
||||||
params object[] metadata)
|
|
||||||
{
|
|
||||||
return MapVerbs(routes, pattern, displayName: null, requestDelegate, httpMethods, metadata);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Adds a <see cref="RouteEndpoint"/> to the <see cref="IEndpointRouteBuilder"/> that matches HTTP requests
|
|
||||||
/// for the specified HTTP methods and pattern.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="routes">The <see cref="IEndpointRouteBuilder"/> to add the route to.</param>
|
|
||||||
/// <param name="pattern">The route pattern.</param>
|
|
||||||
/// <param name="displayName">The display name for the endpoint.</param>
|
|
||||||
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
|
|
||||||
/// <param name="httpMethods">HTTP methods that the endpoint will match.</param>
|
|
||||||
/// <param name="metadata">Metadata that is added to the endpoint.</param>
|
|
||||||
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
|
|
||||||
public static IEndpointConventionBuilder MapVerbs(
|
|
||||||
this IEndpointRouteBuilder routes,
|
|
||||||
string pattern,
|
|
||||||
string displayName,
|
|
||||||
RequestDelegate requestDelegate,
|
|
||||||
IList<string> httpMethods,
|
|
||||||
params object[] metadata)
|
|
||||||
{
|
{
|
||||||
if (httpMethods == null)
|
if (httpMethods == null)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(httpMethods));
|
throw new ArgumentNullException(nameof(httpMethods));
|
||||||
}
|
}
|
||||||
|
|
||||||
var resolvedMetadata = new List<object>();
|
var builder = routes.Map(RoutePatternFactory.Parse(pattern), requestDelegate);
|
||||||
resolvedMetadata.Add(new HttpMethodMetadata(httpMethods));
|
builder.WithDisplayName($"{pattern} HTTP: {string.Join(", ", httpMethods)}");
|
||||||
if (metadata != null)
|
builder.WithMetadata(new HttpMethodMetadata(httpMethods));
|
||||||
{
|
return builder;
|
||||||
resolvedMetadata.AddRange(metadata);
|
|
||||||
}
|
|
||||||
|
|
||||||
return Map(routes, pattern, displayName ?? $"{pattern} HTTP: {string.Join(", ", httpMethods)}", requestDelegate, metadata: resolvedMetadata.ToArray());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -235,35 +119,13 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
/// <param name="routes">The <see cref="IEndpointRouteBuilder"/> to add the route to.</param>
|
/// <param name="routes">The <see cref="IEndpointRouteBuilder"/> to add the route to.</param>
|
||||||
/// <param name="pattern">The route pattern.</param>
|
/// <param name="pattern">The route pattern.</param>
|
||||||
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
|
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
|
||||||
/// <param name="metadata">Metadata that is added to the endpoint.</param>
|
|
||||||
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
|
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
|
||||||
public static IEndpointConventionBuilder Map(
|
public static IEndpointConventionBuilder Map(
|
||||||
this IEndpointRouteBuilder routes,
|
this IEndpointRouteBuilder routes,
|
||||||
string pattern,
|
string pattern,
|
||||||
RequestDelegate requestDelegate,
|
RequestDelegate requestDelegate)
|
||||||
params object[] metadata)
|
|
||||||
{
|
{
|
||||||
return Map(routes, RoutePatternFactory.Parse(pattern), pattern, requestDelegate, metadata);
|
return Map(routes, RoutePatternFactory.Parse(pattern), requestDelegate);
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Adds a <see cref="RouteEndpoint"/> to the <see cref="IEndpointRouteBuilder"/> that matches HTTP requests
|
|
||||||
/// for the specified pattern.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="routes">The <see cref="IEndpointRouteBuilder"/> to add the route to.</param>
|
|
||||||
/// <param name="pattern">The route pattern.</param>
|
|
||||||
/// <param name="displayName">The display name for the endpoint.</param>
|
|
||||||
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
|
|
||||||
/// <param name="metadata">Metadata that is added to the endpoint.</param>
|
|
||||||
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
|
|
||||||
public static IEndpointConventionBuilder Map(
|
|
||||||
this IEndpointRouteBuilder routes,
|
|
||||||
string pattern,
|
|
||||||
string displayName,
|
|
||||||
RequestDelegate requestDelegate,
|
|
||||||
params object[] metadata)
|
|
||||||
{
|
|
||||||
return Map(routes, RoutePatternFactory.Parse(pattern), displayName, requestDelegate, metadata);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -273,33 +135,11 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
/// <param name="routes">The <see cref="IEndpointRouteBuilder"/> to add the route to.</param>
|
/// <param name="routes">The <see cref="IEndpointRouteBuilder"/> to add the route to.</param>
|
||||||
/// <param name="pattern">The route pattern.</param>
|
/// <param name="pattern">The route pattern.</param>
|
||||||
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
|
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
|
||||||
/// <param name="metadata">Metadata that is added to the endpoint.</param>
|
|
||||||
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
|
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
|
||||||
public static IEndpointConventionBuilder Map(
|
public static IEndpointConventionBuilder Map(
|
||||||
this IEndpointRouteBuilder routes,
|
this IEndpointRouteBuilder routes,
|
||||||
RoutePattern pattern,
|
RoutePattern pattern,
|
||||||
RequestDelegate requestDelegate,
|
RequestDelegate requestDelegate)
|
||||||
params object[] metadata)
|
|
||||||
{
|
|
||||||
return Map(routes, pattern, pattern.RawText ?? pattern.DebuggerToString(), requestDelegate, metadata);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Adds a <see cref="RouteEndpoint"/> to the <see cref="IEndpointRouteBuilder"/> that matches HTTP requests
|
|
||||||
/// for the specified pattern.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="routes">The <see cref="IEndpointRouteBuilder"/> to add the route to.</param>
|
|
||||||
/// <param name="pattern">The route pattern.</param>
|
|
||||||
/// <param name="displayName">The display name for the endpoint.</param>
|
|
||||||
/// <param name="requestDelegate">The delegate executed when the endpoint is matched.</param>
|
|
||||||
/// <param name="metadata">Metadata that is added to the endpoint.</param>
|
|
||||||
/// <returns>A <see cref="IEndpointConventionBuilder"/> that can be used to further customize the endpoint.</returns>
|
|
||||||
public static IEndpointConventionBuilder Map(
|
|
||||||
this IEndpointRouteBuilder routes,
|
|
||||||
RoutePattern pattern,
|
|
||||||
string displayName,
|
|
||||||
RequestDelegate requestDelegate,
|
|
||||||
params object[] metadata)
|
|
||||||
{
|
{
|
||||||
if (routes == null)
|
if (routes == null)
|
||||||
{
|
{
|
||||||
|
|
@ -318,12 +158,12 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
|
|
||||||
const int defaultOrder = 0;
|
const int defaultOrder = 0;
|
||||||
|
|
||||||
var routeEndpointBuilder = new RouteEndpointBuilder(
|
var builder = new RouteEndpointBuilder(
|
||||||
requestDelegate,
|
requestDelegate,
|
||||||
pattern,
|
pattern,
|
||||||
defaultOrder)
|
defaultOrder)
|
||||||
{
|
{
|
||||||
DisplayName = displayName
|
DisplayName = pattern.RawText ?? pattern.DebuggerToString(),
|
||||||
};
|
};
|
||||||
|
|
||||||
// Add delegate attributes as metadata
|
// Add delegate attributes as metadata
|
||||||
|
|
@ -334,27 +174,18 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
{
|
{
|
||||||
foreach (var attribute in attributes)
|
foreach (var attribute in attributes)
|
||||||
{
|
{
|
||||||
routeEndpointBuilder.Metadata.Add(attribute);
|
builder.Metadata.Add(attribute);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (metadata != null)
|
var dataSource = routes.DataSources.OfType<ModelEndpointDataSource>().FirstOrDefault();
|
||||||
|
if (dataSource == null)
|
||||||
{
|
{
|
||||||
foreach (var item in metadata)
|
dataSource = new ModelEndpointDataSource();
|
||||||
{
|
routes.DataSources.Add(dataSource);
|
||||||
routeEndpointBuilder.Metadata.Add(item);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var modelEndpointDataSource = routes.DataSources.OfType<ModelEndpointDataSource>().FirstOrDefault();
|
return dataSource.AddEndpointBuilder(builder);
|
||||||
|
|
||||||
if (modelEndpointDataSource == null)
|
|
||||||
{
|
|
||||||
modelEndpointDataSource = new ModelEndpointDataSource();
|
|
||||||
routes.DataSources.Add(modelEndpointDataSource);
|
|
||||||
}
|
|
||||||
|
|
||||||
return modelEndpointDataSource.AddEndpointBuilder(routeEndpointBuilder);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,8 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
throw new ArgumentNullException(nameof(requestDelegate));
|
throw new ArgumentNullException(nameof(requestDelegate));
|
||||||
}
|
}
|
||||||
|
|
||||||
var conventionBuilder = routes.Map(pattern, "Fallback " + pattern, requestDelegate);
|
var conventionBuilder = routes.Map(pattern, requestDelegate);
|
||||||
|
conventionBuilder.WithDisplayName("Fallback " + pattern);
|
||||||
conventionBuilder.Add(b => ((RouteEndpointBuilder)b).Order = int.MaxValue);
|
conventionBuilder.Add(b => ((RouteEndpointBuilder)b).Order = int.MaxValue);
|
||||||
return conventionBuilder;
|
return conventionBuilder;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -39,5 +39,84 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
});
|
});
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets the <see cref="EndpointBuilder.DisplayName"/> to the provided <paramref name="displayName"/> for all
|
||||||
|
/// builders created by <paramref name="builder"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="builder">The <see cref="IEndpointConventionBuilder"/>.</param>
|
||||||
|
/// <param name="displayName">The display name.</param>
|
||||||
|
/// <returns>The <see cref="IEndpointConventionBuilder"/>.</returns>
|
||||||
|
public static IEndpointConventionBuilder WithDisplayName(this IEndpointConventionBuilder builder, string displayName)
|
||||||
|
{
|
||||||
|
if (builder == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(builder));
|
||||||
|
}
|
||||||
|
|
||||||
|
builder.Add(b =>
|
||||||
|
{
|
||||||
|
b.DisplayName = displayName;
|
||||||
|
});
|
||||||
|
|
||||||
|
return builder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets the <see cref="EndpointBuilder.DisplayName"/> using the provided <paramref name="func"/> for all
|
||||||
|
/// builders created by <paramref name="builder"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="builder">The <see cref="IEndpointConventionBuilder"/>.</param>
|
||||||
|
/// <param name="func">A delegate that produces the display name for each <see cref="EndpointBuilder"/>.</param>
|
||||||
|
/// <returns>The <see cref="IEndpointConventionBuilder"/>.</returns>
|
||||||
|
public static IEndpointConventionBuilder WithDisplayName(this IEndpointConventionBuilder builder, Func<EndpointBuilder, string> func)
|
||||||
|
{
|
||||||
|
if (builder == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(builder));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (func == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(func));
|
||||||
|
}
|
||||||
|
|
||||||
|
builder.Add(b =>
|
||||||
|
{
|
||||||
|
b.DisplayName = func(b);
|
||||||
|
});
|
||||||
|
|
||||||
|
return builder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Adds the provided metadata <paramref name="items"/> to <see cref="EndpointBuilder.Metadata"/> for all builders
|
||||||
|
/// produced by <paramref name="builder"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="builder">The <see cref="IEndpointConventionBuilder"/>.</param>
|
||||||
|
/// <param name="items">A collection of metadata items.</param>
|
||||||
|
/// <returns>The <see cref="IEndpointConventionBuilder"/>.</returns>
|
||||||
|
public static IEndpointConventionBuilder WithMetadata(this IEndpointConventionBuilder builder, params object[] items)
|
||||||
|
{
|
||||||
|
if (builder == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(builder));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (items == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(items));
|
||||||
|
}
|
||||||
|
|
||||||
|
builder.Add(b =>
|
||||||
|
{
|
||||||
|
foreach (var item in items)
|
||||||
|
{
|
||||||
|
b.Metadata.Add(item);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return builder;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
// 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 Microsoft.AspNetCore.Builder;
|
||||||
|
using Microsoft.AspNetCore.Http;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNetCore.Routing
|
||||||
|
{
|
||||||
|
internal class DefaultEndpointConventionBuilder : IEndpointConventionBuilder
|
||||||
|
{
|
||||||
|
internal EndpointBuilder EndpointBuilder { get; }
|
||||||
|
|
||||||
|
private readonly List<Action<EndpointBuilder>> _conventions;
|
||||||
|
|
||||||
|
public DefaultEndpointConventionBuilder(EndpointBuilder endpointBuilder)
|
||||||
|
{
|
||||||
|
EndpointBuilder = endpointBuilder;
|
||||||
|
_conventions = new List<Action<EndpointBuilder>>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Add(Action<EndpointBuilder> convention)
|
||||||
|
{
|
||||||
|
_conventions.Add(convention);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Endpoint Build()
|
||||||
|
{
|
||||||
|
foreach (var convention in _conventions)
|
||||||
|
{
|
||||||
|
convention(EndpointBuilder);
|
||||||
|
}
|
||||||
|
|
||||||
|
return EndpointBuilder.Build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
// 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.
|
// 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.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Microsoft.AspNetCore.Builder;
|
using Microsoft.AspNetCore.Builder;
|
||||||
|
|
@ -13,16 +12,16 @@ namespace Microsoft.AspNetCore.Routing
|
||||||
{
|
{
|
||||||
internal class ModelEndpointDataSource : EndpointDataSource
|
internal class ModelEndpointDataSource : EndpointDataSource
|
||||||
{
|
{
|
||||||
private List<EndpointConventionBuilder> _endpointConventionBuilders;
|
private List<DefaultEndpointConventionBuilder> _endpointConventionBuilders;
|
||||||
|
|
||||||
public ModelEndpointDataSource()
|
public ModelEndpointDataSource()
|
||||||
{
|
{
|
||||||
_endpointConventionBuilders = new List<EndpointConventionBuilder>();
|
_endpointConventionBuilders = new List<DefaultEndpointConventionBuilder>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEndpointConventionBuilder AddEndpointBuilder(EndpointBuilder endpointBuilder)
|
public IEndpointConventionBuilder AddEndpointBuilder(EndpointBuilder endpointBuilder)
|
||||||
{
|
{
|
||||||
var builder = new EndpointConventionBuilder(endpointBuilder);
|
var builder = new DefaultEndpointConventionBuilder(endpointBuilder);
|
||||||
_endpointConventionBuilders.Add(builder);
|
_endpointConventionBuilders.Add(builder);
|
||||||
|
|
||||||
return builder;
|
return builder;
|
||||||
|
|
@ -37,33 +36,5 @@ namespace Microsoft.AspNetCore.Routing
|
||||||
|
|
||||||
// for testing
|
// for testing
|
||||||
internal IEnumerable<EndpointBuilder> EndpointBuilders => _endpointConventionBuilders.Select(b => b.EndpointBuilder);
|
internal IEnumerable<EndpointBuilder> EndpointBuilders => _endpointConventionBuilders.Select(b => b.EndpointBuilder);
|
||||||
|
|
||||||
private class EndpointConventionBuilder : IEndpointConventionBuilder
|
|
||||||
{
|
|
||||||
internal EndpointBuilder EndpointBuilder { get; }
|
|
||||||
|
|
||||||
private readonly List<Action<EndpointBuilder>> _conventions;
|
|
||||||
|
|
||||||
public EndpointConventionBuilder(EndpointBuilder endpointBuilder)
|
|
||||||
{
|
|
||||||
EndpointBuilder = endpointBuilder;
|
|
||||||
_conventions = new List<Action<EndpointBuilder>>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Add(Action<EndpointBuilder> convention)
|
|
||||||
{
|
|
||||||
_conventions.Add(convention);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Endpoint Build()
|
|
||||||
{
|
|
||||||
foreach (var convention in _conventions)
|
|
||||||
{
|
|
||||||
convention(EndpointBuilder);
|
|
||||||
}
|
|
||||||
|
|
||||||
return EndpointBuilder.Build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -167,14 +167,14 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
// Act
|
// Act
|
||||||
app.UseRouting(builder =>
|
app.UseRouting(builder =>
|
||||||
{
|
{
|
||||||
builder.Map("/1", "Test endpoint 1", d => null);
|
builder.Map("/1", d => null).WithDisplayName("Test endpoint 1");
|
||||||
builder.Map("/2", "Test endpoint 2", d => null);
|
builder.Map("/2", d => null).WithDisplayName("Test endpoint 2");
|
||||||
});
|
});
|
||||||
|
|
||||||
app.UseRouting(builder =>
|
app.UseRouting(builder =>
|
||||||
{
|
{
|
||||||
builder.Map("/3", "Test endpoint 3", d => null);
|
builder.Map("/3", d => null).WithDisplayName("Test endpoint 3");
|
||||||
builder.Map("/4", "Test endpoint 4", d => null);
|
builder.Map("/4", d => null).WithDisplayName("Test endpoint 4");
|
||||||
});
|
});
|
||||||
|
|
||||||
// This triggers the middleware to be created and the matcher factory to be called
|
// This triggers the middleware to be created and the matcher factory to be called
|
||||||
|
|
|
||||||
|
|
@ -33,13 +33,13 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
RequestDelegate requestDelegate = (d) => null;
|
RequestDelegate requestDelegate = (d) => null;
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var endpointBuilder = builder.Map("/", "Display name!", requestDelegate);
|
var endpointBuilder = builder.Map("/", requestDelegate);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
var endpointBuilder1 = GetRouteEndpointBuilder(builder);
|
var endpointBuilder1 = GetRouteEndpointBuilder(builder);
|
||||||
|
|
||||||
Assert.Equal(requestDelegate, endpointBuilder1.RequestDelegate);
|
Assert.Equal(requestDelegate, endpointBuilder1.RequestDelegate);
|
||||||
Assert.Equal("Display name!", endpointBuilder1.DisplayName);
|
Assert.Equal("/", endpointBuilder1.DisplayName);
|
||||||
Assert.Equal("/", endpointBuilder1.RoutePattern.RawText);
|
Assert.Equal("/", endpointBuilder1.RoutePattern.RawText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -51,54 +51,16 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
RequestDelegate requestDelegate = (d) => null;
|
RequestDelegate requestDelegate = (d) => null;
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var endpointBuilder = builder.Map(RoutePatternFactory.Parse("/"), "Display name!", requestDelegate);
|
var endpointBuilder = builder.Map(RoutePatternFactory.Parse("/"), requestDelegate);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
var endpointBuilder1 = GetRouteEndpointBuilder(builder);
|
var endpointBuilder1 = GetRouteEndpointBuilder(builder);
|
||||||
|
|
||||||
Assert.Equal(requestDelegate, endpointBuilder1.RequestDelegate);
|
Assert.Equal(requestDelegate, endpointBuilder1.RequestDelegate);
|
||||||
Assert.Equal("Display name!", endpointBuilder1.DisplayName);
|
Assert.Equal("/", endpointBuilder1.DisplayName);
|
||||||
Assert.Equal("/", endpointBuilder1.RoutePattern.RawText);
|
Assert.Equal("/", endpointBuilder1.RoutePattern.RawText);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void MapEndpoint_StringPatternAndMetadata_BuildsEndpoint()
|
|
||||||
{
|
|
||||||
// Arrange
|
|
||||||
var metadata = new object();
|
|
||||||
var builder = new DefaultEndpointRouteBuilder();
|
|
||||||
RequestDelegate requestDelegate = (d) => null;
|
|
||||||
|
|
||||||
// Act
|
|
||||||
var endpointBuilder = builder.Map("/", "Display name!", requestDelegate, new[] { metadata });
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
var endpointBuilder1 = GetRouteEndpointBuilder(builder);
|
|
||||||
Assert.Equal(requestDelegate, endpointBuilder1.RequestDelegate);
|
|
||||||
Assert.Equal("Display name!", endpointBuilder1.DisplayName);
|
|
||||||
Assert.Equal("/", endpointBuilder1.RoutePattern.RawText);
|
|
||||||
Assert.Equal(metadata, Assert.Single(endpointBuilder1.Metadata));
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void MapEndpoint_TypedPatternAndMetadata_BuildsEndpoint()
|
|
||||||
{
|
|
||||||
// Arrange
|
|
||||||
var metadata = new object();
|
|
||||||
var builder = new DefaultEndpointRouteBuilder();
|
|
||||||
RequestDelegate requestDelegate = (d) => null;
|
|
||||||
|
|
||||||
// Act
|
|
||||||
var endpointBuilder = builder.Map(RoutePatternFactory.Parse("/"), "Display name!", requestDelegate, new[] { metadata });
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
var endpointBuilder1 = GetRouteEndpointBuilder(builder);
|
|
||||||
Assert.Equal(requestDelegate, endpointBuilder1.RequestDelegate);
|
|
||||||
Assert.Equal("Display name!", endpointBuilder1.DisplayName);
|
|
||||||
Assert.Equal("/", endpointBuilder1.RoutePattern.RawText);
|
|
||||||
Assert.Equal(metadata, Assert.Single(endpointBuilder1.Metadata));
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MapEndpoint_AttributesCollectedAsMetadata()
|
public void MapEndpoint_AttributesCollectedAsMetadata()
|
||||||
{
|
{
|
||||||
|
|
@ -106,36 +68,16 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
var builder = new DefaultEndpointRouteBuilder();
|
var builder = new DefaultEndpointRouteBuilder();
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var endpointBuilder = builder.Map(RoutePatternFactory.Parse("/"), "Display name!", Handle);
|
var endpointBuilder = builder.Map(RoutePatternFactory.Parse("/"), Handle);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
var endpointBuilder1 = GetRouteEndpointBuilder(builder);
|
var endpointBuilder1 = GetRouteEndpointBuilder(builder);
|
||||||
Assert.Equal("Display name!", endpointBuilder1.DisplayName);
|
|
||||||
Assert.Equal("/", endpointBuilder1.RoutePattern.RawText);
|
Assert.Equal("/", endpointBuilder1.RoutePattern.RawText);
|
||||||
Assert.Equal(2, endpointBuilder1.Metadata.Count);
|
Assert.Equal(2, endpointBuilder1.Metadata.Count);
|
||||||
Assert.IsType<Attribute1>(endpointBuilder1.Metadata[0]);
|
Assert.IsType<Attribute1>(endpointBuilder1.Metadata[0]);
|
||||||
Assert.IsType<Attribute2>(endpointBuilder1.Metadata[1]);
|
Assert.IsType<Attribute2>(endpointBuilder1.Metadata[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void MapEndpoint_ExplicitMetadataAddedAfterAttributeMetadata()
|
|
||||||
{
|
|
||||||
// Arrange
|
|
||||||
var builder = new DefaultEndpointRouteBuilder();
|
|
||||||
|
|
||||||
// Act
|
|
||||||
var endpointBuilder = builder.Map(RoutePatternFactory.Parse("/"), "Display name!", Handle, new Metadata());
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
var endpointBuilder1 = GetRouteEndpointBuilder(builder);
|
|
||||||
Assert.Equal("Display name!", endpointBuilder1.DisplayName);
|
|
||||||
Assert.Equal("/", endpointBuilder1.RoutePattern.RawText);
|
|
||||||
Assert.Equal(3, endpointBuilder1.Metadata.Count);
|
|
||||||
Assert.IsType<Attribute1>(endpointBuilder1.Metadata[0]);
|
|
||||||
Assert.IsType<Attribute2>(endpointBuilder1.Metadata[1]);
|
|
||||||
Assert.IsType<Metadata>(endpointBuilder1.Metadata[2]);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void MapEndpoint_GeneratedDelegateWorks()
|
public void MapEndpoint_GeneratedDelegateWorks()
|
||||||
{
|
{
|
||||||
|
|
@ -145,14 +87,11 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
Expression<RequestDelegate> handler = context => Task.CompletedTask;
|
Expression<RequestDelegate> handler = context => Task.CompletedTask;
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var endpointBuilder = builder.Map(RoutePatternFactory.Parse("/"), "Display name!", handler.Compile(), new Metadata());
|
var endpointBuilder = builder.Map(RoutePatternFactory.Parse("/"), handler.Compile());
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
var endpointBuilder1 = GetRouteEndpointBuilder(builder);
|
var endpointBuilder1 = GetRouteEndpointBuilder(builder);
|
||||||
Assert.Equal("Display name!", endpointBuilder1.DisplayName);
|
|
||||||
Assert.Equal("/", endpointBuilder1.RoutePattern.RawText);
|
Assert.Equal("/", endpointBuilder1.RoutePattern.RawText);
|
||||||
Assert.Equal(1, endpointBuilder1.Metadata.Count);
|
|
||||||
Assert.IsType<Metadata>(endpointBuilder1.Metadata[0]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -162,21 +101,17 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
var builder = new DefaultEndpointRouteBuilder();
|
var builder = new DefaultEndpointRouteBuilder();
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var endpointBuilder = builder.MapGet("/", HandleHttpMetdata, new HttpMethodMetadata(new[] { "METHOD" }));
|
var endpointBuilder = builder.MapMethods("/", new[] { "METHOD" }, HandleHttpMetdata);
|
||||||
endpointBuilder.Add(b =>
|
endpointBuilder.WithMetadata(new HttpMethodMetadata(new[] { "BUILDER" }));
|
||||||
{
|
|
||||||
b.Metadata.Add(new HttpMethodMetadata(new[] { "BUILDER" }));
|
|
||||||
});
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
var dataSource = Assert.Single(builder.DataSources);
|
var dataSource = Assert.Single(builder.DataSources);
|
||||||
var endpoint = Assert.Single(dataSource.Endpoints);
|
var endpoint = Assert.Single(dataSource.Endpoints);
|
||||||
|
|
||||||
Assert.Equal(4, endpoint.Metadata.Count);
|
Assert.Equal(3, endpoint.Metadata.Count);
|
||||||
Assert.Equal("ATTRIBUTE", GetMethod(endpoint.Metadata[0]));
|
Assert.Equal("ATTRIBUTE", GetMethod(endpoint.Metadata[0]));
|
||||||
Assert.Equal("GET", GetMethod(endpoint.Metadata[1]));
|
Assert.Equal("METHOD", GetMethod(endpoint.Metadata[1]));
|
||||||
Assert.Equal("METHOD", GetMethod(endpoint.Metadata[2]));
|
Assert.Equal("BUILDER", GetMethod(endpoint.Metadata[2]));
|
||||||
Assert.Equal("BUILDER", GetMethod(endpoint.Metadata[3]));
|
|
||||||
|
|
||||||
Assert.Equal("BUILDER", endpoint.Metadata.GetMetadata<IHttpMethodMetadata>().HttpMethods.Single());
|
Assert.Equal("BUILDER", endpoint.Metadata.GetMetadata<IHttpMethodMetadata>().HttpMethods.Single());
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,85 @@
|
||||||
|
// 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.Routing;
|
||||||
|
using Microsoft.AspNetCore.Routing.Patterns;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNetCore.Builder
|
||||||
|
{
|
||||||
|
public class RoutingEndpointConventionBuilderExtensionsTest
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void RequireHost_AddsHostMetadata()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var builder = CreateBuilder();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
builder.RequireHost("www.example.com", "example.com");
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var endpoint = builder.Build();
|
||||||
|
|
||||||
|
var metadata = endpoint.Metadata.GetMetadata<IHostMetadata>();
|
||||||
|
Assert.NotNull(metadata);
|
||||||
|
Assert.Equal(new[] { "www.example.com", "example.com" }, metadata.Hosts);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void WithDisplayName_String_SetsDisplayName()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var builder = CreateBuilder();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
builder.WithDisplayName("test");
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var endpoint = builder.Build();
|
||||||
|
Assert.Equal("test", endpoint.DisplayName);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void WithDisplayName_Func_SetsDisplayName()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var builder = CreateBuilder();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
builder.WithDisplayName(b => "test");
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var endpoint = builder.Build();
|
||||||
|
Assert.Equal("test", endpoint.DisplayName);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void WithMetadata_AddsMetadata()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var builder = CreateBuilder();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
builder.WithMetadata("test", new HostAttribute("www.example.com", "example.com"));
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var endpoint = builder.Build();
|
||||||
|
|
||||||
|
var hosts = endpoint.Metadata.GetMetadata<IHostMetadata>();
|
||||||
|
Assert.NotNull(hosts);
|
||||||
|
Assert.Equal(new[] { "www.example.com", "example.com" }, hosts.Hosts);
|
||||||
|
|
||||||
|
var @string = endpoint.Metadata.GetMetadata<string>();
|
||||||
|
Assert.Equal("test", @string);
|
||||||
|
}
|
||||||
|
|
||||||
|
private DefaultEndpointConventionBuilder CreateBuilder()
|
||||||
|
{
|
||||||
|
return new DefaultEndpointConventionBuilder(new RouteEndpointBuilder(
|
||||||
|
TestConstants.EmptyRequestDelegate,
|
||||||
|
RoutePatternFactory.Parse("/test"),
|
||||||
|
order: 0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -24,10 +24,7 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
.UseHello(greeter)
|
.UseHello(greeter)
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
return routes.Map(
|
return routes.Map(pattern, pipeline);
|
||||||
pattern,
|
|
||||||
"Hello " + greeter,
|
|
||||||
pipeline);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,6 @@ namespace RoutingSandbox
|
||||||
});
|
});
|
||||||
builder.MapGet(
|
builder.MapGet(
|
||||||
"/graph",
|
"/graph",
|
||||||
"DFA Graph",
|
|
||||||
(httpContext) =>
|
(httpContext) =>
|
||||||
{
|
{
|
||||||
using (var writer = new StreamWriter(httpContext.Response.Body, Encoding.UTF8, 1024, leaveOpen: true))
|
using (var writer = new StreamWriter(httpContext.Response.Body, Encoding.UTF8, 1024, leaveOpen: true))
|
||||||
|
|
@ -82,7 +81,7 @@ namespace RoutingSandbox
|
||||||
}
|
}
|
||||||
|
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
});
|
}).WithDisplayName("DFA Graph");
|
||||||
|
|
||||||
builder.MapGet("/attributes", HandlerWithAttributes);
|
builder.MapGet("/attributes", HandlerWithAttributes);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,10 +24,7 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
.UseHello(greeter)
|
.UseHello(greeter)
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
return routes.Map(
|
return routes.Map(template, pipeline).WithDisplayName("Hello " + greeter);
|
||||||
template,
|
|
||||||
"Hello " + greeter,
|
|
||||||
pipeline);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -108,8 +108,7 @@ namespace RoutingWebSite
|
||||||
response.ContentType = "text/plain";
|
response.ContentType = "text/plain";
|
||||||
return response.WriteAsync(
|
return response.WriteAsync(
|
||||||
"Link: " + linkGenerator.GetPathByRouteValues(httpContext, "WithSingleAsteriskCatchAll", new { }));
|
"Link: " + linkGenerator.GetPathByRouteValues(httpContext, "WithSingleAsteriskCatchAll", new { }));
|
||||||
},
|
}).WithMetadata(new RouteNameMetadata(routeName: "WithSingleAsteriskCatchAll"));
|
||||||
new RouteNameMetadata(routeName: "WithSingleAsteriskCatchAll"));
|
|
||||||
routes.MapGet(
|
routes.MapGet(
|
||||||
"/WithDoubleAsteriskCatchAll/{**path}",
|
"/WithDoubleAsteriskCatchAll/{**path}",
|
||||||
(httpContext) =>
|
(httpContext) =>
|
||||||
|
|
@ -121,8 +120,7 @@ namespace RoutingWebSite
|
||||||
response.ContentType = "text/plain";
|
response.ContentType = "text/plain";
|
||||||
return response.WriteAsync(
|
return response.WriteAsync(
|
||||||
"Link: " + linkGenerator.GetPathByRouteValues(httpContext, "WithDoubleAsteriskCatchAll", new { }));
|
"Link: " + linkGenerator.GetPathByRouteValues(httpContext, "WithDoubleAsteriskCatchAll", new { }));
|
||||||
},
|
}).WithMetadata(new RouteNameMetadata(routeName: "WithDoubleAsteriskCatchAll"));
|
||||||
new RouteNameMetadata(routeName: "WithDoubleAsteriskCatchAll"));
|
|
||||||
|
|
||||||
MapHostEndpoint(routes);
|
MapHostEndpoint(routes);
|
||||||
MapHostEndpoint(routes, "*.0.0.1");
|
MapHostEndpoint(routes, "*.0.0.1");
|
||||||
|
|
|
||||||
|
|
@ -38,8 +38,7 @@ namespace MvcSandbox
|
||||||
{
|
{
|
||||||
builder.MapGet(
|
builder.MapGet(
|
||||||
requestDelegate: WriteEndpoints,
|
requestDelegate: WriteEndpoints,
|
||||||
pattern: "/endpoints",
|
pattern: "/endpoints").WithDisplayName("Home");
|
||||||
displayName: "Home");
|
|
||||||
|
|
||||||
builder.MapControllerRoute(
|
builder.MapControllerRoute(
|
||||||
name: "default",
|
name: "default",
|
||||||
|
|
@ -53,7 +52,6 @@ namespace MvcSandbox
|
||||||
|
|
||||||
builder.MapGet(
|
builder.MapGet(
|
||||||
"/graph",
|
"/graph",
|
||||||
"DFA Graph",
|
|
||||||
(httpContext) =>
|
(httpContext) =>
|
||||||
{
|
{
|
||||||
using (var writer = new StreamWriter(httpContext.Response.Body, Encoding.UTF8, 1024, leaveOpen: true))
|
using (var writer = new StreamWriter(httpContext.Response.Body, Encoding.UTF8, 1024, leaveOpen: true))
|
||||||
|
|
@ -64,7 +62,7 @@ namespace MvcSandbox
|
||||||
}
|
}
|
||||||
|
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
});
|
}).WithDisplayName("DFA Graph");
|
||||||
|
|
||||||
builder.MapControllers();
|
builder.MapControllers();
|
||||||
builder.MapRazorPages();
|
builder.MapRazorPages();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue