File: RouteBuilder.cs
Web Access
Project: src\src\Http\Routing\src\Microsoft.AspNetCore.Routing.csproj (Microsoft.AspNetCore.Routing)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
#nullable enable
 
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
 
namespace Microsoft.AspNetCore.Routing;
 
/// <summary>
/// Provides support for specifying routes in an application.
/// </summary>
public class RouteBuilder : IRouteBuilder
{
    /// <summary>
    /// Constructs a new <see cref="RouteBuilder"/> instance given an <paramref name="applicationBuilder"/>.
    /// </summary>
    /// <param name="applicationBuilder">An <see cref="IApplicationBuilder"/> instance.</param>
    public RouteBuilder(IApplicationBuilder applicationBuilder)
        : this(applicationBuilder, defaultHandler: null)
    {
    }
 
    /// <summary>
    /// Constructs a new <see cref="RouteBuilder"/> instance given an <paramref name="applicationBuilder"/>
    /// and <paramref name="defaultHandler"/>.
    /// </summary>
    /// <param name="applicationBuilder">An <see cref="IApplicationBuilder"/> instance.</param>
    /// <param name="defaultHandler">The default <see cref="IRouter"/> used if a new route is added without a handler.</param>
    public RouteBuilder(IApplicationBuilder applicationBuilder, IRouter? defaultHandler)
    {
        ArgumentNullException.ThrowIfNull(applicationBuilder);
 
        if (applicationBuilder.ApplicationServices.GetService(typeof(RoutingMarkerService)) == null)
        {
            throw new InvalidOperationException(Resources.FormatUnableToFindServices(
                nameof(IServiceCollection),
                nameof(RoutingServiceCollectionExtensions.AddRouting),
                "ConfigureServices(...)"));
        }
 
        ApplicationBuilder = applicationBuilder;
        DefaultHandler = defaultHandler;
        ServiceProvider = applicationBuilder.ApplicationServices;
 
        Routes = new List<IRouter>();
    }
 
    /// <inheritdoc />
    public IApplicationBuilder ApplicationBuilder { get; }
 
    /// <inheritdoc />
    public IRouter? DefaultHandler { get; set; }
 
    /// <inheritdoc />
    public IServiceProvider ServiceProvider { get; }
 
    /// <inheritdoc />
    public IList<IRouter> Routes { get; }
 
    /// <inheritdoc />
    public IRouter Build()
    {
        var routeCollection = new RouteCollection();
 
        foreach (var route in Routes)
        {
            routeCollection.Add(route);
        }
 
        return routeCollection;
    }
}