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.Metadata
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 : Router where TConfig : RouterConfig, new()
Type Parameters
Name Description
TRouter

The router type produced by CreateRouter().

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.

Properties

RouterConfig

Gets the configuration object applied when CreateRouter() is called.

Declaration
public TConfig RouterConfig { get; }
Property Value
Type Description
TConfig

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.

ConfigureRouting(ConfigureBuilderDelegate<TConfig>)

Updates the router configuration object that will be used by future router instances.

Declaration
public RouterBuilder<TRouter, TConfig> ConfigureRouting(ConfigureBuilderDelegate<TConfig> updateConfig)
Parameters
Type Name Description
ConfigureBuilderDelegate<TConfig> updateConfig

A callback that returns the updated RouterConfig instance.

Returns
Type Description
RouterBuilder<TRouter, TConfig>

The current builder.

Examples
builder.ConfigureRouting(config => config with
{
    MatchingPrecedence = MatchingPrecedence.ParameterizedFirst
});
Exceptions
Type Condition
ArgumentNullException

Thrown when updateConfig is null or returns null.

CreateRouter()

Creates a router from the builder's current routes, parser registrations, and 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 or its configuration do not affect routers that have already been created.

Examples
MyRouter router = builder.CreateRouter();

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, IEnumerable<string>)
NanoRouteExceptionExtensions.AddExceptionHandler<TBuilder>(TBuilder, IEnumerable<string>, string)
NanoRouteExceptionExtensions.AddExceptionHandler<TBuilder>(TBuilder, string)
NanoRouteExceptionExtensions.AddExceptionHandler<TBuilder>(TBuilder, string, string)
NanoRouteExceptionExtensions.ConfigureExceptionHandling<TBuilder>(TBuilder, ConfigureBuilderDelegate<ExceptionHandlingConfig>)
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, IEnumerable<string>)
NanoRouteJsonExtensions.AddJsonErrorDetails<TBuilder>(TBuilder, IEnumerable<string>, string)
NanoRouteJsonExtensions.AddJsonErrorDetails<TBuilder>(TBuilder, string)
NanoRouteJsonExtensions.AddJsonErrorDetails<TBuilder>(TBuilder, string, string)
NanoRouteJsonExtensions.ConfigureJsonErrorDetails<TBuilder>(TBuilder, ConfigureBuilderDelegate<JsonErrorDetailsConfig>)
NanoRoutePrefixExtensions.AddPrefix<TBuilder>(TBuilder, string, Action<RouteScopeBuilder>)
NanoRouteQueryExtensions.AddQueryBindings<TBuilder>(TBuilder, IEnumerable<string>, string)
NanoRouteQueryExtensions.AddQueryBindings<TBuilder>(TBuilder, IEnumerable<string>, string, string)
NanoRouteQueryExtensions.AddQueryBindings<TBuilder>(TBuilder, string)
NanoRouteQueryExtensions.AddQueryBindings<TBuilder>(TBuilder, string, string)
NanoRouteQueryExtensions.AddQueryBindings<TBuilder>(TBuilder, string, string, string)
NanoRouteQueryExtensions.ConfigureQueryParsing<TBuilder>(TBuilder, ConfigureBuilderDelegate<QueryParsingConfig>)
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