// 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.Collections.Generic; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Dispatcher; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.DependencyInjection; namespace DispatcherSample { public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddSingleton(); services.AddSingleton(); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.Use(async (context, next) => { await context.Response.WriteAsync("

Middleware 1

"); await next.Invoke(); }); var dictionary = new Dictionary { { "/example", new DispatcherFeature { Endpoint = new DispatcherEndpoint("example"), RequestDelegate = async (context) => { await context.Response.WriteAsync("Hello from the example!"); } } }, { "/example2", new DispatcherFeature { Endpoint = new DispatcherEndpoint("example2"), RequestDelegate = async (context) => { await context.Response.WriteAsync("Hello from the second example!"); } } }, }; app.Use(async (context, next) => { if (dictionary.TryGetValue(context.Request.Path, out var value)) { var dispatcherFeature = new DispatcherFeature { Endpoint = value.Endpoint, RequestDelegate = value.RequestDelegate }; context.Features.Set(dispatcherFeature); await context.Response.WriteAsync("

Dispatch

"); await next.Invoke(); } }); app.Use(async (context, next) => { await context.Response.WriteAsync("

Middleware 2

"); await next.Invoke(); }); app.Use(async (context, next) => { var feature = context.Features.Get(); await feature.RequestDelegate(context); await next.Invoke(); }); app.Run(async (context) => { var urlGenerator = app.ApplicationServices.GetService(); var url = urlGenerator.GenerateURL(new RouteValueDictionary(new { Movie = "The Lion King", Character = "Mufasa" }), context); await context.Response.WriteAsync($"

Generated url: {url}

"); }); } } }