Applikationsstart för ASP.NET Core
Not
Det här är inte den senaste versionen av den här artikeln. För den aktuella versionen, se .NET 9-versionen av den här artikeln.
Varning
Den här versionen av ASP.NET Core stöds inte längre. Mer information finns i .NET och .NET Core Support Policy. Den aktuella versionen finns i den .NET 9-versionen av den här artikeln.
Viktig
Den här informationen gäller en förhandsversionsprodukt som kan ändras avsevärt innan den släpps kommersiellt. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, med avseende på den information som tillhandahålls här.
Den aktuella versionen finns i den .NET 9-versionen av den här artikeln.
ASP.NET Core-appar som skapats med webbmallarna innehåller programmets startkod i filen Program.cs
.
Vägledning för Blazor start, som lägger till eller ersätter vägledningen i den här artikeln, finns i ASP.NET Core Blazor start.
Följande appstartkod stöder flera apptyper:
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();
Appar som använder EventSource kan mäta starttiden för att förstå och optimera startprestanda. Den ServerReady
händelsen i Microsoft.AspNetCore.Hosting representerar den punkt där servern är redo att svara på begäranden.
Utöka start med startfilter
Använd IStartupFilter:
- Konfigurera mellanprogram i början eller slutet av en apps pipeline för mellanprogram utan ett explicit anrop till
Use{Middleware}
. AnvändIStartupFilter
för att lägga till standardvärden i början av pipelinen utan att uttryckligen registrera standardmellanprogrammet.IStartupFilter
tillåter att en annan komponent anroparUse{Middleware}
för appförfattarens räkning. - Skapa en pipeline av
Configure
-metoder. IStartupFilter.Configure kan ange att ett mellanprogram ska köras före eller efter mellanprogram som lagts till av bibliotek.
En IStartupFilter
implementering implementerar Configure, som tar emot och returnerar en Action<IApplicationBuilder>
. En IApplicationBuilder definierar en klass för att konfigurera en applikations begärande-pipeline. Mer information finns i Skapa en pipeline för mellanprogram med IApplicationBuilder.
Varje IStartupFilter
implementering kan lägga till ett eller flera mellanprogram i pipelinen för begäranden. Filtren anropas i den ordning de lades till i tjänstcontainern. Filter kan lägga till mellanprogram före eller efter att kontrollen har överförts till nästa filter, vilket gör att de läggs till i början eller slutet av apppipelinen.
I följande exempel visas hur du registrerar ett mellanprogram med IStartupFilter
.
RequestSetOptionsMiddleware
mellanprogram anger ett alternativvärde från en frågesträngsparameter:
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
har konfigurerats i klassen RequestSetOptionsStartupFilter
:
public class RequestSetOptionsStartupFilter : IStartupFilter
{
public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
{
return builder =>
{
builder.UseMiddleware<RequestSetOptionsMiddleware>();
next(builder);
};
}
}
Implementeringen IStartupFilter
registreras i 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();
När en frågesträngsparameter för option
tillhandahålls bearbetar mellanprogrammet värdetilldelningen innan ASP.NET Core-mellanprogrammet återger svaret:
@page
@model PrivacyModel
@{
ViewData["Title"] = "Privacy Policy";
}
<h1>@ViewData["Title"]</h1>
<p> Append query string ?option=hello</p>
Option String: @HttpContext.Items["option"];
Körningsordningen för mellanmjukvara anges enligt ordningen av IStartupFilter
-registreringar.
Flera
IStartupFilter
implementeringar kan interagera med samma objekt. Om det är viktigt med rätt ordning, beställer du registreringarna av derasIStartupFilter
-tjänster så att de överensstämmer med den ordning i vilken deras mellanprogram ska köras.Bibliotek kan lägga till mellanprogram med en eller flera
IStartupFilter
implementeringar som körs före eller efter andra appmellanprogram som registrerats medIStartupFilter
. Så här anropar du ettIStartupFilter
mellanprogram innan ett mellanprogram som läggs till av ett biblioteksIStartupFilter
:- Placera tjänstregistreringen innan biblioteket läggs till i tjänstcontainern.
- Om du vill anropa efteråt placerar du tjänstregistreringen efter att biblioteket har lagts till.
Du kan inte utöka ASP.NET Core-appen när du åsidosätter Configure
. Mer information finns i det här GitHub-ärendet.
Lägga till konfiguration vid start från en extern sammansättning
Med en IHostingStartup implementering kan du lägga till förbättringar i en app vid start från en extern sammansättning utanför appens Program.cs
-fil. Mer information finns i Använda värdstartssammansättningar i ASP.NET Core.
Start, ConfigureServices och Konfigurera
Information om hur du använder metoderna ConfigureServices och Configure med den minimala värdmodellen finns i:
ASP.NET Core-appar som skapats med webbmallarna innehåller programmets startkod i filen Program.cs
.
Följande appstartkod stöder:
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();
Mer information om programstart finns i översikten över grunderna i ASP.NET Core.
Utvidga Startup med startfilter
Använd IStartupFilter:
- Konfigurera mellanvara i början eller slutet av appens pipeline för mellanvara utan ett explicit anrop till
Use{Middleware}
. AnvändIStartupFilter
för att lägga till standardvärden i början av pipelinen utan att uttryckligen registrera standardmellanprogrammet.IStartupFilter
tillåter att en annan komponent anroparUse{Middleware}
för appförfattarens räkning. - Skapa en pipeline med
Configure
metoder. IStartupFilter.Configure kan ange att ett mellanprogram ska köras före eller efter mellanprogram som lagts till av bibliotek.
IStartupFilter
implementerar Configure, som tar emot och returnerar en Action<IApplicationBuilder>
. En IApplicationBuilder definierar en klass för att konfigurera en appens förfrågningspipeline. Mer information finns i Skapa en pipeline för mellanprogram med IApplicationBuilder.
Varje IStartupFilter
kan lägga till ett eller flera mellanprogram i pipelinen för begäran. Filtren anropas i den ordning de lades till i tjänstcontainern. Filter kan lägga till mellanprogram före eller efter att kontrollen har överförts till nästa filter, vilket gör att de läggs till i början eller slutet av apppipelinen.
I följande exempel visas hur du registrerar ett mellanprogram med IStartupFilter
.
RequestSetOptionsMiddleware
mellanprogram anger ett alternativvärde från en frågesträngsparameter:
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
har konfigurerats i klassen RequestSetOptionsStartupFilter
:
namespace WebStartup.Middleware;
// <snippet1>
public class RequestSetOptionsStartupFilter : IStartupFilter
{
public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
{
return builder =>
{
builder.UseMiddleware<RequestSetOptionsMiddleware>();
next(builder);
};
}
}
// </snippet1>
IStartupFilter
är registrerad i 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();
När en frågesträngsparameter för option
tillhandahålls bearbetar mellanprogrammet värdetilldelningen innan ASP.NET Core-mellanprogrammet återger svaret:
@page
@model PrivacyModel
@{
ViewData["Title"] = "Privacy Policy";
}
<h1>@ViewData["Title"]</h1>
<p> Append query string ?option=hello</p>
Option String: @HttpContext.Items["option"];
Körningsordningen för mellanliggande programvara anges enligt ordningen för IStartupFilter
-registreringarnas.
Flera
IStartupFilter
implementeringar kan interagera med samma objekt. Om beställningen är viktig beställer du derasIStartupFilter
tjänstregistreringar så att de matchar den ordning som deras mellanprogram ska köras.Bibliotek kan lägga till mellanprogram med en eller flera
IStartupFilter
implementeringar som körs före eller efter andra appmellanprogram som registrerats medIStartupFilter
. Så här anropar du ettIStartupFilter
mellanprogram innan ett mellanprogram som läggs till av ett biblioteksIStartupFilter
:- Placera tjänstregistreringen innan biblioteket läggs till i tjänstcontainern.
- Om du vill anropa efteråt placerar du tjänstregistreringen efter att biblioteket har lagts till.
Obs! Du kan inte utöka ASP.NET Core-appen när du åsidosätter Configure
. Mer information finns i det här GitHub-ärendet.
Lägga till konfiguration vid start från en extern sammansättning
Med en IHostingStartup implementering kan du lägga till förbättringar i en app vid start från en extern sammansättning utanför appens Program.cs
-fil. För mer information, se Använda värdstartsmoduler i ASP.NET Core.
Klassen Startup
konfigurerar tjänster och appens pipeline för begäranden.
Startklassen
ASP.NET Core-appar använder en Startup
-klass som heter Startup
enligt konvention. Klassen Startup
:
- Du kan även använda en ConfigureServices-metod för att konfigurera appens -tjänster. En tjänst är en återanvändbar komponent som tillhandahåller appfunktioner. Tjänsterna registreras i
ConfigureServices
och används i hela appen via beroendeinmatning (DI) eller ApplicationServices. - Innehåller en Configure metod för att skapa appens pipeline för bearbetning av begäranden.
ConfigureServices
och Configure
anropas av ASP.NET Core-körningen när appen startar:
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();
});
}
}
Föregående exempel är för Razor Pages; MVC-versionen är liknande.
Klassen Startup
anges när appens värd skapas. Klassen Startup
anges vanligtvis genom att anropa metoden WebHostBuilderExtensions.UseStartup
/<TStartup>
på värdverktyget:
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>();
});
}
Värden tillhandahåller tjänster som är tillgängliga för Startup
-klasskonstruktorn. Appen lägger till ytterligare tjänster via ConfigureServices
. Både värd- och apptjänsterna är tillgängliga i Configure
och i hela appen.
Endast följande tjänsttyper kan matas in i Startup
konstruktorn när du använder Generic Host (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
{
}
}
}
De flesta tjänster är inte tillgängliga förrän metoden Configure
anropas.
Flera uppstarter
När appen definierar separata Startup
klasser för olika miljöer (till exempel StartupDevelopment
) väljs lämplig Startup
klass vid körning. Klassen vars namnsuffix matchar den aktuella miljön prioriteras. Om appen körs i utvecklingsmiljön och innehåller både en Startup
-klass och en StartupDevelopment
-klass används klassen StartupDevelopment
. Mer information finns i Använda flera miljöer.
Se Värd för mer information om värden. Information om hur du hanterar fel under start finns i Undantagshantering för start.
Metoden ConfigureServices
Metoden ConfigureServices är:
- Valfri.
- Anropas av servern före
Configure
-metoden för att konfigurera applikationens tjänster. - Där konfigurationsalternativ anges av konventionen.
Värden kan konfigurera vissa tjänster innan Startup
metoder anropas. Mer information finns i Värden.
För funktioner som kräver en omfattande installation kan du använda Add{Service}
tilläggsmetoder på IServiceCollection. Till exempel: Lägg tillDbContext, Lägg tillDefaultIdentity, Lägg tillEntityFrameworkStores, och Lägg tillRazorPages.
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();
}
Genom att lägga till tjänster i tjänstcontainern blir de tillgängliga i appen och i metoden Configure
. Tjänsterna hanteras via dependency injection eller från ApplicationServices.
Konfigurera-metoden
Metoden Configure används för att ange hur appen svarar på HTTP-begäranden. Begärans pipeline konfigureras genom att lägga till mellanprogram-komponenter till en IApplicationBuilder-instans.
IApplicationBuilder
är tillgängligt för metoden Configure
, men den är inte registrerad i tjänstekontainern. Hosting skapar en IApplicationBuilder
och skickar den direkt till Configure
.
ASP.NET Core-mallarna konfigurerar pipelinen med stöd för:
- undantagssida för utvecklare
- Undantagshanterare
- HTTP Strict Transport Security (HSTS)
- HTTPS-omdirigering
- statiska filer
- ASP.NET Core MVC och Razor Sidor
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();
});
}
}
Föregående exempel är för Razor Pages; MVC-versionen är liknande.
Varje Use
tilläggsmetod lägger till en eller flera mellanprogramskomponenter i pipelinen för begäranden. Till exempel konfigurerar UseStaticFilesmellanprogram för att hantera statiska filer.
Varje mellanprogramskomponent i begärandepipelinen ansvarar för att anropa nästa komponent i pipelinen eller kortsluta kedjan, om det är lämpligt.
Ytterligare tjänster, till exempel IWebHostEnvironment
, ILoggerFactory
eller något som definierats i ConfigureServices
, kan anges i Configure
-metodsignaturen. Dessa tjänster injiceras om de är tillgängliga.
Mer information om hur du använder IApplicationBuilder
och ordningen på mellanprogramsbearbetning finns i ASP.NET Core Middleware.
Konfigurera tjänster utan uppstartsprocessen
Om du vill konfigurera tjänster och pipelinen för bearbetning av begäranden utan att använda en Startup
-klass anropar du ConfigureServices
och Configure
bekvämlighetsmetoder på värdverktyget. Flera anrop till ConfigureServices
läggs till efter varandra. Om det finns flera Configure
metodanrop används det sista Configure
-anropet.
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"];
});
});
});
}
Utöka startprocessen med startfilter
Använd IStartupFilter:
- Konfigurera mellanprogram i början eller slutet av en apps Konfigurera mellanprogramspipeline utan ett explicit anrop till
Use{Middleware}
.IStartupFilter
används av ASP.NET Core för att lägga till standardvärden i början av pipelinen utan att appförfattaren uttryckligen behöver registrera standardmellanprogrammet.IStartupFilter
tillåter att en annan komponent anroparUse{Middleware}
för appförfattarens räkning. - Skapa en pipeline med
Configure
metoder. IStartupFilter.Configure kan ange att ett mellanprogram ska köras före eller efter mellanprogram som lagts till av bibliotek.
IStartupFilter
implementerar Configure, som tar emot och returnerar en Action<IApplicationBuilder>
. En IApplicationBuilder definierar en klass för att konfigurera appens begärandepipeline. Mer information finns i Skapa en pipeline för mellanprogram med IApplicationBuilder.
Varje IStartupFilter
kan lägga till ett eller flera mellanprogram i pipelinen för begäran. Filtren anropas i den ordning de lades till i tjänstcontainern. Filter kan lägga till mellanprogram före eller efter att kontrollen har överförts till nästa filter, vilket gör att de läggs till i början eller slutet av apppipelinen.
I följande exempel visas hur du registrerar ett mellanprogram med IStartupFilter
.
RequestSetOptionsMiddleware
mellanprogram anger ett alternativvärde från en frågesträngsparameter:
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
har konfigurerats i klassen RequestSetOptionsStartupFilter
:
public class RequestSetOptionsStartupFilter : IStartupFilter
{
public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
{
return builder =>
{
builder.UseMiddleware<RequestSetOptionsMiddleware>();
next(builder);
};
}
}
IStartupFilter
är registrerad i servicebehållaren i 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>();
});
}
När en frågesträngsparameter för option
tillhandahålls bearbetar mellanprogrammet värdetilldelningen innan ASP.NET Core-mellanprogrammet återger svaret.
Körningsordningen för mellanprogram anges enligt ordningen för IStartupFilter
registreringar:
Flera
IStartupFilter
implementeringar kan interagera med samma objekt. Om beställningen är viktig beställer du derasIStartupFilter
tjänstregistreringar så att de matchar den ordning som deras mellanprogram ska köras.Bibliotek kan lägga till mellanprogram med en eller flera
IStartupFilter
implementeringar som körs före eller efter andra appmellanprogram som registrerats medIStartupFilter
. För att anropa ettIStartupFilter
mellanprogram före ett mellanprogram som läggs till via ett biblioteksIStartupFilter
:- Placera tjänstregistreringen innan biblioteket läggs till i tjänstcontainern.
- Om du vill anropa efteråt placerar du tjänstregistreringen efter att biblioteket har lagts till.
Lägga till konfiguration vid start från en extern sammansättning
Med en IHostingStartup implementering kan du lägga till förbättringar i en app vid start från en extern sammansättning utanför appens Startup
-klass. Mer information finns i Använda värdstartssammansättningar i ASP.NET Core.
Ytterligare resurser
ASP.NET Core