Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Note
Toto není nejnovější verze tohoto článku. Aktuální verzi najdete ve verzi .NET 10 tohoto článku.
Warning
Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v zásadách podpory .NET a .NET Core. Aktuální verzi najdete ve verzi .NET 10 tohoto článku.
Autor: Rick Anderson
ASP.NET Core aplikace vytvořené pomocí webových šablon obsahují spouštěcí kód aplikace v souboru Program.cs.
Pokyny ke spuštěníBlazor, které se přidávají nebo nahrazují pokyny v tomto článku, najdete v tématu ASP.NET Core Blazor startup.
Následující spouštěcí kód aplikace podporuje několik typů aplikací:
- Blazor Web AppS
- Razor Stránky
- Kontrolery MVC se zobrazeními
- Webové rozhraní API s kontrolery
- Minimální rozhraní API
using WebAll.Components;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();
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.MapRazorComponents<App>()
.AddInteractiveServerRenderMode();
app.UseAntiforgery();
app.Run();
Aplikace, které používají EventSource , můžou měřit dobu spuštění, aby porozuměly výkonu při spuštění a optimalizovaly ho. Událost ServerReady v Microsoft.AspNetCore.Hosting představuje bod, kdy je server připravený reagovat na požadavky.
Rozšíření procesu spuštění pomocí filtrů spuštění
IStartupFilter použijte:
Konfigurace middlewaru na začátku nebo na konci sekvence middlewaru v aplikaci bez explicitního volání
Use{Middleware}. PoužijteIStartupFilterk přidání výchozích parametrů na začátek pipeline bez explicitní registrace výchozího middlewaru.IStartupFilterumožňuje, aby jiná komponenta volalaUse{Middleware}jménem autora aplikace.Vytvořit potrubí
Configuremetod. IStartupFilter.Configure může nastavit middleware, který se má spustit před nebo po přidání middlewaru knihovnami.
Implementace IStartupFilter poskytuje metodu Configure , která přijímá a vrací Action<IApplicationBuilder>. Definuje IApplicationBuilder třídu pro konfiguraci kanálu žádosti aplikace. Další informace najdete v tématu Vytvoření kanálu middlewaru pomocí nástroje IApplicationBuilder.
Každá implementace IStartupFilter může do kanálu požadavku přidat jeden nebo více middlewarů. Filtry se vyvolávají v pořadí, v jakém byly přidány do kontejneru služby. Filtry můžou přidat middleware před nebo po předání ovládacího prvku do dalšího filtru, a proto se připojí k začátku nebo konci kanálu aplikace.
Následující příklad ukazuje, jak zaregistrovat middleware s IStartupFilter. Middleware RequestSetOptionsMiddleware nastaví hodnotu možností z parametru řetězce dotazu:
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);
}
}
RequestSetOptionsMiddleware je konfigurován ve třídě RequestSetOptionsStartupFilter.
public class RequestSetOptionsStartupFilter : IStartupFilter
{
public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
{
return builder =>
{
builder.UseMiddleware<RequestSetOptionsMiddleware>();
next(builder);
};
}
}
Implementace IStartupFilter se zaregistruje v souboru 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();
Pokud je zadaný parametr řetězce dotazu pro option, middleware zpracuje přiřazení hodnoty předtím, než middleware ASP.NET Core vykreslí odpověď.
@page
@model PrivacyModel
@{
ViewData["Title"] = "Privacy Policy";
}
<h1>@ViewData["Title"]</h1>
<p> Append query string ?option=hello</p>
Option String: @HttpContext.Items["option"];
Pořadí provádění middlewaru IStartupFilter je nastaveno pořadím registrací:
Několik
IStartupFilterimplementací může pracovat se stejnými objekty. Pokud je pořadí důležité, seřaďteIStartupFilterregistrace služeb tak, aby odpovídaly pořadí, v jakém by se měly spouštět jejich middleware.Knihovny můžou přidat middleware s jednou nebo více implementacemi
IStartupFilter, které běží před a po jiném aplikačním middleware zaregistrovaném vIStartupFilter. Vyvolání middlewaruIStartupFilterpřed middlewarem přidaným knihovnouIStartupFilter:Umístěte registraci služby před přidání knihovny do kontejneru služby.
Chcete-li jej vyvolat později, zaregistrujte službu po přidání knihovny.
Aplikaci ASP.NET Core nelze rozšířit, když přepíšete Configure. Další informace najdete v tématu GitHub /dotnet/aspnetcore/issues #45372.
Přidejte konfiguraci během spuštění z externí sestavy
Implementace IHostingStartup umožňuje přidání vylepšení do aplikace při spuštění z externího sestavení mimo soubor Program.cs aplikace. Další informace viz Použití hostujících spouštěcích sestavení v ASP.NET Core.
Spuštění, nastavení služeb a konfigurace
Informace o používání ConfigureServices a Configure metod s minimálním modelem hostování najdete v tématech:
Související obsah
Aplikace ASP.NET Core vytvořené pomocí webových šablon obsahují spouštěcí kód aplikace v souboru Program.cs.
Následující spouštěcí kód aplikace podporuje:
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();
Další informace o spuštění aplikace najdete v tématu ASP.NET Základní přehled.
Rozšířit spuštění pomocí spouštěcích filtrů
IStartupFilter použijte:
- Konfigurace middlewaru na začátku či na konci middleware kanálu aplikace bez explicitního volání
Use{Middleware}. SloužíIStartupFilterk přidání výchozích nastavení na začátek procesního řetězce bez explicitní registrace výchozího middlewaru.IStartupFilterumožňuje, aby jiná komponenta volalaUse{Middleware}jménem autora aplikace. - Vytvoření kanálu
Configuremetod IStartupFilter.Configure může nastavit middleware, který se má spustit před nebo po přidání middlewaru knihovnami.
IStartupFilter implementuje Configure, který přijímá a vrací Action<IApplicationBuilder>.
IApplicationBuilder definuje třídu ke konfiguraci žádostového kanálu aplikace. Další informace najdete v tématu Vytvoření kanálu middlewaru pomocí nástroje IApplicationBuilder.
Každý z nich IStartupFilter může do kanálu požadavku přidat jeden nebo více middlewarů. Filtry se vyvolávají v pořadí, v jakém byly přidány do kontejneru služby. Filtry můžou před nebo po předání ovládacího prvku do dalšího filtru přidat middleware, a proto se připojují k začátku nebo konci kanálu aplikace.
Následující příklad ukazuje, jak zaregistrovat middleware s IStartupFilter. Middleware RequestSetOptionsMiddleware nastaví hodnotu možností z parametru řetězce dotazu:
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);
}
}
Prvek RequestSetOptionsMiddleware je nakonfigurován ve třídě RequestSetOptionsStartupFilter.
namespace WebStartup.Middleware;
// <snippet1>
public class RequestSetOptionsStartupFilter : IStartupFilter
{
public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
{
return builder =>
{
builder.UseMiddleware<RequestSetOptionsMiddleware>();
next(builder);
};
}
}
// </snippet1>
The IStartupFilter je registrován v 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();
Pokud je zadán parametr dotazu pro option, middleware zpracuje přiřazení hodnoty před tím, než middleware ASP.NET Core vykreslí odpověď.
@page
@model PrivacyModel
@{
ViewData["Title"] = "Privacy Policy";
}
<h1>@ViewData["Title"]</h1>
<p> Append query string ?option=hello</p>
Option String: @HttpContext.Items["option"];
Pořadí provádění middlewaru IStartupFilter je nastaveno pořadím registrací:
Několik
IStartupFilterimplementací může pracovat se stejnými objekty. Pokud je řazení důležité, seřaďteIStartupFilterregistrace služeb tak, aby odpovídaly pořadí, v jakém by měla jejich middlewary běžet.Knihovny mohou přidat middleware s jednou nebo více
IStartupFilterimplementacemi, které běží před nebo po jiném middlewaru zaregistrovaném vIStartupFilter. Vyvolání middlewaruIStartupFilterpřed middlewarem přidaným knihovnouIStartupFilter:- Umístěte registraci služby před přidání knihovny do kontejneru služby.
- Aby bylo možné proces spustit později, umístěte registraci služby po přidání knihovny.
Poznámka: Není možné rozšířit aplikaci ASP.NET Core, když přepíšete Configure. Další informace najdete u tohoto problému na GitHubu.
Přidejte konfiguraci při spuštění z externího sestavení
Implementace IHostingStartup umožňuje přidání vylepšení do aplikace při spuštění z externího sestavení mimo soubor aplikace Program.cs . Další informace viz Použití hostujících spouštěcích sestavení v ASP.NET Core.
Třída Startup konfiguruje služby a kanál žádosti aplikace.
Inicializační třída
ASP.NET aplikace Core používají Startup třídu, která je pojmenovaná Startup konvencí. Třída Startup:
- Volitelně zahrnuje metodu ConfigureServices konfigurace služeb aplikace. Služba je opakovaně použitelná komponenta, která poskytuje funkce aplikace. Služby jsou registrovány v
ConfigureServicesa využívány v celé aplikaci prostřednictvím dependency injection (injektáže závislostí, DI) nebo ApplicationServices. - Obsahuje metodu Configure pro vytvoření kanálu zpracování požadavků aplikace.
ConfigureServices a Configure jsou volány modulem runtime ASP.NET Core při spuštění aplikace:
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();
});
}
}
Předchozí ukázka je pro Razor Pages. Verze MVC je podobná.
Třída Startup je specifikována při sestavení hostitele aplikace. Třída Startup je obvykle určena voláním WebHostBuilderExtensions.UseStartup/<TStartup> metody v tvůrci hostitelů:
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>();
});
}
Hostitel poskytuje služby, které jsou k dispozici konstruktoru Startup třídy. Aplikace přidává další služby prostřednictvím ConfigureServices. Hostitelské i aplikační služby jsou dostupné v Configure i v celé aplikaci.
Pouze následující typy služeb mohou být injektovány do konstruktoru při použití obecného hostitele (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
{
}
}
}
Většina služeb není k dispozici, dokud se metoda Configure nevolá.
Vícenásobné spuštění
Když aplikace definuje samostatné Startup třídy pro různá prostředí (například StartupDevelopment), vybere se za běhu příslušná Startup třída. Třída, jejíž přípona názvu odpovídá aktuálnímu prostředí, má prioritu. Pokud je aplikace spuštěná v Development prostředí a zahrnuje třídu Startup i StartupDevelopment třídu, použije se StartupDevelopment třída. Další informace najdete v tématu Použití více prostředí.
Další informace o hostiteli najdete v tématu Hostitel . Informace o zpracování chyb při spuštění naleznete v tématu Zpracování výjimek při spuštění.
Metoda ConfigureServices
Metoda ConfigureServices je:
- Optional.
- Před metodou
Configureje zavoláno hostitelem pro konfiguraci služeb aplikace. - Kde jsou možnosti konfigurace nastaveny podle konvence.
Hostitel může nakonfigurovat některé služby před Startup zavolání metod. Další informace naleznete v tématu Hostitel.
Pro funkce, které vyžadují značné nastavení, existují Add{Service} metody rozšíření.IServiceCollection Například AddDbContext, AddDefaultIdentity, AddEntityFrameworkStores a 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();
}
Přidáním služeb do kontejneru služby je zpřístupníte v aplikaci a v Configure metodě. Služby jsou vyřešeny prostřednictvím injektáže závislostí nebo z ApplicationServices.
Metoda Configure
Metoda Configure se používá k určení způsobu, jakým aplikace reaguje na požadavky HTTP. Kanál požadavku je nakonfigurovaný přidáním komponent middlewaruIApplicationBuilder do instance.
IApplicationBuilder je k dispozici pro metodu Configure , ale není zaregistrovaná v kontejneru služby. Hostování vytvoří IApplicationBuilder a předá ho přímo do Configure.
Šablony ASP.NET Core slouží ke konfiguraci kanálu s podporou:
- Stránka výjimky pro vývojáře
- Obslužná rutina výjimky
- Zabezpečení striktního přenosu HTTP (HSTS)
- Přesměrování HTTPS
- Statické soubory
- ASP.NET Core MVC a Razor stránky
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();
});
}
}
Předchozí ukázka je pro Razor Pages. Verze MVC je podobná.
Každá Use metoda rozšíření přidá do kanálu požadavku jednu nebo více komponent middlewaru. Například nakonfiguruje middleware tak, UseStaticFiles aby sloužil statickým souborům.
Každá middleware komponenta ve zpracovatelském řetězci požadavků je odpovědná za volání další komponenty v řetězci nebo za přerušení řetězce, pokud je to vhodné.
V podpisu metody je možné zadat další služby, jako jsou IWebHostEnvironment, ILoggerFactory, nebo cokoli, co je definováno v ConfigureServices, . Tyto služby jsou při dostupnosti vloženy.
Další informace o použití IApplicationBuilder a pořadí zpracování middlewaru najdete v tématu ASP.NET Core Middleware.
Konfigurace služeb bez spuštění
Konfigurace služeb a kanálu zpracování požadavků bez použití Startup třídy, volání ConfigureServices a Configure usnadnění metody v tvůrci hostitelů. Více volání, která se mají ConfigureServices připojit k sobě. Pokud existuje více Configure volání metod, použije se poslední Configure volání.
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"];
});
});
});
}
Rozšířit spuštění pomocí spouštěcích filtrů
IStartupFilter použijte:
- Konfigurace middlewaru na začátku nebo konci kanálu middlewaru aplikace bez explicitního volání
Use{Middleware}.IStartupFilterje používán frameworkem ASP.NET Core k přidání výchozích hodnot na začátek kanálu, aniž by musel autor aplikace explicitně zaregistrovat výchozí middleware.IStartupFilterumožňuje, aby jiná komponenta volalaUse{Middleware}jménem autora aplikace. - Vytvoření kanálu
Configuremetod IStartupFilter.Configure může nastavit middleware, který se má spustit před nebo po přidání middlewaru knihovnami.
IStartupFilter implementuje Configure, který přijímá a vrací Action<IApplicationBuilder>.
IApplicationBuilder definuje třídu ke konfiguraci žádostového kanálu aplikace. Další informace najdete v tématu Vytvoření kanálu middlewaru pomocí nástroje IApplicationBuilder.
Každý z nich IStartupFilter může do kanálu požadavku přidat jeden nebo více middlewarů. Filtry se vyvolávají v pořadí, v jakém byly přidány do kontejneru služby. Filtry můžou před nebo po předání ovládacího prvku do dalšího filtru přidat middleware, a proto se připojují k začátku nebo konci kanálu aplikace.
Následující příklad ukazuje, jak zaregistrovat middleware s IStartupFilter. Middleware RequestSetOptionsMiddleware nastaví hodnotu možností z parametru řetězce dotazu:
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);
}
}
Prvek RequestSetOptionsMiddleware je nakonfigurován ve třídě RequestSetOptionsStartupFilter.
public class RequestSetOptionsStartupFilter : IStartupFilter
{
public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
{
return builder =>
{
builder.UseMiddleware<RequestSetOptionsMiddleware>();
next(builder);
};
}
}
Je IStartupFilter registrován v kontejneru služby v 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>();
});
}
Pokud je zadán parametr řetězce dotazu option, middleware zpracuje přiřazení hodnoty, než middleware ASP.NET Core vykreslí odpověď.
Pořadí provádění middlewaru IStartupFilter je nastaveno pořadím registrací:
Několik
IStartupFilterimplementací může pracovat se stejnými objekty. Pokud je řazení důležité, seřaďteIStartupFilterregistrace služeb tak, aby odpovídaly pořadí, ve kterém by se měly spouštět jejich middlewary.Knihovny mohou přidat middleware s jednou nebo více
IStartupFilterimplementacemi, které běží před nebo po jiném middlewaru aplikace zaregistrovaného vIStartupFilteraplikaci . Vyvolání middlewaruIStartupFilterpřed middlewarem přidaným knihovnouIStartupFilter:- Umístěte registraci služby před přidání knihovny do kontejneru služby.
- Abyste mohli volat později, umístěte registraci služby až po přidání knihovny.
Přidejte konfiguraci při spuštění z externího sestavení
Implementace IHostingStartup umožňuje přidávat vylepšení aplikace při spuštění z externího sestavení mimo třídu Startup aplikace. Další informace viz Použití hostujících spouštěcích sestavení v ASP.NET Core.