Uruchamianie aplikacji na platformie ASP.NET Core
Uwaga
Nie jest to najnowsza wersja tego artykułu. Aby zapoznać się z bieżącą wersją, zapoznaj się z wersją tego artykułu platformy .NET 8.
Ostrzeżenie
Ta wersja ASP.NET Core nie jest już obsługiwana. Aby uzyskać więcej informacji, zobacz .NET i .NET Core Support Policy (Zasady obsługi platformy .NET Core). Aby zapoznać się z bieżącą wersją, zapoznaj się z wersją tego artykułu platformy .NET 8.
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ą, zapoznaj się z wersją tego artykułu platformy .NET 8.
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:
- Razor Pages
- Kontrolery MVC z widokami
- Internetowy interfejs API z kontrolerami
- Minimalne interfejsy API
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żyIStartupFilter
do dodawania wartości domyślnych na początku potoku bez jawnego rejestrowania domyślnego oprogramowania pośredniczącego.IStartupFilter
umożliwia wywołanieUse{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 wIStartupFilter
programie . 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:
- Używanie uruchamiania z minimalnym modelem hostingu
- Wersja tego artykułu ASP.NET Core 5.0:
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:
- Razor Pages
- Kontrolery MVC z widokami
- Internetowy interfejs API z kontrolerami
- Minimalne interfejsy API
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żyIStartupFilter
do dodawania wartości domyślnych na początku potoku bez jawnego rejestrowania domyślnego oprogramowania pośredniczącego.IStartupFilter
umożliwia wywołanieUse{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 wIStartupFilter
programie . 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:
- Strona wyjątku dla deweloperów
- Procedura obsługi wyjątków
- HTTP Strict Transport Security (HSTS)
- Przekierowywanie HTTPS
- Pliki statyczne
- ASP.NET Core MVC i Razor pages
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
, ILoggerFactory
lub dowolne elementy zdefiniowane w ConfigureServices
pliku . 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łanieUse{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 wIStartupFilter
programie . 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.