Class RouterBuilder<TRouter, TConfig>

Builds a concrete router type together with its strongly typed configuration object.

Inheritance
object
RouteScopeBuilder
RouterBuilder<TRouter, TConfig>
Inherited Members
RouteScopeBuilder.CurrentExact
RouteScopeBuilder.CurrentPrefix
RouteScopeBuilder.CreatePrefix(string)
RouteScopeBuilder.ValueParsers
RouteScopeBuilder.BasePattern
RouteScopeBuilder.Patterns
object.GetType()
object.ToString()
object.Equals(object)
object.Equals(object, object)
object.ReferenceEquals(object, object)
object.GetHashCode()
Namespace: NanoRoute
Assembly: NanoRoute.dll
Syntax
public sealed class RouterBuilder<TRouter, TConfig> : RouteScopeBuilder where TRouter : RouterBase<TConfig> where TConfig : RouterConfig, new()
Type Parameters
Name Description
TRouter

The router type produced by CreateRouter(Action<TConfig>).

TConfig

The configuration type exposed by RouterConfig.

Examples
MyRouter router = MyRouter
    .CreateBuilder()
    .AddDefaultValueParsers()
    .AddHandler("GET", "/health/", (context, _) => Results.Ok())
    .CreateRouter();

Constructors

RouterBuilder(RouterFactoryDelegate<TRouter, TConfig>)

Creates a builder that can produce TRouter instances.

Declaration
public RouterBuilder(RouterFactoryDelegate<TRouter, TConfig> routerFactory)
Parameters
Type Name Description
RouterFactoryDelegate<TRouter, TConfig> routerFactory

A factory that receives this builder and returns a router backed by its current route snapshot.

Exceptions
Type Condition
ArgumentNullException

Thrown when routerFactory is null.

Methods

AddHandler(string, string, RequestHandlerDelegate)

Registers a handler for a single HTTP method.

Declaration
public RouterBuilder<TRouter, TConfig> AddHandler(string verb, string pattern, RequestHandlerDelegate handler)
Parameters
Type Name Description
string verb

The HTTP method that activates the handler.

string pattern

The route pattern to match. Literal segments are matched case-insensitively, parameter segments use registered parsers in the form {parameterName:parserName}. Exact patterns must end with /, and prefix patterns must end with /*.

RequestHandlerDelegate handler

The handler to execute. If several handlers match, calling the supplied next delegate continues the pipeline with the next compatible handler from the already selected route branch.

Returns
Type Description
RouterBuilder<TRouter, TConfig>

The current router instance.

Examples
builder.AddHandler("GET", "/files/{path:any}/*", (context, next) =>
{
    string path = (string) context.Parameters["path"]!;
    return ServeFile(path);
});
Exceptions
Type Condition
ArgumentNullException

Thrown when verb, pattern, or handler is null.

ArgumentException

Thrown when verb is not a supported HTTP method.

ArgumentException

Thrown when pattern has invalid route-template syntax.

InvalidOperationException

Thrown when pattern uses an unsupported optional parameter or list parser, references a value parser that has not been registered yet, or reuses a parser-backed branch with a different parameter name.

AddValueParser(string, BindArgumentsDelegate, ValueParserDelegate)

Registers a parser that can convert a route segment into a typed value and bind parser arguments once during route registration.

Declaration
public RouterBuilder<TRouter, TConfig> AddValueParser(string parserName, BindArgumentsDelegate bindArguments, ValueParserDelegate tryParseDelegate)
Parameters
Type Name Description
string parserName

The name used in route patterns such as {id:int(min=1)}.

BindArgumentsDelegate bindArguments

Converts raw parser arguments into typed values once per route-template branch.

ValueParserDelegate tryParseDelegate

The delegate that validates and parses a single path segment.

Returns
Type Description
RouterBuilder<TRouter, TConfig>

The current RouterBuilder<TRouter, TConfig> instance.

Examples
builder.AddValueParser("slug", static rawArgs => null, static context =>
    ValueTask.FromResult(new ValueParseResult(context.Segment.Length > 0, context.Segment.ToString())));
Exceptions
Type Condition
ArgumentNullException

Thrown when parserName, bindArguments, or tryParseDelegate is null.

CreateRouter()

Creates a router from the builder's current routes and parser registrations with default configuration.

Declaration
public TRouter CreateRouter()
Returns
Type Description
TRouter

A new TRouter instance.

Remarks

The created router is an immutable snapshot. Later changes to the builder do not affect routers that have already been created.

Examples
MyRouter router = builder.CreateRouter();

CreateRouter(Action<TConfig>)

Creates a router from the builder's current routes and parser registrations with inline configuration.

Declaration
public TRouter CreateRouter(Action<TConfig> configureRouting)
Parameters
Type Name Description
Action<TConfig> configureRouting

A callback that configures the new router instance before it is created.

Returns
Type Description
TRouter

A new TRouter instance.

Remarks

The callback receives a fresh TConfig instance for this router. Later calls to CreateRouter(Action<TConfig>) receive their own configuration instances.

Examples
MyRouter router = builder.CreateRouter(config =>
{
    config.MatchingPrecedence = MatchingPrecedence.ParameterizedFirst;
});
Exceptions
Type Condition
ArgumentNullException

Thrown when configureRouting is null.

Extension Methods

NanoRouteEndpointExtensions.AddEndpoint<TBuilder>(TBuilder, IEnumerable<string>, string, Action<EndpointBuilder>)
NanoRouteEndpointExtensions.AddEndpoint<TBuilder>(TBuilder, string, string, Action<EndpointBuilder>)
NanoRouteEndpointExtensions.CreateEndpoint<TBuilder>(TBuilder, IEnumerable<string>, string)
NanoRouteEndpointExtensions.CreateEndpoint<TBuilder>(TBuilder, string, string)
NanoRouteExceptionExtensions.AddExceptionHandler<TBuilder>(TBuilder)
NanoRouteExceptionExtensions.AddExceptionHandler<TBuilder>(TBuilder, Action<ExceptionHandlingOptions>)
NanoRouteExceptionExtensions.AddExceptionHandler<TBuilder>(TBuilder, IEnumerable<string>)
NanoRouteExceptionExtensions.AddExceptionHandler<TBuilder>(TBuilder, IEnumerable<string>, Action<ExceptionHandlingOptions>)
NanoRouteExceptionExtensions.AddExceptionHandler<TBuilder>(TBuilder, IEnumerable<string>, string)
NanoRouteExceptionExtensions.AddExceptionHandler<TBuilder>(TBuilder, IEnumerable<string>, string, ExceptionHandlingOptions)
NanoRouteExceptionExtensions.AddExceptionHandler<TBuilder>(TBuilder, IEnumerable<string>, string, Action<ExceptionHandlingOptions>)
NanoRouteExceptionExtensions.AddExceptionHandler<TBuilder>(TBuilder, string)
NanoRouteExceptionExtensions.AddExceptionHandler<TBuilder>(TBuilder, string, Action<ExceptionHandlingOptions>)
NanoRouteExceptionExtensions.AddExceptionHandler<TBuilder>(TBuilder, string, string)
NanoRouteExceptionExtensions.AddExceptionHandler<TBuilder>(TBuilder, string, string, Action<ExceptionHandlingOptions>)
NanoRouteHandlerExtensions.AddHandler<TBuilder>(TBuilder, IEnumerable<string>, RequestHandlerDelegate)
NanoRouteHandlerExtensions.AddHandler<TBuilder>(TBuilder, IEnumerable<string>, string, RequestHandlerDelegate)
NanoRouteHandlerExtensions.AddHandler<TBuilder>(TBuilder, string, RequestHandlerDelegate)
NanoRouteHandlerExtensions.AddHandler<TBuilder, TRequestContext>(TBuilder, IEnumerable<string>, string, TypedRequestEndpointHandlerDelegate<TRequestContext>)
NanoRouteHandlerExtensions.AddHandler<TBuilder, TRequestContext>(TBuilder, IEnumerable<string>, string, TypedRequestHandlerDelegate<TRequestContext>)
NanoRouteHandlerExtensions.AddHandler<TBuilder, TRequestContext>(TBuilder, string, TypedRequestEndpointHandlerDelegate<TRequestContext>)
NanoRouteHandlerExtensions.AddHandler<TBuilder, TRequestContext>(TBuilder, string, TypedRequestHandlerDelegate<TRequestContext>)
NanoRouteHandlerExtensions.AddHandler<TBuilder, TRequestContext>(TBuilder, string, string, TypedRequestEndpointHandlerDelegate<TRequestContext>)
NanoRouteHandlerExtensions.AddHandler<TBuilder, TRequestContext>(TBuilder, string, string, TypedRequestHandlerDelegate<TRequestContext>)
NanoRouteJsonExtensions.AddJsonBody<TBuilder>(TBuilder, IEnumerable<string>, string, JsonTypeInfo, string)
NanoRouteJsonExtensions.AddJsonBody<TBuilder>(TBuilder, IEnumerable<string>, string, Type, string)
NanoRouteJsonExtensions.AddJsonBody<TBuilder>(TBuilder, IEnumerable<string>, JsonTypeInfo, string)
NanoRouteJsonExtensions.AddJsonBody<TBuilder>(TBuilder, IEnumerable<string>, Type, string)
NanoRouteJsonExtensions.AddJsonBody<TBuilder>(TBuilder, string, string, JsonTypeInfo, string)
NanoRouteJsonExtensions.AddJsonBody<TBuilder>(TBuilder, string, string, Type, string)
NanoRouteJsonExtensions.AddJsonBody<TBuilder>(TBuilder, string, JsonTypeInfo, string)
NanoRouteJsonExtensions.AddJsonBody<TBuilder>(TBuilder, string, Type, string)
NanoRouteJsonExtensions.AddJsonBody<TBuilder>(TBuilder, JsonTypeInfo, string)
NanoRouteJsonExtensions.AddJsonBody<TBuilder>(TBuilder, Type, string)
NanoRouteJsonExtensions.AddJsonErrorDetails<TBuilder>(TBuilder)
NanoRouteJsonExtensions.AddJsonErrorDetails<TBuilder>(TBuilder, Action<JsonErrorDetailsOptions>)
NanoRouteJsonExtensions.AddJsonErrorDetails<TBuilder>(TBuilder, IEnumerable<string>)
NanoRouteJsonExtensions.AddJsonErrorDetails<TBuilder>(TBuilder, IEnumerable<string>, Action<JsonErrorDetailsOptions>)
NanoRouteJsonExtensions.AddJsonErrorDetails<TBuilder>(TBuilder, IEnumerable<string>, string)
NanoRouteJsonExtensions.AddJsonErrorDetails<TBuilder>(TBuilder, IEnumerable<string>, string, JsonErrorDetailsOptions)
NanoRouteJsonExtensions.AddJsonErrorDetails<TBuilder>(TBuilder, IEnumerable<string>, string, Action<JsonErrorDetailsOptions>)
NanoRouteJsonExtensions.AddJsonErrorDetails<TBuilder>(TBuilder, string)
NanoRouteJsonExtensions.AddJsonErrorDetails<TBuilder>(TBuilder, string, Action<JsonErrorDetailsOptions>)
NanoRouteJsonExtensions.AddJsonErrorDetails<TBuilder>(TBuilder, string, string)
NanoRouteJsonExtensions.AddJsonErrorDetails<TBuilder>(TBuilder, string, string, Action<JsonErrorDetailsOptions>)
NanoRoutePrefixExtensions.AddPrefix<TBuilder>(TBuilder, string, Action<RouteScopeBuilder>)
NanoRouteQueryExtensions.AddQueryBindings<TBuilder>(TBuilder, IEnumerable<string>, string)
NanoRouteQueryExtensions.AddQueryBindings<TBuilder>(TBuilder, IEnumerable<string>, string, UnexpectedParameterBehavior)
NanoRouteQueryExtensions.AddQueryBindings<TBuilder>(TBuilder, IEnumerable<string>, string, string)
NanoRouteQueryExtensions.AddQueryBindings<TBuilder>(TBuilder, IEnumerable<string>, string, string, UnexpectedParameterBehavior)
NanoRouteQueryExtensions.AddQueryBindings<TBuilder>(TBuilder, string)
NanoRouteQueryExtensions.AddQueryBindings<TBuilder>(TBuilder, string, UnexpectedParameterBehavior)
NanoRouteQueryExtensions.AddQueryBindings<TBuilder>(TBuilder, string, string)
NanoRouteQueryExtensions.AddQueryBindings<TBuilder>(TBuilder, string, string, UnexpectedParameterBehavior)
NanoRouteQueryExtensions.AddQueryBindings<TBuilder>(TBuilder, string, string, string)
NanoRouteQueryExtensions.AddQueryBindings<TBuilder>(TBuilder, string, string, string, UnexpectedParameterBehavior)
NanoRouteValueParserExtensions.AddBoolParser<TBuilder>(TBuilder)
NanoRouteValueParserExtensions.AddDefaultValueParsers<TBuilder>(TBuilder)
NanoRouteValueParserExtensions.AddGuidParser<TBuilder>(TBuilder)
NanoRouteValueParserExtensions.AddIntParser<TBuilder>(TBuilder)
NanoRouteValueParserExtensions.AddRegexParser<TBuilder>(TBuilder)
NanoRouteValueParserExtensions.AddStringParser<TBuilder>(TBuilder)
NanoRouteValueParserExtensions.AddValueParser<TBuilder>(TBuilder, string, BindArgumentsDelegate, SyncValueParserDelegate)
NanoRouteValueParserExtensions.AddValueParser<TBuilder>(TBuilder, string, BindArgumentsDelegate, ValueParserDelegate)
NanoRouteValueParserExtensions.AddValueParser<TBuilder>(TBuilder, string, SyncValueParserDelegate)
NanoRouteValueParserExtensions.AddValueParser<TBuilder>(TBuilder, string, ValueParserDelegate)
In this article
Back to top Generated by DocFX