Udostępnij za pośrednictwem


Uruchamianie aplikacji na platformie ASP.NET Core

Uwaga

Nie jest to najnowsza wersja tego artykułu. Aby zapoznać się z bieżącą wersją, zobacz wersję tego artykułu platformy .NET 9.

Ostrzeżenie

Ta wersja ASP.NET Core nie jest już obsługiwana. Aby uzyskać więcej informacji, zobacz zasady pomocy technicznej platformy .NET i platformy .NET Core. Aby zapoznać się z bieżącą wersją, zobacz wersję tego artykułu platformy .NET 9.

Ważne

Te informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany, zanim zostanie wydany komercyjnie. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.

Aby zapoznać się z bieżącą wersją, zobacz wersję tego artykułu platformy .NET 9.

Autor: Rick Anderson

Aplikacje platformy ASP.NET Core tworzone za pomocą szablonów internetowych zawierają kod uruchamiania aplikacji w pliku Program.cs.

Aby uzyskać Blazor wskazówki dotyczące uruchamiania, które dodaje lub zastępuje wskazówki zawarte w tym artykule, zobacz ASP.NET Core Blazor startup.

Następujący kod uruchamiania aplikacji obsługuje:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthorization();

app.MapGet("/hi", () => "Hello!");

app.MapDefaultControllerRoute();
app.MapRazorPages();

app.Run();

Aplikacje korzystające z usługi EventSource mogą mierzyć czas uruchamiania, aby zrozumieć i zoptymalizować wydajność uruchamiania. Zdarzenie ServerReady w programie Microsoft.AspNetCore.Hosting reprezentuje punkt, w którym serwer jest gotowy do odpowiadania na żądania.

Aby uzyskać więcej informacji na temat uruchamiania aplikacji, zobacz omówienie podstaw platformy ASP.NET Core.

Rozszerzanie uruchamiania przy użyciu filtrów uruchamiania

Można używać serwera IStartupFilter:

  • Aby skonfigurować oprogramowanie pośredniczące na początku lub na końcu potoku oprogramowania pośredniczącego aplikacji bez jawnego wywołania metody Use{Middleware}. Służy IStartupFilter do dodawania wartości domyślnych na początku potoku bez jawnego rejestrowania domyślnego oprogramowania pośredniczącego. IStartupFilter umożliwia wywołanie Use{Middleware} innego składnika w imieniu autora aplikacji.
  • Aby utworzyć potok Configure metod. IStartupFilter.Configure może ustawić oprogramowanie pośredniczące do uruchomienia przed oprogramowaniem pośredniczącym dodanym przez biblioteki lub po nim.

IStartupFilter implementuje Configureelement , który odbiera i zwraca element Action<IApplicationBuilder>. Element IApplicationBuilder definiuje klasę do konfigurowania potoku żądania aplikacji. Aby uzyskać więcej informacji, zobacz Tworzenie potoku oprogramowania pośredniczącego za pomocą programu IApplicationBuilder.

Każde z nich IStartupFilter może dodawać co najmniej jedno oprogramowanie pośredniczące w potoku żądania. Filtry są wywoływane w kolejności, w której zostały dodane do kontenera usługi. Filtry mogą dodawać oprogramowanie pośredniczące przed lub po przekazaniu kontrolki do następnego filtru, dlatego dołączają do początku lub końca potoku aplikacji.

W poniższym przykładzie pokazano, jak zarejestrować oprogramowanie pośredniczące w programie IStartupFilter. RequestSetOptionsMiddleware Oprogramowanie pośredniczące ustawia wartość opcji z parametru ciągu zapytania:

public class RequestSetOptionsMiddleware
{
    private readonly RequestDelegate _next;

    public RequestSetOptionsMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    // Test with https://localhost:5001/Privacy/?option=Hello
    public async Task Invoke(HttpContext httpContext)
    {
        var option = httpContext.Request.Query["option"];

        if (!string.IsNullOrWhiteSpace(option))
        {
            httpContext.Items["option"] = WebUtility.HtmlEncode(option);
        }

        await _next(httpContext);
    }
}

Element RequestSetOptionsMiddleware jest skonfigurowany w RequestSetOptionsStartupFilter klasie:

namespace WebStartup.Middleware;
// <snippet1>
public class RequestSetOptionsStartupFilter : IStartupFilter
{
    public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
    {
        return builder =>
        {
            builder.UseMiddleware<RequestSetOptionsMiddleware>();
            next(builder);
        };
    }
}
// </snippet1>

Element IStartupFilter jest zarejestrowany w pliku Program.cs:

using WebStartup.Middleware;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();
builder.Services.AddTransient<IStartupFilter,
                      RequestSetOptionsStartupFilter>();

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

Po podaniu parametru ciągu zapytania oprogramowanie option pośredniczące przetwarza przypisanie wartości, zanim oprogramowanie pośredniczące ASP.NET Core renderuje odpowiedź:

@page
@model PrivacyModel
@{
    ViewData["Title"] = "Privacy Policy";
}
<h1>@ViewData["Title"]</h1>

<p> Append query string ?option=hello</p>
Option String: @HttpContext.Items["option"];

Kolejność wykonywania oprogramowania pośredniczącego IStartupFilter jest ustawiana przez kolejność rejestracji:

  • Wiele IStartupFilter implementacji może wchodzić w interakcje z tymi samymi obiektami. Jeśli zamawianie jest ważne, należy zamówić IStartupFilter rejestracje usług zgodnie z kolejnością uruchamiania oprogramowania pośredniczącego.

  • Biblioteki mogą dodawać oprogramowanie pośredniczące z co najmniej jedną IStartupFilter implementacją uruchamianą przed lub po innym oprogramowaniem pośredniczącym aplikacji zarejestrowanym w IStartupFilterprogramie . Aby wywołać IStartupFilter oprogramowanie pośredniczące przed oprogramowaniem pośredniczącym dodanym przez bibliotekę IStartupFilter:

    • Umieść rejestrację usługi przed dodaniu biblioteki do kontenera usługi.
    • Aby wywołać później, umieść rejestrację usługi po dodaniu biblioteki.

Uwaga: nie można rozszerzyć aplikacji ASP.NET Core podczas zastępowania Configure. Aby uzyskać więcej informacji, zobacz ten problem z usługą GitHub.

Dodawanie konfiguracji podczas uruchamiania z zestawu zewnętrznego

Implementacja IHostingStartup umożliwia dodawanie ulepszeń do aplikacji podczas uruchamiania z zestawu zewnętrznego poza plikiem aplikacji Program.cs . Więcej informacji można znaleźć w temacie Korzystanie z hostowania zestawów startowych na platformie ASP.NET Core.

Uruchamianie, konfigurowanie usług i konfigurowanie

Aby uzyskać informacje na temat używania ConfigureServices metod i Configure z minimalnym modelem hostingu, zobacz:

Aplikacje platformy ASP.NET Core tworzone za pomocą szablonów internetowych zawierają kod uruchamiania aplikacji w pliku Program.cs.

Następujący kod uruchamiania aplikacji obsługuje:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthorization();

app.MapGet("/hi", () => "Hello!");

app.MapDefaultControllerRoute();
app.MapRazorPages();

app.Run();

Aby uzyskać więcej informacji na temat uruchamiania aplikacji, zobacz omówienie podstaw platformy ASP.NET Core.

Rozszerzanie uruchamiania przy użyciu filtrów uruchamiania

Można używać serwera IStartupFilter:

  • Aby skonfigurować oprogramowanie pośredniczące na początku lub na końcu potoku oprogramowania pośredniczącego aplikacji bez jawnego wywołania metody Use{Middleware}. Służy IStartupFilter do dodawania wartości domyślnych na początku potoku bez jawnego rejestrowania domyślnego oprogramowania pośredniczącego. IStartupFilter umożliwia wywołanie Use{Middleware} innego składnika w imieniu autora aplikacji.
  • Aby utworzyć potok Configure metod. IStartupFilter.Configure może ustawić oprogramowanie pośredniczące do uruchomienia przed oprogramowaniem pośredniczącym dodanym przez biblioteki lub po nim.

IStartupFilter implementuje Configureelement , który odbiera i zwraca element Action<IApplicationBuilder>. Element IApplicationBuilder definiuje klasę do konfigurowania potoku żądania aplikacji. Aby uzyskać więcej informacji, zobacz Tworzenie potoku oprogramowania pośredniczącego za pomocą programu IApplicationBuilder.

Każde z nich IStartupFilter może dodawać co najmniej jedno oprogramowanie pośredniczące w potoku żądania. Filtry są wywoływane w kolejności, w której zostały dodane do kontenera usługi. Filtry mogą dodawać oprogramowanie pośredniczące przed lub po przekazaniu kontrolki do następnego filtru, dlatego dołączają do początku lub końca potoku aplikacji.

W poniższym przykładzie pokazano, jak zarejestrować oprogramowanie pośredniczące w programie IStartupFilter. RequestSetOptionsMiddleware Oprogramowanie pośredniczące ustawia wartość opcji z parametru ciągu zapytania:

public class RequestSetOptionsMiddleware
{
    private readonly RequestDelegate _next;

    public RequestSetOptionsMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    // Test with https://localhost:5001/Privacy/?option=Hello
    public async Task Invoke(HttpContext httpContext)
    {
        var option = httpContext.Request.Query["option"];

        if (!string.IsNullOrWhiteSpace(option))
        {
            httpContext.Items["option"] = WebUtility.HtmlEncode(option);
        }

        await _next(httpContext);
    }
}

Element RequestSetOptionsMiddleware jest skonfigurowany w RequestSetOptionsStartupFilter klasie:

namespace WebStartup.Middleware;
// <snippet1>
public class RequestSetOptionsStartupFilter : IStartupFilter
{
    public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
    {
        return builder =>
        {
            builder.UseMiddleware<RequestSetOptionsMiddleware>();
            next(builder);
        };
    }
}
// </snippet1>

Element IStartupFilter jest zarejestrowany w pliku Program.cs:

using WebStartup.Middleware;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();
builder.Services.AddTransient<IStartupFilter,
                      RequestSetOptionsStartupFilter>();

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

Po podaniu parametru ciągu zapytania oprogramowanie option pośredniczące przetwarza przypisanie wartości, zanim oprogramowanie pośredniczące ASP.NET Core renderuje odpowiedź:

@page
@model PrivacyModel
@{
    ViewData["Title"] = "Privacy Policy";
}
<h1>@ViewData["Title"]</h1>

<p> Append query string ?option=hello</p>
Option String: @HttpContext.Items["option"];

Kolejność wykonywania oprogramowania pośredniczącego IStartupFilter jest ustawiana przez kolejność rejestracji:

  • Wiele IStartupFilter implementacji może wchodzić w interakcje z tymi samymi obiektami. Jeśli zamawianie jest ważne, należy zamówić IStartupFilter rejestracje usług zgodnie z kolejnością uruchamiania oprogramowania pośredniczącego.

  • Biblioteki mogą dodawać oprogramowanie pośredniczące z co najmniej jedną IStartupFilter implementacją uruchamianą przed lub po innym oprogramowaniem pośredniczącym aplikacji zarejestrowanym w IStartupFilterprogramie . Aby wywołać IStartupFilter oprogramowanie pośredniczące przed oprogramowaniem pośredniczącym dodanym przez bibliotekę IStartupFilter:

    • Umieść rejestrację usługi przed dodaniu biblioteki do kontenera usługi.
    • Aby wywołać później, umieść rejestrację usługi po dodaniu biblioteki.

Uwaga: nie można rozszerzyć aplikacji ASP.NET Core podczas zastępowania Configure. Aby uzyskać więcej informacji, zobacz ten problem w serwisie GitHub.

Dodawanie konfiguracji podczas uruchamiania z zestawu zewnętrznego

Implementacja IHostingStartup umożliwia dodawanie ulepszeń do aplikacji podczas uruchamiania z zestawu zewnętrznego poza plikiem aplikacji Program.cs . Więcej informacji można znaleźć w temacie Korzystanie z hostowania zestawów startowych na platformie ASP.NET Core.

Klasa Startup konfiguruje usługi i potok żądania aplikacji.

Klasa Startup

aplikacje ASP.NET Core używają klasy, która jest nazwana Startup zgodnie z konwencjąStartup. Klasa Startup:

  • Opcjonalnie zawiera metodę ConfigureServices konfigurowania usług aplikacji. Usługa to składnik wielokrotnego użytku, który zapewnia funkcjonalność aplikacji. Usługi są rejestrowane w ConfigureServices aplikacji i używane przez iniekcję zależności (DI) lub ApplicationServices.
  • Zawiera metodę Configure tworzenia potoku przetwarzania żądań aplikacji.

ConfigureServices i Configure są wywoływane przez środowisko uruchomieniowe ASP.NET Core po uruchomieniu aplikacji:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapRazorPages();
        });
    }
}

Powyższy przykład dotyczy stronRazor; wersja MVC jest podobna.

Klasa Startup jest określana podczas kompilowania hosta aplikacji. Klasa Startup jest zwykle określana przez wywołanie WebHostBuilderExtensions.UseStartup/<TStartup> metody w konstruktorze hosta:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

Host udostępnia usługi dostępne dla konstruktora Startup klasy. Aplikacja dodaje dodatkowe usługi za pośrednictwem polecenia ConfigureServices. Zarówno host, jak i usługi aplikacji są dostępne w Configure aplikacji i w całej aplikacji.

Tylko następujące typy usług można wstrzyknąć do konstruktora Startup podczas korzystania z hosta ogólnego (IHostBuilder):

public class Startup
{
    private readonly IWebHostEnvironment _env;

    public Startup(IConfiguration configuration, IWebHostEnvironment env)
    {
        Configuration = configuration;
        _env = env;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        if (_env.IsDevelopment())
        {
        }
        else
        {
        }
    }
}

Większość usług nie jest dostępna, dopóki Configure metoda nie zostanie wywołana.

Wiele uruchomień

Gdy aplikacja definiuje oddzielne Startup klasy dla różnych środowisk (na przykład StartupDevelopment), odpowiednia Startup klasa jest wybierana w czasie wykonywania. Klasa, której sufiks nazwy pasuje do bieżącego środowiska, ma priorytet. Jeśli aplikacja jest uruchamiana w środowisku deweloperów i zawiera zarówno klasę Startup , jak i klasę StartupDevelopment , StartupDevelopment używana jest klasa . Aby uzyskać więcej informacji, zobacz Używanie wielu środowisk.

Aby uzyskać więcej informacji na temat hosta, zobacz Host . Aby uzyskać informacje na temat obsługi błędów podczas uruchamiania, zobacz Obsługa wyjątków uruchamiania.

Metoda ConfigureServices

Metoda ConfigureServices to:

  • Opcjonalny.
  • Wywoływana przez hosta przed Configure metodą konfigurowania usług aplikacji.
  • Gdzie opcje konfiguracji są ustawiane zgodnie z konwencją.

Host może skonfigurować niektóre usługi przed Startup wywołaniami metod. Aby uzyskać więcej informacji, zobacz Host.

W przypadku funkcji wymagających znacznej konfiguracji istnieją Add{Service} metody rozszerzeń w systemie IServiceCollection. Na przykład DodajdbContext, Add DefaultIdentity, AddEntityFrameworkStores i AddRazorPages:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {

        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("DefaultConnection")));
        services.AddDefaultIdentity<IdentityUser>(
            options => options.SignIn.RequireConfirmedAccount = true)
            .AddEntityFrameworkStores<ApplicationDbContext>();

        services.AddRazorPages();
    }

Dodanie usług do kontenera usługi udostępnia je w aplikacji i w metodzie Configure . Usługi są rozwiązywane za pomocą iniekcji zależności lub z ApplicationServices.

Metoda Configure

Metoda Configure służy do określania sposobu, w jaki aplikacja odpowiada na żądania HTTP. Potok żądania jest konfigurowany przez dodanie składników oprogramowania pośredniczącego IApplicationBuilder do wystąpienia. IApplicationBuilder jest dostępna dla Configure metody, ale nie jest zarejestrowana w kontenerze usługi. Hosting tworzy obiekt IApplicationBuilder i przekazuje go bezpośrednio do elementu Configure.

Szablony ASP.NET Core konfigurują potok z obsługą następujących elementów:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapRazorPages();
        });
    }
}

Powyższy przykład dotyczy stronRazor; wersja MVC jest podobna.

Każda Use metoda rozszerzenia dodaje do potoku żądania co najmniej jeden składnik oprogramowania pośredniczącego. Na przykład UseStaticFiles program pośredniczący konfiguruje oprogramowanie pośredniczące do obsługi plików statycznych.

Każdy składnik oprogramowania pośredniczącego w potoku żądania jest odpowiedzialny za wywoływanie następnego składnika w potoku lub zwarcie łańcucha, jeśli jest to konieczne.

W podpisie Configure metody można określić dodatkowe usługi, takie jak IWebHostEnvironment, ILoggerFactorylub dowolne elementy zdefiniowane w ConfigureServicespliku . Te usługi są wstrzykiwane, jeśli są dostępne.

Aby uzyskać więcej informacji na temat sposobu używania IApplicationBuilder i kolejności przetwarzania oprogramowania pośredniczącego, zobacz ASP.NET Core Middleware.

Konfigurowanie usług bez uruchamiania

Aby skonfigurować usługi i potok przetwarzania żądań bez użycia Startup klasy, wywołaj ConfigureServices metody i Configure wygodę w konstruktorze hosta. Wiele wywołań dołączania ConfigureServices do siebie. Jeśli istnieje wiele Configure wywołań metody, zostanie użyte ostatnie Configure wywołanie.

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((hostingContext, config) =>
            {
            })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.ConfigureServices(services =>
                {
                    services.AddControllersWithViews();
                })
                .Configure(app =>
                {
                    var loggerFactory = app.ApplicationServices
                        .GetRequiredService<ILoggerFactory>();
                    var logger = loggerFactory.CreateLogger<Program>();
                    var env = app.ApplicationServices.GetRequiredService<IWebHostEnvironment>();
                    var config = app.ApplicationServices.GetRequiredService<IConfiguration>();

                    logger.LogInformation("Logged in Configure");

                    if (env.IsDevelopment())
                    {
                        app.UseDeveloperExceptionPage();
                    }
                    else
                    {
                        app.UseExceptionHandler("/Home/Error");
                        app.UseHsts();
                    }

                    var configValue = config["MyConfigKey"];
                });
            });
        });
}

Rozszerzanie uruchamiania przy użyciu filtrów uruchamiania

Można używać serwera IStartupFilter:

  • Aby skonfigurować oprogramowanie pośredniczące na początku lub na końcu potoku oprogramowania pośredniczącego aplikacji bez jawnego wywołania metody Use{Middleware}. IStartupFilter Jest używany przez ASP.NET Core do dodawania wartości domyślnych na początku potoku bez konieczności jawnego rejestrowania domyślnego oprogramowania pośredniczącego przez autora aplikacji. IStartupFilter umożliwia wywołanie Use{Middleware} innego składnika w imieniu autora aplikacji.
  • Aby utworzyć potok Configure metod. IStartupFilter.Configure może ustawić oprogramowanie pośredniczące do uruchomienia przed oprogramowaniem pośredniczącym dodanym przez biblioteki lub po nim.

IStartupFilter implementuje Configureelement , który odbiera i zwraca element Action<IApplicationBuilder>. Element IApplicationBuilder definiuje klasę do konfigurowania potoku żądania aplikacji. Aby uzyskać więcej informacji, zobacz Tworzenie potoku oprogramowania pośredniczącego za pomocą programu IApplicationBuilder.

Każde z nich IStartupFilter może dodawać co najmniej jedno oprogramowanie pośredniczące w potoku żądania. Filtry są wywoływane w kolejności, w której zostały dodane do kontenera usługi. Filtry mogą dodawać oprogramowanie pośredniczące przed lub po przekazaniu kontrolki do następnego filtru, dlatego dołączają do początku lub końca potoku aplikacji.

W poniższym przykładzie pokazano, jak zarejestrować oprogramowanie pośredniczące w programie IStartupFilter. RequestSetOptionsMiddleware Oprogramowanie pośredniczące ustawia wartość opcji z parametru ciągu zapytania:

public class RequestSetOptionsMiddleware
{
    private readonly RequestDelegate _next;

    public RequestSetOptionsMiddleware( RequestDelegate next )
    {
        _next = next;
    }

    // Test with https://localhost:5001/Privacy/?option=Hello
    public async Task Invoke(HttpContext httpContext)
    {
        var option = httpContext.Request.Query["option"];

        if (!string.IsNullOrWhiteSpace(option))
        {
            httpContext.Items["option"] = WebUtility.HtmlEncode(option);
        }

        await _next(httpContext);
    }
}

Element RequestSetOptionsMiddleware jest skonfigurowany w RequestSetOptionsStartupFilter klasie:

public class RequestSetOptionsStartupFilter : IStartupFilter
{
    public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
    {
        return builder =>
        {
            builder.UseMiddleware<RequestSetOptionsMiddleware>();
            next(builder);
        };
    }
}

Element IStartupFilter jest zarejestrowany w kontenerze usługi w programie ConfigureServices.

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
           .ConfigureAppConfiguration((hostingContext, config) =>
           {
           })
         .ConfigureWebHostDefaults(webBuilder =>
         {
             webBuilder.UseStartup<Startup>();
         })
        .ConfigureServices(services =>
        {
            services.AddTransient<IStartupFilter,
                      RequestSetOptionsStartupFilter>();
        });
}

Po podaniu parametru ciągu zapytania dla option programu oprogramowanie pośredniczące przetwarza przypisanie wartości przed renderowaniem odpowiedzi przez oprogramowanie pośredniczące ASP.NET Core.

Kolejność wykonywania oprogramowania pośredniczącego IStartupFilter jest ustawiana przez kolejność rejestracji:

  • Wiele IStartupFilter implementacji może wchodzić w interakcje z tymi samymi obiektami. Jeśli zamawianie jest ważne, należy zamówić IStartupFilter rejestracje usług zgodnie z kolejnością uruchamiania oprogramowania pośredniczącego.

  • Biblioteki mogą dodawać oprogramowanie pośredniczące z co najmniej jedną IStartupFilter implementacją uruchamianą przed lub po innym oprogramowaniem pośredniczącym aplikacji zarejestrowanym w IStartupFilterprogramie . Aby wywołać IStartupFilter oprogramowanie pośredniczące przed oprogramowaniem pośredniczącym dodanym przez bibliotekę IStartupFilter:

    • Umieść rejestrację usługi przed dodaniu biblioteki do kontenera usługi.
    • Aby wywołać później, umieść rejestrację usługi po dodaniu biblioteki.

Dodawanie konfiguracji podczas uruchamiania z zestawu zewnętrznego

Implementacja IHostingStartup umożliwia dodawanie ulepszeń do aplikacji podczas uruchamiania z zestawu zewnętrznego znajdującego się poza klasą Startup aplikacji. Więcej informacji można znaleźć w temacie Korzystanie z hostowania zestawów startowych na platformie ASP.NET Core.

Dodatkowe zasoby